<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                這篇文章會盡量以通俗易懂的方式描述[iptables](http://www.zsythink.net/archives/tag/iptables/)的相關概念,請耐心的讀完它。 ## 防火墻相關概念 此處先描述一些相關概念。 從邏輯上講。防火墻可以大體分為主機防火墻和網絡防火墻。 主機防火墻:針對于單個主機進行防護。 網絡防火墻:往往處于網絡入口或邊緣,針對于網絡入口進行防護,服務于防火墻背后的本地局域網。 網絡防火墻和主機防火墻并不沖突,可以理解為,網絡防火墻主外(集體), 主機防火墻主內(個人)。 從物理上講,防火墻可以分為硬件防火墻和軟件防火墻。 硬件防火墻:在硬件級別實現部分防火墻功能,另一部分功能基于軟件實現,性能高,成本高。 軟件防火墻:應用軟件處理邏輯運行于通用硬件平臺之上的防火墻,性能低,成本低。 ![](https://img.kancloud.cn/eb/fb/ebfb79bfa9c2cb1376c4b55ee7721623_533x355.png) 那么在此處,我們就來聊聊Linux的iptables **iptables**其實不是真正的防火墻,我們可以把它理解成一個客戶端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對應的"安全框架"中,這個"安全框架"才是真正的防火墻,這個框架的名字叫**netfilter** netfilter才是防火墻真正的安全框架(framework),netfilter位于內核空間。 iptables其實是一個命令行工具,位于用戶空間,我們用這個工具操作真正的框架。 netfilter/iptables(下文中簡稱為iptables)組成Linux平臺下的包過濾防火墻,與大多數的Linux軟件一樣,這個包過濾防火墻是免費的,它可以代替昂貴的商業防火墻解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。 Netfilter是Linux操作系統核心層內部的一個數據包處理模塊,它具有如下功能: 網絡地址轉換(Network Address Translate) 數據包內容修改 以及數據包過濾的防火墻功能 所以說,雖然我們使用service iptables start啟動iptables"服務",但是其實準確的來說,iptables并沒有一個守護進程,所以并不能算是真正意義上的服務,而應該算是內核提供的功能。 ## iptables基礎 我們知道iptables是按照規則來辦事的,我們就來說說規則(rules),規則其實就是網絡管理員預定義的條件,規則一般的定義為"如果數據包頭符合這樣的條件,就這樣處理這個數據包"。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規則。 這樣說可能并不容易理解,我們來換個容易理解的角度,從頭說起. 當客戶端訪問服務器的web服務時,客戶端發送報文到網卡,而tcp/ip協議棧是屬于內核的一部分,所以,客戶端的信息會通過內核的TCP協議傳輸到用戶空間中的web服務中,而此時,客戶端報文的目標終點為web服務所監聽的套接字(IP:Port)上,當web服務需要響應客戶端請求時,web服務發出的響應報文的目標終點則為客戶端,這個時候,web服務所監聽的IP與端口反而變成了原點,我們說過,netfilter才是真正的防火墻,它是內核的一部分,所以,如果我們想要防火墻能夠達到"防火"的目的,則需要在內核中設置關卡,所有進出的報文都要通過這些關卡,經過檢查后,符合放行條件的才能放行,符合阻攔條件的則需要被阻止,于是,就出現了input關卡和output關卡,而這些關卡在iptables中不被稱為"關卡",而被稱為"鏈"。 ![](https://img.kancloud.cn/ac/88/ac889c57cb0cf76e8a64d43e90226997_415x429.png) ? ? 其實我們上面描述的場景并不完善,因為客戶端發來的報文訪問的目標地址可能并不是本機,而是其他服務器,當本機的內核支持IP\_FORWARD時,我們可以將報文轉發給其他服務器,所以,這個時候,我們就會提到iptables中的其他"關卡",也就是其他"鏈",他們就是 ?"路由前"、"轉發"、"路由后",他們的英文名是 PREROUTING、FORWARD、POSTROUTING 也就是說,當我們啟用了防火墻功能時,報文需要經過如下關卡,也就是說,根據實際情況的不同,報文經過"鏈"可能不同。如果報文需要轉發,那么報文則不會經過input鏈發往用戶空間,而是直接在內核空間中經過forward鏈和postrouting鏈轉發出去的。 ![](https://img.kancloud.cn/3d/bf/3dbf3f3ef57049de0496f1872c045926_827x526.png) 所以,根據上圖,我們能夠想象出某些常用場景中,報文的流向: 到本機某進程的報文:PREROUTING --> INPUT 由本機轉發的報文:PREROUTING --> FORWARD --> POSTROUTING 由本機的某進程發出報文(通常為響應報文):OUTPUT --> POSTROUTING ? ? ## 鏈的概念 現在,我們想象一下,這些"關卡"在iptables中為什么被稱作"鏈"呢?我們知道,防火墻的作用就在于對經過的報文匹配"規則",然后執行對應的"動作",所以,當報文經過這些關卡的時候,則必須匹配這個關卡上的規則,但是,這個關卡上可能不止有一條規則,而是有很多條規則,當我們把這些規則串到一個鏈條上的時候,就形成了"鏈",所以,我們把每一個"關卡"想象成如下圖中的模樣 ?,這樣來說,把他們稱為"鏈"更為合適,每個經過這個"關卡"的報文,都要將這條"鏈"上的所有規則匹配一遍,如果有符合條件的規則,則執行規則對應的動作。 ![](https://img.kancloud.cn/85/ea/85eaa1024ffe7f024f59e85038a01d8e_576x530.png) ? ## 表的概念 我們再想想另外一個問題,我們對每個"鏈"上都放置了一串規則,但是這些規則有些很相似,比如,A類規則都是對IP或者端口的過濾,B類規則是修改報文,那么這個時候,我們是不是能把實現相同功能的規則放在一起呢,必須能的。 我們把具有相同功能的規則的集合叫做"表",所以說,不同功能的規則,我們可以放置在不同的表中進行管理,而iptables已經為我們定義了4種表,每種表對應了不同的功能,而我們定義的規則也都逃脫不了這4種功能的范圍,所以,學習iptables之前,我們必須先搞明白每種表 的作用。 iptables為我們提供了如下規則的分類,或者說,iptables為我們提供了如下"表" filter表:負責過濾功能,防火墻;內核模塊:iptables\_filter nat表:network address translation,網絡地址轉換功能;內核模塊:iptable\_nat mangle表:拆解報文,做出修改,并重新封裝 的功能;iptable\_mangle raw表:關閉nat表上啟用的連接追蹤機制;iptable\_raw 也就是說,我們自定義的所有規則,都是這四種分類中的規則,或者說,所有規則都存在于這4張"表"中。 ? ? ## 表鏈關系 但是我們需要注意的是,某些"鏈"中注定不會包含"某類規則",就像某些"關卡"天生就不具備某些功能一樣,比如,A"關卡"只負責打擊陸地敵人,沒有防空能力,B"關卡"只負責打擊空中敵人,沒有防御步兵的能力,C"關卡"可能比較NB,既能防空,也能防御陸地敵人,D"關卡"最屌,海陸空都能防。 那讓我們來看看,每個"關卡"都有哪些能力,或者說,讓我們看看每個"鏈"上的規則都存在于哪些"表"中。 我們還是以圖為例,先看看prerouting"鏈"上的規則都存在于哪些表中。 注意:下圖只用于說明prerouting鏈上的規則存在于哪些表中,并沒有描述表的順序。 ? ? ![](https://img.kancloud.cn/2b/f2/2bf21fe4867b3f434557378d0f82f8f6_237x577.png) 這幅圖是什么意思呢?它的意思是說,prerouting"鏈"只擁有nat表、raw表和mangle表所對應的功能,所以,prerouting中的規則只能存放于nat表、raw表和mangle表中。 那么,根據上述思路,我們來總結一下,每個"關卡"都擁有什么功能, 或者說,每個"鏈"中的規則都存在于哪些"表"中。 PREROUTING ? ? ?的規則可以存在于:raw表,mangle表,nat表。 INPUT ? ? ? ? ?的規則可以存在于:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。 FORWARD ? ? ? ? 的規則可以存在于:mangle表,filter表。 OUTPUT ? ? ? ? 的規則可以存在于:raw表mangle表,nat表,filter表。 POSTROUTING ? ? ?的規則可以存在于:mangle表,nat表。 但是,**我們在實際的使用過程中,往往是通過"表"作為操作入****口,對規則進行定義的**,之所以按照上述過程介紹iptables,是因為從"關卡"的角度更容易從入門的角度理解,但是為了以便在實際使用的時候,更加順暢的理解它們,此處我們還要將各"表"與"鏈"的關系羅列出來, 表(功能) ? 鏈(鉤子): raw ? ? 表中的規則可以被哪些鏈使用:PREROUTING,OUTPUT mangle ?表中的規則可以被哪些鏈使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING nat ? ? 表中的規則可以被哪些鏈使用:PREROUTING,OUTPUT,POSTROUTING(centos7中還有INPUT,centos6中沒有) filter ?表中的規則可以被哪些鏈使用:INPUT,FORWARD,OUTPUT 其實我們還需要注意一點,因為數據包經過一個"鏈"的時候,會將當前鏈的所有規則都匹配一遍,但是匹配時總歸要有順序,我們應該一條一條的去匹配,而且我們說過,相同功能類型的規則會匯聚在一張"表"中,那么,哪些"表"中的規則會放在"鏈"的最前面執行呢,這時候就需要有一個優先級的問題,我們還拿prerouting"鏈"做圖示。 ![](https://img.kancloud.cn/fb/cf/fbcfe99aa6d9054a5a36162bcc6260de_259x573.png) prerouting鏈中的規則存放于三張表中,而這三張表中的規則執行的優先級如下: raw --> mangle --> nat 但是我們知道,iptables為我們定義了4張"表",當他們處于同一條"鏈"時,執行的優先級如下。 優先級次序(由高而低): raw --> mangle --> nat --> filter 但是我們前面說過,某些鏈天生就不能使用某些表中的規則,所以,4張表中的規則處于同一條鏈的目前只有output鏈,它就是傳說中海陸空都能防守的關卡。 為了更方便的管理,我們還可以在某個表里面創建自定義鏈,將針對某個應用程序所設置的規則放置在這個自定義鏈中,但是自定義鏈接不能直接使用,只能被某個默認的鏈當做動作去調用才能起作用,我們可以這樣想象,自定義鏈就是一段比較"短"的鏈子,這條"短"鏈子上的規則都是針對某個應用程序制定的,但是這條短的鏈子并不能直接使用,而是需要"焊接"在iptables默認定義鏈子上,才能被IPtables使用,這就是為什么默認定義的"鏈"需要把"自定義鏈"當做"動作"去引用的原因。這是后話,后面再聊,在實際使用時我們即可更加的明白。 ? ? ## 數據經過防火墻的流程 結合上述所有的描述,我們可以將數據包通過防火墻的流程總結為下圖: ? ![](https://img.kancloud.cn/40/5b/405b6393258e856ee4fa2ecb0637ad24_1012x533.png) ? 我們在寫Iptables規則的時候,要時刻牢記這張路由次序圖,靈活配置規則。 ? ? 我們將經常用到的對應關系重新寫在此處,方便對應圖例查看。 鏈的規則存放于哪些表中(從鏈到表的對應關系): PREROUTING ? 的規則可以存在于:raw表,mangle表,nat表。 INPUT ? ? ? ?的規則可以存在于:mangle表,filter表,(centos7中還有nat表,centos6中沒有)。 FORWARD ? ? ?的規則可以存在于:mangle表,filter表。 OUTPUT ? ? ? 的規則可以存在于:raw表mangle表,nat表,filter表。 POSTROUTING ?的規則可以存在于:mangle表,nat表。 ? ? 表中的規則可以被哪些鏈使用(從表到鏈的對應關系): raw ? ? 表中的規則可以被哪些鏈使用:PREROUTING,OUTPUT mangle ?表中的規則可以被哪些鏈使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING nat ? ? 表中的規則可以被哪些鏈使用:PREROUTING,OUTPUT,POSTROUTING(centos7中還有INPUT,centos6中沒有) filter ?表中的規則可以被哪些鏈使用:INPUT,FORWARD,OUTPUT 下圖中nat表在centos7中的情況就不再標明。 ? ? ![](https://img.kancloud.cn/8e/b4/8eb4f21acfc8eeab6db76f332b18b0a3_576x276.png) ? ? ## 規則的概念 說了一圈又說回來了,在上述描述中我們一直在提規則,可是沒有細說,現在說說它。 先說說規則的概念,然后再通俗的解釋它。 規則:根據指定的匹配條件來嘗試匹配每個流經此處的報文,一旦匹配成功,則由規則后面指定的處理動作進行處理; 那么我們來通俗的解釋一下什么是iptables的規則,之前打過一個比方,每條"鏈"都是一個"關卡",每個通過這個"關卡"的報文都要匹配這個關卡上的規則,如果匹配,則對報文進行對應的處理,比如說,你我二人此刻就好像兩個"報文",你我二人此刻都要入關,可是城主有命,只有器宇軒昂的人才能入關,不符合此條件的人不能入關,于是守關將士按照城主制定的"規則",開始打量你我二人,最終,你順利入關了,而我已被拒之門外,因為你符合"器宇軒昂"的標準,所以把你"放行"了,而我不符合標準,所以沒有被放行,其實,"器宇軒昂"就是一種"匹配條件","放行"就是一種"動作","匹配條件"與"動作"組成了規則。 了解了規則的概念,那我們來聊聊規則的組成部分,此處只是大概的將規則的結構列出,后面的文章中會單獨對規則進行總結。 規則由匹配條件和處理動作組成。 ### 匹配條件 匹配條件分為基本匹配條件與擴展匹配條件 **基本匹配條件:** 源地址Source IP,目標地址 Destination IP 上述內容都可以作為基本匹配條件。 **擴展匹配條件:** 除了上述的條件可以用于匹配,還有很多其他的條件可以用于匹配,這些條件泛稱為擴展條件,這些擴展條件其實也是netfilter中的一部分,只是以模塊的形式存在,如果想要使用這些條件,則需要依賴對應的擴展模塊。 源端口Source Port, 目標端口Destination Port 上述內容都可以作為擴展匹配條件 ### **處理動作** 處理動作在iptables中被稱為target(這樣說并不準確,我們暫且這樣稱呼),動作也可以分為基本動作和擴展動作。 此處列出一些常用的動作,之后的文章會對它們進行詳細的示例與總結: **ACCEPT**:允許數據包通過。 **DROP**:直接丟棄數據包,不給任何回應信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間才會有反應。 **REJECT**:拒絕數據包通過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。 **SNAT**:源地址轉換,解決內網用戶用同一個公網地址上網的問題。 **MASQUERADE**:是SNAT的一種特殊形式,適用于動態的、臨時會變的ip上。 **DNAT**:目標地址轉換。 **REDIRECT**:在本機做端口映射。 **LOG**:在/var/log/messages文件中記錄日志信息,然后將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配。 ## 比較完成的流程圖 ![](https://img.kancloud.cn/a2/bc/a2bc76af269291b548ee8492f70f97cb_943x466.png) 手繪版 ![](https://img.kancloud.cn/5d/bd/5dbdff99dd7bc7420c9247fb61a95cba_1280x960.jpg) ## 小結 iptables的實際操作我們會另外總結為其他文章,iptables系列文章列表直達鏈接如下: [iptables零基礎快速入門系列](http://www.zsythink.net/archives/tag/iptables/) 好了,iptables的概念暫時總結到這里,懂得概念之后,再結合實際的命令去練習,搞定iptables絕對妥妥的。 最后說一句,客官您的**評論、收藏、推薦**是我寫博客的最大動力,希望親以后多捧場哦,么么噠~~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看