防火牆之數據包過濾iptables

(轉自羽飛博客http://www.opsers.org/linux-home/videos/chapter-netfilter-iptables-raiders.html

內容簡介
防火牆的概述
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)
這裏寫圖片描述

視頻教程地址:
http://www.boobooke.com/v/bbk3903
http://www.boobooke.com/v/bbk3904
http://www.boobooke.com/v/bbk3905
http://www.boobooke.com/v/bbk3906
http://www.boobooke.com/v/bbk3907
http://www.boobooke.com/v/bbk3930

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章