天天看點

netfilter/iptables詳解

防火牆的簡介

防火牆是指設定在不同網絡或網絡安全域之間的一系列部件的組合,它能增強機構内部網絡的安全性。它通過通路控制機制,确定哪些内部服務允許外部通路,以及允許哪些外部請求可以通路内部服務。它可以根據網絡傳輸的類型決定 IP 包是否可以傳進或傳出内部網。

防火牆通過審查經過的每一個資料包,判斷它是否有相比對的過濾規則,根據規則的先後順序進行一一比較,直到滿足其中的一條規則為止,然後依據控制機制做出相應的動作。如果都不滿足,則将資料包丢棄,進而保護網絡的安全。

防火牆可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火牆偏重攔阻傳輸流的通行,而另一些防火牆則偏重允許傳輸流通過。

通過使用防火牆可以實作以下功能:可以保護易受攻擊的服務;控制内外網之間網絡系統的通路;集中管理内網的安全性,降低管理成本;提高網絡的保密性和私有性;記錄網絡的使用狀态,為安全規劃和網絡維護提供依據。

netfilter/iptables詳解

防火牆的分類

防火牆技術根據防範的方式和側重點的不同而分為很多種類型,但總體來講可分為包過濾防火牆和代理伺服器兩種類型。

防火牆的工作原理

1.包過濾防火牆工作原理

netfilter/iptables詳解

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表,分别用于實作包過濾,網絡位址轉換、包重構(修改)和資料跟蹤處理。

netfilter/iptables詳解

iptables傳輸資料包的過程

① 當一個資料包進入網卡時,它首先進入PREROUTING鍊,核心根據資料包目的IP判斷是否需要轉送出去。

② 如果資料包就是進入本機的,它就會沿着圖向下移動,到達INPUT鍊。資料包到了INPUT鍊後,任何程序都會收到它。本機上運作的程式可以發送資料包,這些資料包會經過OUTPUT鍊,然後到達POSTROUTING鍊輸出。

③ 如果資料包是要轉發出去的,且核心允許轉發,資料包就會如圖所示向右移動,經過FORWARD鍊,然後到達POSTROUTING鍊輸出。

netfilter/iptables詳解

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指令格式:

netfilter/iptables詳解

iptables過濾條件:

netfilter/iptables詳解

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:将指定表中的資料包計數器和流量計數器歸零。

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

繼續閱讀