天天看點

圖文并茂詳解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中不被稱為關卡"而被稱為鍊"。

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

其實我們上面描述的場景并不完善,因為用戶端發來的封包通路的目标位址可能并不是本機,而是其他伺服器,當本機的核心支援 IP FORWARD時,我們可以将封包轉發給其

他伺服器,是以,這個時候,我們就會提到 iptables中的其他”關卡,也就是其他鍊”,他們就是"路由前”、“轉發”、"路由後”,他們的英文名是

PREROUTING、 FORWARD、 POSTROUTING

也就是說,當我們啟用了防火牆功能時,封包需要經過如下關卡,也就是說,根據實際情況的不同,封包經過鍊可能不同。如果封包需要轉發,那麼封包則不會經過 Input鍊

發往使用者空間,而是直接在核心空間中經過 forward鍊和 postrouting鍊轉發出去的。

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

是以,根據上圖,我們能夠想象出某些常用場景中,封包的流向

到本機某程序的封包: 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張表中。

圖文并茂詳解iptables 防火牆工作原理及知識點
  1. raw:進階功能,如:網址過濾。
  2. mangle:資料包修改(QOS),用于實作服務品質。
  3. nat:位址轉換,用于網關路由器。Nat位址轉換
  4. filter:包過濾,用于防火牆規則。過濾資料包,通還是不通

資料包經過防火牆的處理順序

2. 規則鍊 處理時機

鍊的概念

現在,我們想象一下,這些”關卡在 tables中為什麼被稱作"鍊呢?我們知道,防火牆的作用就在于對經過的封包比對"規則”,然後執行對應的”動作“是以,當封包經過這些

關卡的時候,則必須比對這個關卡上的規則,但是,這個關卡上可能不止有一條規則,而是有很多條規則,當我們把這些規則串到一個鍊條上的時候,就形成了“鍊是以,我們

把每一個關卡"想象成如下圖中的模樣,這樣來說,把他們稱為鍊更為合适,每個經過這個關卡的封包,都要将這條鍊”上的所有規則比對遍,如果有符合條件的規則,

則執行規則對應的動作。

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

INPUT鍊:處理輸入資料包。入站資料包處理

OUTPUT鍊:處理輸出資料包。出站資料包處理

PORWARD鍊:處理轉發資料包。

PREROUTING鍊:用于目标位址轉換(DNAT)進站進行的過濾。

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

3.表鍊關系

首先

我們需要注意的是,某些“鍊中注定不會包含某類規則°,就像某些"關卡"天生就不具備某些功能一樣,比如,A"關卡"隻負責打擊陸地敵人,沒有防空能力,B"關卡“隻負

責打擊空中敵人,沒有防禦步兵的能力,C關卡"可能比較NB,既能防空,也能防禦陸地敵人,D"關卡·最屌,海陸空都能防。

那讓我們來看看,每個關卡都有哪些能力,或者說,讓我們看看每個"鍊"上的規則都存在于哪些表"中。

我們還是以圖為例,先看看 prerouting "鍊"上的規則都存在于哪些表中。

注意:下圖隻用于說明 prerouting 鍊上的規則存在于哪些表中,并沒有描述表的順序。

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

這幅圖是什麼意思呢?它的意思是說, 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"鍊"做圖示

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

prerouting鍊中的規則存放于三張表中,而這三張表中的規則執行的優先級如下

raw --> mangle—> nat

但是我們知道, iptables為我們定義了4張長"表"當他們處于同一條"鍊"時,執行的優先級如下

優先級次序(由高而低):

raw -- mangle --> nat—> filter

但是我們前面說過,某些鍊天生就不能使用某些表中的規則,是以,4張長表中的規則處于同一條鍊的目前隻有 output鍊,它就是傳說中海陸空都能防守的關卡。

為了更友善的管理,我們還可以在某個表裡面建立自定義鍊,将針對某個應用程式所設定的規則放置在這個自定義鍊中,但是自定義連結不能直接使用,隻能被某個預設的鍊當

做動作去調用才能起作用,我們可以這樣想象,自定義鍊就是一段比較"短"的鍊子,這條短”鍊子上的規則都是針對某個應用程式制定的,但是這條短的鍊子并不能直接使用

而是需要焊接在 Iptables預設定義鍊子上,才能被 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 防火牆工作原理及知識點

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

規則:根據指定的比對條件來嘗試比對每個流經此處的封包,一旦比對成功,則由規則後面指定的處理動作進行處理

那麼我們來通俗的解釋一下什麼是 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 防火牆工作原理及知識點

搭建以上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 重新開機下網卡

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

2.實驗思路

在iptables防火牆上配置

· 清空防火牆的規則filter 預設規則

· 清空防火牆 nat規則

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

· sysctl –p                    #重新加載配置檔案

· 開始進行iptables的規則設定

3.操作步驟

1)iptables防火牆 :修改配置檔案,開啟路由功能

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

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

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

2)SNAT source : 源位址轉換

指令是:

[ 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位址

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

3)DNAT destination : 目标位址轉換

繼續閱讀