首頁 > 軟體

iptables 防火牆工作原理及知識點圖文詳解

2020-06-16 16:48:50

防火牆相關概念

  • 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張表中。

 

  1. raw:高階功能,如:網址過濾。

  2. mangle:封包修改(QOS),用於實現服務品質。

  3. nat:地址轉換,用於閘道器路由器。Nat地址轉換

  4. 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<網路介面>:指定封包要離開本機所使用的網路介面。


IT145.com E-mail:sddin#qq.com