图文并茂详解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 防火墙工作原理及知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法:平衡二叉树
- 下一篇: visual studio code 修