Netfilter/Iptables(如下簡稱Iptables)是unix/linux自帶的一款優秀且開放源代碼的徹底自由的基於包過濾的防火牆工具,它的功能十分強大,使用很是靈活,能夠對流入和流出服務器的數據包進行很精細的控制。特別是它能夠在一臺很是低的硬件配置下跑的很是好。iptables+zebra+squidlinux
Iptables是linux2.4及2.6內核中集成的服務。其功能與安全性比其老一輩ipfwadm,ipchains強大的多,Iptables主要工做在OSI七層的2、三四層,若是從新編譯內核,Iptables也能夠支持7層控制(squid代理+iptables)。web
主機防火牆(filter表的INPUT鏈)安全
局域網共享上網(nat表的POSTROUTING鏈)。半個路由器,NAT功能。服務器
端口及IP(一對一)映射(nat表的PREROUTING鏈),硬防的NAT功能。網絡
iptables是採用數據包過濾機制工做的,因此它會對請求的數據包的包頭數據進行分析,並根據咱們預先設定的規則進行匹配來決定是否能夠進入主機。併發
一、防火牆是一層層過濾的。實際是按照配置規則的順序從上到下,從前到後進行過濾的。app
二、若是匹配上了規則,即明確代表是阻止仍是經過,此時數據包就不在向下匹配新規則了。tcp
三、若是全部規則中沒有明確代表是阻止仍是經過這個數據包,也就是沒有匹配上規則,向下進行匹配,直到匹配默認規則獲得明確的阻止仍是經過。工具
四、防火牆的默認規則是對應鏈的全部的規則執行完之後纔會執行的(最後執行的規則)。測試
1.儘量不給服務器配置外網IP,能夠經過代理轉發或者經過防火牆映射。
2.併發不是特別大狀況再外網IP的環境,要開啓iptables防火牆。
表(tables)提供特定的功能,iptables內置了4個表,即filter表、nat表、mangle表和raw表,分別用於實現包過濾,網絡地址轉換、包重構(修改)和數據跟蹤處理。
鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中能夠有一 條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否知足規則所定義的條件。若是知足,系統就會根據 該條規則所定義的方法處理該數據包;不然iptables將繼續檢查下一條規則,若是該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定 義的默認策略來處理數據包。
Iptables採用「表」和「鏈」的分層結構。在REHL4中是三張表五個鏈。如今REHL5成了四張表五個鏈了,不過多出來的那個表用的也不太多,因此基本仍是和之前同樣。下面羅列一下這四張表和五個鏈。注意必定要明白這些表和鏈的關係及做用。
filter表——三個鏈:INPUT、FORWARD、OUTPUT
做用:過濾數據包 內核模塊:iptables_filter.
Nat表——三個鏈:PREROUTING、POSTROUTING、OUTPUT
做用:用於網絡地址轉換(IP、端口) 內核模塊:iptable_nat
Mangle表——五個鏈:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
做用:修改數據包的服務類型、TTL、而且能夠配置路由實現QOS內核模塊:iptable_mangle(別看這個表這麼麻煩,我們設置策略時幾乎都不會用到它)
Raw表——兩個鏈:OUTPUT、PREROUTING
做用:決定數據包是否被狀態跟蹤機制處理 內核模塊:iptable_raw
INPUT——進來的數據包應用此規則鏈中的策略
OUTPUT——外出的數據包應用此規則鏈中的策略
FORWARD——轉發數據包時應用此規則鏈中的策略
PREROUTING——對數據包做路由選擇前應用此鏈中的規則
(記住!全部的數據包進來的時侯都先由這個鏈處理)
POSTROUTING——對數據包做路由選擇後應用此鏈中的規則
規則表之間的優先順序:
Raw——mangle——nat——filter
規則鏈之間的優先順序(分三種狀況)
從外界到達防火牆的數據包,先被PREROUTING規則鏈處理(是否修改數據包地址等),以後會進行路由選擇(判斷該數據包應該發往何處),若是數據包 的目標主機是防火牆本機(好比說Internet用戶訪問防火牆主機中的web服務器的數據包),那麼內核將其傳給INPUT鏈進行處理(決定是否容許通 過等),經過之後再交給系統上層的應用程序(好比Apache服務器)進行響應。
來自外界的數據包到達防火牆後,首先被PREROUTING規則鏈處理,以後會進行路由選擇,若是數據包的目標地址是其它外部地址(好比局域網用戶經過網 關訪問QQ站點的數據包),則內核將其傳遞給FORWARD鏈進行處理(是否轉發或攔截),而後再交給POSTROUTING規則鏈(是否修改數據包的地 址等)進行處理。
防火牆本機向外部地址發送的數據包(好比在防火牆主機中測試公網DNS服務器時),首先被OUTPUT規則鏈處理,以後進行路由選擇,而後傳遞給POSTROUTING規則鏈(是否修改數據包的地址等)進行處理。
iptables [-t 表名] 命令選項 [鏈名][條件匹配] [-j 目標動做或跳轉]
說明:表名、鏈名用於指定 iptables命令所操做的表和鏈,命令選項用於指定管理iptables規則的方式(好比:插入、增長、刪除、查看等;條件匹配用於指定對符合什麼樣 條件的數據包進行處理;目標動做或跳轉用於指定數據包的處理方式(好比容許經過、拒絕、丟棄、跳轉(Jump)給其它鏈處理。
-A 在指定鏈的末尾添加(append)一條新的規則
-D 刪除(delete)指定鏈中的某一條規則,能夠按規則序號和內容刪除
-I 在指定鏈中插入(insert)一條新的規則,默認在第一行添加
-R 修改、替換(replace)指定鏈中的某一條規則,能夠按規則序號和內容替換
-L 列出(list)指定鏈中全部的規則進行查看
-E 重命名用戶定義的鏈,不改變鏈自己
-F 清空(flush)
-N 新建(new-chain)一條用戶本身定義的規則鏈
-X 刪除指定表中用戶自定義的規則鏈(delete-chain)
-P 設置指定鏈的默認策略(policy)
-Z 將全部表的全部鏈的字節和數據包計數器清零
-n 使用數字形式(numeric)顯示輸出結果
-v 查看規則表詳細信息(verbose)的信息
-V 查看版本(version)
-h 獲取幫助(help)
ACCEPT 容許數據包經過
DROP 直接丟棄數據包,不給任何迴應信息
REJECT 拒絕數據包經過,必要時會給數據發送端一個響應的信息。
LOG在/var/log/messages文件中記錄日誌信息,而後將數據包傳遞給下一條規則
[root@web01 ~]# /etc/init.d/iptables start
iptables: Applying firewall rules: [ OK ]
[root@web01 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@web01 ~]# iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@web01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
-A -I -D
iptables [-t table] -A chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -D chain rulenum #<==根據規則號刪除。
iptables [-t table] -D chain rule-specification
註釋:
-t 指定表d(efault: `filter')
-A #<==把規則添加到指定的鏈上,默認添加到最後一行。
-I #<==插入規則,默認插入到第一行。
-D #<==刪除鏈上的規則
iptables -D INPUT 4 #<==4是規則號。
-F #<==清除一個鏈或全部鏈上的規則
-Z #<==鏈的記數器清零
-X #<==刪除用戶自定義的鏈。
實例:
實踐:
[root@web02 ~]# iptables -Z
[root@web02 ~]# iptables -X
[root@web02 ~]# iptables -F
[root@web02 ~]# iptables -nL
[root@web02 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
規則註釋:
-p #<==指定過濾的協議-p(tcp,udp,icmp,all)
--dport #<==指定目標端口(用戶請求的端口)。
-j #<==對規則的具體處理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)
--sport #<==指定源端口。
[root@web01 ~]# iptables -I INPUT -p tcp -s 10.0.0.253 -i eth0 -j DROP
[root@web02 ~]# iptables -A INPUT -p tcp ! -s 10.0.0.2 -i eth0 -j DROP
-s #<==指定源地址。 ! 取反。
-d #<==指定目的地址。
-i #<==進入的網絡接口(eth0,eth1)。
-o #<==出去的網絡接口(eth0,eth1)。
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
iptables -I INPUT -p tcp --dport 18:80 -j DROP #<==最佳
iptables -A INPUT -p icmp --icmp-type 8
實例:
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-m state --state
NEW:已經或將啓動新的鏈接
ESTABLISHED:已創建的鏈接
RELATED:正在啓動的新鏈接
INVALID:非法或沒法識別的
#容許關聯的狀態包 ftp協議
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-m limit --limit n/{second/minute/hour}:
iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 6/min -j DROP
在同一時間內容許經過的請求"n"爲數字,不指定默認爲5
iptables -I INPUT -s 10.0.0.0/24 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT
修改默認規則
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTOP ACCEPT