日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图文并茂详解iptables 防火墙工作原理及知识点

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图文并茂详解iptables 防火墙工作原理及知识点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 防火墻相關概念

  • iptables相關概念以及工作原理

  • iptables中四表五鏈的原理及規則

  • iptables中的基本命令詳解





------------------防火墻相關概念----------------------

?LINUX防火墻:隔離內部網絡和外部網絡的隔離技術。

??????????????????????????????????????????????? 介于3-4層的傳輸? ——管理控制 服務的提供。


系統安全:

1.第三方監控殺毒軟件

2.系統策略

3.文件權限

4.防火墻規則 :原地址 目標地址 端口 協議 mac 數據包中的標志

類似ACL訪問控制列表: 過濾


從邏輯上講。防火墻可以大體分為主機防火墻和網絡防火墻。


主機防火墻針對于單個主機進行防護。


網絡防火墻:往往處于網絡入口或邊緣,針對于網絡入口進行防護,服務于防火墻背后的本地局域網。
?????????????????????????? 網絡防火和主機防火墻并不中突,可以理解為,網絡防火墻主外(集體),主機防火墻主內(個人)。
????????????????????????? 從物理上講,防火墻可以分為硬件防火墻和軟件防火墻。


硬件防火墻:在硬件級別實現部分防火墻功能,另一部分功能基于軟件實現,性能高,成本高。如:思科ASA 華為防火墻 ?天融信防火墻 等。
軟件防火墻:應用軟件處理邏輯運行于通用硬件平臺之上的防火墻,性能低,成本低。如:iptables firewall(centos7獨有的)等。


-------------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、|CMP)和服務類型(如HTP、FP和SMTP)等。
數據包與規則匹配時, iptables就根據規則所定義的方法來處理這些數據包,如放行( accept)、拒絕( reject))和丟棄(drop)等。配置防火墻的主要工作就是添加、修改
和刪除這些規則。


這樣說可能并不容易理解,我們來換個容易理解的角度,從頭說起
????????? 當客戶端訪問服務器的web服務時,客戶端發送報文到網卡,而tcp/ip協議棧是屬于內核的一部分,所以,客戶端的信息會通過內核的TCP協議傳輸到用戶空間中的web服務
中,而此時,客戶端報文的目標終點為web服務所監聽的套接字(P:Por)上,當web服務需要響應客戶端請求時,web服務發出的響應報文的目標終點則為客戶端,這個時
候,web服務所監聽的P與端囗反而變成了原點,我們說過, netfilter 才是真正的防火墻,它是內核的部分,所以,如果我們想要防火墻能夠達到"防火"的目的,則需要在內
核中設置關卡,所有進出的報文都要通過這些關卡,經過檢查后,符合放行條件的才能放行,符合阻攔條件的則需要被阻止,于是,就出現了input關卡和 output關卡,而這些
關卡在 iptables中不被稱為關卡"而被稱為鏈"。


其實我們上面描述的場景并不完善,因為客戶端發來的報文訪問的目標地址可能并不是本機,而是其他服務器,當本機的內核支持 IP FORWARD時,我們可以將報文轉發給其
他服務器,所以,這個時候,我們就會提到 iptables中的其他”關卡,也就是其他鏈”,他們就是"路由前”、“轉發”、"路由后”,他們的英文名是
PREROUTING、 FORWARD、 POSTROUTING
也就是說,當我們啟用了防火墻功能時,報文需要經過如下關卡,也就是說,根據實際情況的不同,報文經過鏈可能不同。如果報文需要轉發,那么報文則不會經過 Input鏈
發往用戶空間,而是直接在內核空間中經過 forward鏈和 postrouting鏈轉發出去的。



所以,根據上圖,我們能夠想象出某些常用場景中,報文的流向
到本機某進程的報文: PREROUTING->|NPUT
由本機轉發的報文: PREROUTING-> FORWARD-> POSTROUTING
由本機的某進程發出報文(通常為響應報文): OUTPUT-> POSTROUTING



1. 規則表

表的概念
我們再想想另外一個問題,我們對每個"鏈”上都放置了一串規則,但是這些規則有些很相似,比如,A類規則都是對ip或者端囗的過濾,B類規則是修改報文,那么這個時候,我
們是不是能把實現相同功能的規則放在一起呢,必須能的
我們把具有相同功能的規則的集合叫做表”,所以說,不同功能的規則,我們可以放置在不同的表中進行管理,而iptables已經為我們定義了4種表,每種表對應了不同的功
能,而我們定義的規則也都逃脫不了這4種功能的范圍,所以,學習 iptables之前,我們必須先搞明白每種表的作用。


iptables為我們提供了如下規則的分類,或者說, iptables為我們提供了如下"表”:
filter表:負責過濾功能,防火墻;內核模塊: iptables_filter
nat 表: network address translation,網絡地址轉換功能;內核模塊: iptables_nat
mangle表:拆解報文,做出修改,并重新封裝的功能; iptables_mangle
raw表:關閉nat表上啟用的連接追蹤機制; iptables_raw


也就是說,我們自定義的所有規則,都是這四種分類中的規則,或者說,所有規則都存在于這4張表中。


  • raw:高級功能,如:網址過濾。

  • mangle:數據包修改(QOS),用于實現服務質量。

  • nat:地址轉換,用于網關路由器。Nat地址轉換

  • filter:包過濾,用于防火墻規則。過濾數據包,通還是不通

  • 數據包經過防火墻的處理順序



    2. 規則鏈 處理時機

    鏈的概念
    現在,我們想象一下,這些”關卡在 tables中為什么被稱作"鏈呢?我們知道,防火墻的作用就在于對經過的報文匹配"規則”,然后執行對應的”動作“所以,當報文經過這些
    關卡的時候,則必須匹配這個關卡上的規則,但是,這個關卡上可能不止有一條規則,而是有很多條規則,當我們把這些規則串到一個鏈條上的時候,就形成了“鏈所以,我們
    把每一個關卡"想象成如下圖中的模樣,這樣來說,把他們稱為鏈更為合適,每個經過這個關卡的報文,都要將這條鏈”上的所有規則匹配遍,如果有符合條件的規則,
    則執行規則對應的動作。


    INPUT:處理輸入數據包。入站數據包處理

    OUTPUT:處理輸出數據包。出站數據包處理

    PORWARD:處理轉發數據包。

    PREROUTING:用于目標地址轉換(DNAT)進站進行的過濾。

    POSTOUTING:用于源地址轉換(SNAT)出站進行的過濾。



    3.表鏈關系

    首先
    我們需要注意的是,某些“鏈中注定不會包含某類規則°,就像某些"關卡"天生就不具備某些功能一樣,比如,A"關卡"只負責打擊陸地敵人,沒有防空能力,B"關卡“只負
    責打擊空中敵人,沒有防御步兵的能力,C關卡"可能比較NB,既能防空,也能防御陸地敵人,D"關卡·最屌,海陸空都能防。
    那讓我們來看看,每個關卡都有哪些能力,或者說,讓我們看看每個"鏈"上的規則都存在于哪些表"中。
    我們還是以圖為例,先看看 prerouting "鏈"上的規則都存在于哪些表中。
    注意:下圖只用于說明 prerouting 鏈上的規則存在于哪些表中,并沒有描述表的順序。


    這幅圖是什么意思呢?它的意思是說, prerouting鏈只擁有nat表、raw表和 mangle表所對應的功能,所以, prerouting中的規則只能存放于nat表、raw表和 mangle表中
    那么,根據上述思路,我們來總結一下,每個關卡”都擁有什么功能,
    或者說,每個”鏈中的規則都存在于哪些”表”中。


    PREROUTING的規則可以存在于:raw表, mangle表,nat表
    NPUT的規則可以存在于: 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中還有NPUT, centos6中沒有)
    filter表中的規則可以被哪些鏈使用: INPUT, FORWARD, OUTPUT


    其實我們還需要注意一點,因為數據包經過一個鏈的時候,會將當前鏈的所有規則都匹配遍,但是匹配時總歸要有順序,我們應該一條一條的去匹配,而且我們說過,相同
    功能類型的規則會匯聚在一張”表中,那么,哪些“表"中的規則會放在鏈”的最前面執行呢,這時候就需要有一個優先級的問題,我們還拿 prerouting"鏈"做圖示


    prerouting鏈中的規則存放于三張表中,而這三張表中的規則執行的優先級如下
    raw --> mangle—> nat


    但是我們知道, iptables為我們定義了4張長"表"當他們處于同一條"鏈"時,執行的優先級如下
    優先級次序(由高而低):
    raw -- mangle --> nat—> filter
    但是我們前面說過,某些鏈天生就不能使用某些表中的規則,所以,4張長表中的規則處于同一條鏈的目前只有 output鏈,它就是傳說中海陸空都能防守的關卡。


    為了更方便的管理,我們還可以在某個表里面創建自定義鏈,將針對某個應用程序所設置的規則放置在這個自定義鏈中,但是自定義鏈接不能直接使用,只能被某個默認的鏈當
    做動作去調用才能起作用,我們可以這樣想象,自定義鏈就是一段比較"短"的鏈子,這條短”鏈子上的規則都是針對某個應用程序制定的,但是這條短的鏈子并不能直接使用
    而是需要焊接在 Iptables默認定義鏈子上,才能被 iptables使用,這就是為什么默認定義的鏈需要把自定義鏈當做動作去引用的原因。這是后話,后面再聊,在實際使用
    時我們即可更加的明白。


    ------------------數據經過防火墻的流程-----------------

    綜上所述,我們可以將數據包通過防火墻的流程總結為下圖:



    我們在寫 Iptables規則的時候,可以時刻牢記這張路由次序圖,靈活配置規則。


    我們將經常用到的對應關系重新寫在此處,方便對應圖例查看。


    鏈的規則存放于哪些表中(從鏈到表的對應關系)
    · REROUTING的規則可以存在于:raw表, mangle表,nat表。
    ·NPUT的規則可以存在于: 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中還有|NPUT, centos6中沒有
    ·filter表中的規則可以被哪些鏈使用: INPUT, FORWARD, OUTPUT


    下圖中nat表在 centos7中的情況就不再標明。



    --------------規則的概念-----------------


    規則:根據指定的匹配條件來嘗試匹配每個流經此處的報文,一旦匹配成功,則由規則后面指定的處理動作進行處理
    那么我們來通俗的解釋一下什么是 Iptables的規則,之前打過一個比方,每條鏈都是一個"關卡,每個通過這個"關卡”的報文都要匹配這個關卡上的規則,如果配,則對報
    文進行對應的處理,比如說,你我二人此刻就好像兩個報文”,你我二人此刻都要入關,可是城主有命,只有器宇軒昂的人才能入關,不符合此條件的人不能入關,于是守關將
    土按照城主制定的規則”,開始打量你我二人,最終,你順利入關了,而我已被拒之門外,因為你符合器宇軒昂的標準,所以把你放行"了,而我不符合標誰,所以沒有被放
    行,其實,“宇軒昂就是種匹配條件”,“放行就是種動作,"匹配條件”與”動作“組成了規則


    了解了規則的概念,那我們來聊聊規則的組成部分此處只是大概的將規則的結構列出,后面的文章中會單獨對規則時進行總結。
    規則由匹配條件和處理動作組成

    匹配 條件
    匹配條件分為基本匹配條件與擴展匹配條件


    基本匹配條件
    源地址 Source IP,目標地址 Destination|P
    上述內容都可以作為基本匹配條件


    擴展匹配條件
    除了上述的條件可以用于匹配,還有很多其他的條件可以用于匹配,這些條件泛稱為擴展條件,這些擴展條件其實也是 netfilter中的部分,只是以模塊的形式存在,如果想要
    使用這些條件,則需要依賴對應的擴展模塊
    源端口 Source port,目標端口 Destination Port
    上述內容都可以作為擴展匹配條件



    • ACCEPPT:接受數據包。

    • DROP:直接丟棄數據包。不給任何回應信息,這時候客戶端會感覺自己的請求沉入大海,等過了超時時間才會有反應。

    • REDIRECT:重定向、映射、透明代理。

    • SNAT:源地址轉換。

    • DNAT:目標地址轉換。

    • MASQUERADE:IP偽裝(NAT),用于ADSL。是SNAT的一種特殊形式,適用于動態的,臨時會變的IP上。

    • LOG:日志記錄。在/var/log/messages文件中記錄日志信息。除了記錄對數據包不做任何動作。



    ------------------------基礎命令-------------------------


    -t<表>: ? 指定要操縱的表

    -A:? 向規則鏈末尾中添加,追加條目;(append)

    -D:? 從規則鏈中刪除條目;(delete)

    -I:?? 向規則鏈的開頭(或者指定序號)中插入條目,未指定規則序號時,默認作為第一規則;(insert)

    -R:? 替換規則鏈中的條目;

    -L:? 顯示規則鏈中已有的條目;(list)

    -F:? 清除規則鏈中已有的條目,若位置定規則序號,則默認清空所有;(flush)

    -v: ? ?查看規則列表時顯示詳細信息(verbose)

    -Z:? 清空規則鏈中的數據包計算器和字節計數器;

    -N:? 創建新的用戶自定義規則鏈;

    -P:? 定義規則鏈中的默認目標;(police)

    -h:? 顯示幫助信息;

    -p:? 指定要匹配的數據包協議類型;

    -s:?? 指定要匹配的數據包源ip地址;

    -j<目標>:指定要跳轉的目標;

    -i<網絡接口>:指定數據包進入本機的網絡接口;

    -o<網絡接口>:指定數據包要離開本機所使用的網絡接口。


    iptables命令選項輸入順序:

    iptables? -t 表名 <-A/I/D/R>? 規則鏈名? [規則號]? <-i/o 網卡名>? -p? 協議名? <-s? 源IP/源子網>? -- sport? 源端口? <-d 目標IP/目標子網>? -- dport? 目標端口? -j? 動作


    PS:

    LUNIX7 上面獨有的firewall 區域劃分 ?public 默認區域信任區域 非信任區域

    systemctl start firewalld.service LINUX7上面獨有的防火墻firewall


    -------------------NAT表基礎拓撲實驗---------------------

    NAT

    NAT 地址轉換

    SNAT source 源地址 轉換 ?作用場景:內部網絡訪問廣域網

    DNAT destnation 目標地址轉換 ?作用場景:廣域網主機訪問內部網絡服務器




    1.拓撲實驗環境

    搭建以上iptables規則。


    一共開三個虛擬機 全部網絡適配器設置為僅主機模式

    web1:一臺centos6.5? 作為內部網絡內的客戶端,設置ip地址為192.168.100.101

    web2:一臺centos7 作為外部網絡,設置ip地址12.0.0.12

    一臺centos6.5 作為iptables防火墻(要有雙網卡)一個網卡設置為內部網的網卡192.168.100.1,一個設置為外部網的網卡12.0.0.1,service network restart 重啟下網卡



    2.實驗思路

    在iptables防火墻上配置

    · 清空防火墻的規則filter 默認規則

    · 清空防火墻 nat規則

    · vim /etc/sysctl.conf——net.ipv4.ip_forward = 1???????????? #永久開啟路由功能

    · sysctl –p??????????????????? #重新加載配置文件

    · 開始進行iptables的規則設置


    3.操作步驟

    1)iptables防火墻 :修改配置文件,開啟路由功能


    清除iptables防火墻中原有的規則(因為是實驗所以刪除所有iptables規則,現實中按實際情況操作)


    2)SNAT source : 源地址轉換

    POSTOUTING:用于源地址轉換(SNAT)出站進行的過濾。

    命令是:

    [ root@yangruoheng? ~]#? iptables –t nat –A POSTROUTING –s 192.168.100.0/24 –o eth0 –j SNAT --to-source 12.0.0.1

    #使192.168.100.0網段的內網web服務數據包出站轉換成12.0.0.1的IP地址


    3)DNAT destination : 目標地址轉換

    PREROUTING:用于目標地址轉換(DNAT)進站進行的過濾。

    命令是:

    [ root@yangruoheng? ~]# iptables –t nat –A PREROUTING –d 12.0.0.1 –p tcp --dport 80 –i eth1? –j DNAT -- to-destination 192.168.100.101

    #使通過12.0.0.1網卡的數據包發送的ip地址指向為192.168.100.101的內網web服務

    轉載于:https://blog.51cto.com/13767783/2161358

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的图文并茂详解iptables 防火墙工作原理及知识点的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。