第十一章 netfilter/iptables全攻略

內容簡介
防火牆的概述
iptables簡介
iptables基礎
iptables語法
iptables實例
案例詳解安全

防火牆的簡介
防火牆是指設置在不一樣網絡或網絡安全域之間的一系列部件的組合,它能加強機構內部網絡的安全性。它經過訪問控制機制,肯定哪些內部服務容許外部訪問,以及容許哪些外部請求能夠訪問內部服務。它能夠根據網絡傳輸的類型決定IP包是否能夠傳進或傳出內部網。
防火牆經過審查通過的每個數據包,判斷它是否有相匹配的過濾規則,根據規則的前後順序進行一一比較,直到知足其中的一條規則爲止,而後依據控制機制作出相應的動做。若是都不知足,則將數據包丟棄,從而保護網絡的安全。
防火牆能夠被認爲是這樣一對機制:一種機制是攔阻傳輸流通行,另外一種機制是容許傳輸流經過。一些防火牆偏重攔阻傳輸流的通行,而另外一些防火牆則偏重容許傳輸流經過。服務器

經過使用防火牆能夠實現如下功能:能夠保護易受攻擊的服務;控制內外網之間網絡系統的訪問;集中管理內網的安全性,下降管理成本;提升網絡的保密性和私有性;記錄網絡的使用狀態,爲安全規劃和網絡維護提供依據。(圖1)網絡

圖片1

防火牆的分類
防火牆技術根據防範的方式和側重點的不一樣而分爲不少種類型,但整體來說可分爲包過濾防火牆和代理服務器兩種類型。app

防火牆的工做原理
1.包過濾防火牆工做原理(圖2)
圖片2tcp

2.代理服務型防火牆工做原理
代理服務型防火牆是在應用層上實現防火牆功能的。它能提供部分與傳輸有關的狀態,能徹底提供與應用相關的狀態和部分傳輸的信息,它還能處理和管理信息。網站

iptables簡介
netfilter/iptables(簡稱爲iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟件同樣,這個包過濾防火牆是免費的,它能夠代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。3d

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)
圖片4blog

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

案例詳解
【案例1】作爲客戶端/終端的基本配置 ?DNS PING LO
【案例2】作爲服務端的基本配置:SSH  DNS WWW FTP EMAIL (圖7)
圖片7
【案例3】作爲網關的基本配置:SSH  DNS WWW FTP EMAIL NAT )SNAT DNAT)限速 (圖8)
圖片8
【案例4】狀態檢測(圖9)
圖片9

相關文章
相關標籤/搜索