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

  • 防火牆相關概念linux

  • iptables相關概念以及工做原理
    web

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

  • iptables中的基本命令詳解centos



------------------防火牆相關概念----------------------安全

 LINUX防火牆:隔離內部網絡和外部網絡的隔離技術。服務器

                                                介於3-4層的傳輸  ——管理控制 服務的提供。網絡


系統安全:app

1.第三方監控殺毒軟件框架

2.系統策略tcp

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中不被稱爲關卡"而被稱爲鏈"。

1


其實咱們上面描述的場景並不完善,由於客戶端發來的報文訪問的目標地址可能並非本機,而是其餘服務器,當本機的內核支持 IP FORWARD時,咱們能夠將報文轉發給其
他服務器,因此,這個時候,咱們就會提到 iptables中的其餘」關卡,也就是其餘鏈」,他們就是"路由前」、「轉發」、"路由後」,他們的英文名是
PREROUTING、 FORWARD、 POSTROUTING
也就是說,當咱們啓用了防火牆功能時,報文須要通過以下關卡,也就是說,根據實際狀況的不一樣,報文通過鏈可能不一樣。若是報文須要轉發,那麼報文則不會通過 Input鏈
發往用戶空間,而是直接在內核空間中通過 forward鏈和 postrouting鏈轉發出去的。


2


因此,根據上圖,咱們可以想象出某些經常使用場景中,報文的流向
到本機某進程的報文: 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張表中。


timg

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

  2. mangle:數據包修改(QOS),用於實現服務質量。

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

  4. filter:包過濾,用於防火牆規則。過濾數據包,通仍是不通

數據包通過防火牆的處理順序



2. 規則鏈 處理時機

鏈的概念
如今,咱們想象一下,這些」關卡在 tables中爲何被稱做"鏈呢?咱們知道,防火牆的做用就在於對通過的報文匹配"規則」,而後執行對應的」動做「因此,當報文通過這些
關卡的時候,則必須匹配這個關卡上的規則,可是,這個關卡上可能不止有一條規則,而是有不少條規則,當咱們把這些規則串到一個鏈條上的時候,就造成了「鏈因此,咱們
把每個關卡"想象成以下圖中的模樣,這樣來講,把他們稱爲鏈更爲合適,每一個通過這個關卡的報文,都要將這條鏈」上的全部規則匹配遍,若是有符合條件的規則,
則執行規則對應的動做。

3


clip_image006

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

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

PORWARD:處理轉發數據包。

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

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



3.錶鏈關係

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

4


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

5


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


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


爲了更方便的管理,咱們還能夠在某個表裏面建立自定義鏈,將針對某個應用程序所設置的規則放置在這個自定義鏈中,可是自定義連接不能直接使用,只能被某個默認的鏈當
作動做去調用才能起做用,咱們能夠這樣想象,自定義鏈就是一段比較"短"的鏈子,這條短」鏈子上的規則都是針對某個應用程序制定的,可是這條短的鏈子並不能直接使用
而是須要焊接在 Iptables默認定義鏈子上,才能被 iptables使用,這就是爲何默認定義的鏈須要把自定義鏈當作動做去引用的緣由。這是後話,後面再聊,在實際使用
時咱們便可更加的明白。


------------------數據通過防火牆的流程-----------------

綜上所述,咱們能夠將數據包經過防火牆的流程總結爲下圖:


6


咱們在寫 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中的狀況就再也不標明。

7



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


規則:根據指定的匹配條件來嘗試匹配每一個流經此處的報文,一旦匹配成功,則由規則後面指定的處理動做進行處理
那麼咱們來通俗的解釋一下什麼是 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.拓撲實驗環境

8

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


9


2.實驗思路

在iptables防火牆上配置

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

· 清空防火牆 nat規則

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

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

· 開始進行iptables的規則設置


3.操做步驟

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

10.1

10

11


清除iptables防火牆中原有的規則(由於是實驗因此刪除全部iptables規則,現實中按實際狀況操做)

12


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地址

QQ截圖20180816113852


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服務

14

相關文章
相關標籤/搜索