1. 程式人生 > >防火牆之資料包過濾iptables

防火牆之資料包過濾iptables

內容簡介
防火牆的概述
1、iptables簡介
2、iptables基礎
3、iptables語法
4、iptables例項

案例詳解
(一)防火牆的簡介
防火牆是指設定在不同網路或網路安全域之間的一系列部件的組合,它能增強機構內部網路的安全性。它通過訪問控制機制,確定哪些內部服務允許外部訪問,以及允許哪些外部請求可以訪問內部服務。它可以根據網路傳輸的型別決定IP包是否可以傳進或傳出內部網。
防火牆通過審查經過的每一個數據包,判斷它是否有相匹配的過濾規則,根據規則的先後順序進行一一比較,直到滿足其中的一條規則為止,然後依據控制機制做出相應的動作。如果都不滿足,則將資料包丟棄,從而保護網路的安全。
防火牆可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火牆偏重攔阻傳輸流的通行,而另一些防火牆則偏重允許傳輸流通過。
通過使用防火牆可以實現以下功能:可以保護易受攻擊的服務;控制內外網之間網路系統的訪問;集中管理內網的安全性,降低管理成本;提高網路的保密性和私有性;記錄網路的使用狀態,為安全規劃和網路維護提供依據。(圖1)
這裡寫圖片描述


防火牆的分類
防火牆技術根據防範的方式和側重點的不同而分為很多種型別,但總體來講可分為包過濾防火牆和代理伺服器兩種型別。
防火牆的工作原理
1.包過濾防火牆工作原理(圖2)
圖片2
2.代理服務型防火牆工作原理
代理服務型防火牆是在應用層上實現防火牆功能的。它能提供部分與傳輸有關的狀態,能完全提供與應用相關的狀態和部分傳輸的資訊,它還能處理和管理資訊。
iptables簡介
netfilter/iptables(簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。
(二)iptables基礎

規則(rules)其實就是網路管理員預定義的條件,規則一般的定義為“如果資料包頭符合這樣的條件,就這樣處理這個資料包”。規則儲存在核心空間的資訊包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務型別(如HTTP、FTP和SMTP)等。當資料包與規則匹配時,iptables就根據規則所定義的方法來處理這些資料包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是新增、修改和刪除這些規則。
鏈(chains)是資料包傳播的路徑,每一條鏈其實就是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該資料包是否滿足規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該資料包;否則iptables將繼續檢查下一條規則,如果該資料包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的預設策略來處理資料包。
表(tables)提供特定的功能,iptables內建了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網路地址轉換、包重構(修改)和資料跟蹤處理。
Iptables表、鏈、規則(圖3)
圖片3

iptables傳輸資料包的過程
① 當一個數據包進入網絡卡時,它首先進入PREROUTING鏈,核心根據資料包目的IP判斷是否需要轉送出去。
② 如果資料包就是進入本機的,它就會沿著圖向下移動,到達INPUT鏈。資料包到了INPUT鏈後,任何程序都會收到它。本機上執行的程式可以傳送資料包,這些資料包會經過OUTPUT鏈,然後到達POSTROUTING鏈輸出。
③ 如果資料包是要轉發出去的,且核心允許轉發,資料包就會如圖所示向右移動,經過FORWARD鏈,然後到達POSTROUTING鏈輸出。(圖4)
圖片4
iptables命令格式
iptables的命令格式較為複雜,一般的格式如下:
iptables [-t table] 命令 [chain] [rules] [-j target]
table——指定表明
命令——對鏈的操作命令
chain——鏈名
rules——規則
target——動作如何進行
1.表選項

表選項用於指定命令應用於哪個iptables內建表,iptables內建包括filter表、nat表、mangle表和raw表。

2.命令選項iptables命令格式

命令 說明
-P或–policy <鏈名> 定義預設策略
-L或–list <鏈名> 檢視iptables規則列表
-A或—append <鏈名> 在規則列表的最後增加1條規則
-I或–insert <鏈名> 在指定的位置插入1條規則
-D或–delete <鏈名> 從規則列表中刪除1條規則
-R或–replace <鏈名> 替換規則列表中的某條規則
-F或–flush <鏈名> 刪除表中所有規則
-Z或–zero <鏈名> 將表中資料包計數器和流量計數器歸零

3.匹配選項

匹配 說明
-i或–in-interface <網路介面名> 指定資料包從哪個網路介面進入,如ppp0、eth0和eth1等
-o或–out-interface <網路介面名> 指定資料包從哪塊網路介面輸出,如ppp0、eth0和eth1等
-p或—proto協議型別 < 協議型別> 指定資料包匹配的協議,如TCP、UDP和ICMP等
-s或–source <源地址或子網> 指定資料包匹配的源地址
–sport <源埠號> 指定資料包匹配的源埠號,可以使用“起始埠號:結束埠號”的格式指定一個範圍的埠
-d或–destination <目標地址或子網> 指定資料包匹配的目標地址
–dport目標埠號 指定資料包匹配的目標埠號,可以使用“起始埠號:結束埠號”的格式指定一個範圍的埠

4.動作選項

動作 說明 ACCEPT 接受資料包 DROP 丟棄資料包 REDIRECT
與DROP基本一樣,區別在於它除了阻塞包之外, 還向傳送者返回錯誤資訊。 SNAT 源地址轉換,即改變資料包的源地址 DNAT
目標地址轉換,即改變資料包的目的地址 MASQUERADE
IP偽裝,即是常說的NAT技術,MASQUERADE只能用於ADSL等撥號上網的IP偽裝,也就是主機的IP是由ISP分配動態的;如果主機的IP地址是靜態固定的,就要使用SNAT
LOG 日誌功能,將符合規則的資料包的相關資訊記錄在日誌中,以便管理員的分析和排錯

iptables命令格式(圖5)
圖片5
iptables過濾條件(圖6)
圖片6
iptables的語法
1.定義預設策略
當資料包不符合鏈中任一條規則時,iptables將根據該鏈預先定義的預設策略來處理資料包,預設策略的定義格式如下。

iptables [-t表名] <-P> <鏈名> <動作> ?引數說明如下。
[-t表名]:指預設策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設使用filter表。
<-P>:定義預設策略。
<鏈名>:指預設策略將應用於哪個鏈,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。 <動作>:處理資料包的動作,可以使用ACCEPT(接受資料包)和DROP(丟棄資料包)。

2.檢視iptables規則
檢視iptables規則的命令格式為:

iptables [-t表名] <-L> [鏈名] 引數說明如下。
[-t表名]:指檢視哪個表的規則列表,表名用可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設檢視filter表的規則列表。
<-L>:檢視指定表和指定鏈的規則列表。
[鏈名]:指檢視指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING,如果不指明哪個鏈,則將檢視某個表中所有鏈的規則列表。

3.增加、插入、刪除和替換規則
相關規則定義的格式為:

iptables [-t表名] <-A | I | D | R> 鏈名 [規則編號] [-i | o 網絡卡名稱] [-p 協議型別]
[-s 源IP地址 | 源子網] [–sport 源埠號] [-d目標IP地址 | 目標子網] [–dport目標埠號]
<-j動作> 引數說明如下。
[-t表名]:定義預設策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設使用filter表。
-A:新增加一條規則,該規則將會增加到規則列表的最後一行,該引數不能使用規則編號。
-I:插入一條規則,原本該位置上的規則將會往後順序移動,如果沒有指定規則編號,則在第一條規則前插入。
-D:從規則列表中刪除一條規則,可以輸入完整規則,或直接指定規則編號加以刪除。
-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號。 <鏈名>:指定檢視指定表中哪個鏈的規則列表,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT和POSTROUTING。
[規則編號]:規則編號用於插入、刪除和替換規則時用,編號是按照規則列表的順序排列,規則列表中第一條規則的編號為1。 [-i | o
網絡卡名稱]:i是指定資料包從哪塊網絡卡進入,o是指定資料包從哪塊網絡卡輸出。網絡卡名稱可以使用ppp0、eth0和eth1等。 [-p
協議型別]:可以指定規則應用的協議,包含TCP、UDP和ICMP等。 [-s 源IP地址 | 源子網]:源主機的IP地址或子網地址。
[–sport 源埠號]:資料包的IP的源埠號。 [-d目標IP地址 | 目標子網]:目標主機的IP地址或子網地址。
[–dport目標埠號]:資料包的IP的目標埠號。 <-j動作>:處理資料包的動作,各個動作的詳細說明可以參考前面的說明。

4.清除規則和計數器
在新建規則時,往往需要清除原有的、舊的規則,以免它們影 ?響新設定的規則。如果規則比較多,一條條刪除就會十分麻煩, ?這時可以使用iptables提供的清除規則引數達到快速刪除所有的規 ?則的目的。

定義引數的格式為: iptables [-t表名] <-F | Z> 引數說明如下。
[-t表名]:指定預設策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定使用哪個表,iptables就預設使用filter表。
-F:刪除指定表中所有規則。
-Z:將指定表中的資料包計數器和流量計數器歸零。

NAT的定義
NAT英文全稱是Network Address Translation,稱是網路地址轉換,它是一個IETF標準,允許一個機構以一個地址出現在Internet上。NAT將每個區域網節點的地址轉換成一個IP地址,反之亦然。它也可以應用到防火牆技術裡,把個別IP地址隱藏起來不被外界發現,使外界無法直接訪問內部網路裝置,同時,它還幫助網路可以超越地址的限制,合理地安排網路中的公有Internet 地址和私有IP地址的使用。
NAT的型別
靜態NAT(Static NAT)

靜態NAT設定起來最為簡單和最容易實現的一種,內部網路中的每個主機都被永久對映成外部網路中的某個合法的地址。

動態地址NAT(Pooled NAT)

動態地址NAT是在外部網路中定義了一系列的合法地址,採用動態分配的方法對映到內部網路。
動態地址NAT只是轉換IP地址,它為每一個內部的IP地址分配一個臨時的外部IP地址,主要應用於撥號,對於頻繁的遠端聯接也可以採用動態NAT。

網路地址埠轉換NAPT(Port-Level NAT)

NAPT是把內部地址對映到外部網路的一個IP地址的不同埠上。
最熟悉的一種轉換方式。NAPT普遍應用於接入裝置中,它可以將中小型的網路隱藏在一個合法的IP地址後面。NAPT與動態地址NAT不同,它將內部連線對映到外部網路中的一個單獨的IP地址上,同時在該地址上加上一個由NAT裝置選定的TCP埠號。

(三)iptables例項
禁止客戶機訪問不健康網站
【例1】新增iptables規則禁止使用者訪問域名為www.sexy.com的網站。

iptables -I FORWARD -d www.sexy.com -j DROP

【例2】新增iptables規則禁止使用者訪問IP地址為20.20.20.20的網站。

iptables -I FORWARD -d 20.20.20.20 -j DROP

禁止某些客戶機上網
【例1】新增iptables規則禁止IP地址為192.168.1.X的客戶機上網。

iptables -I FORWARD -s 192.168.1.X -j DROP

【例2】新增iptables規則禁止192.168.1.0子網裡所有的客戶機上網。

iptables -I FORWARD -s 192.168.1.0/24 -j DROP

禁止客戶機訪問某些服務
【例1】禁止192.168.1.0子網裡所有的客戶機使用FTP協議下載。

iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 21 -j DROP

【例2】禁止192.168.1.0子網裡所有的客戶機使用Telnet協議連線遠端計算機。

iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport 23 -j DROP

強制訪問指定的站點
【例】強制所有的客戶機訪問192.168.1.x這臺Web伺服器。

iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.x:80

禁止使用ICMP協議
【例】禁止Internet上的計算機通過ICMP協議ping到NAT伺服器的ppp0介面,但允許內網的客戶機通過ICMP協議ping的計算機。

iptables -I INPUT -i ppp0 -p icmp -j DROP

釋出內部網路伺服器
【例1】釋出內網10.0.0.3主機的Web服務,Internet使用者通過訪問防火牆的IP地址即可訪問該主機的Web服務。

iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.3:80

【例2】釋出內網10.0.0.3主機的終端服務(使用的是TCP協議的3389埠),Internet使用者通過訪問防火牆的IP地址訪問該機的終端服務。

iptables -t nat -I PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.3:3389

【案例2】做為服務端的基本配置:SSH DNS WWW FTP EMAIL (圖7)
這裡寫圖片描述
【案例3】做為閘道器的基本配置:SSH DNS WWW FTP EMAIL NAT )SNAT DNAT)限速 (圖8)
這裡寫圖片描述