filter 這個表主要用於過濾包的,是系統預設的表,這個表也是阿銘用的最多的。內建三個鏈INPUT、OUTPUT以及FORWARD。INPUT做用於進入本機的包;OUTPUT做用於本機送出的包;FORWARD做用於那些跟本機無關的包。bash
nat 主要用處是網絡地址轉換,也有三個鏈。PREROUTING 鏈的做用是在包剛剛到達防火牆時改變它的目的地址,若是須要的話。OUTPUT鏈改變本地產生的包的目的地址。POSTROUTING鏈在包就要離開防火牆以前改變其源地址。用的很少,但有時候會用到。服務器
mangle 這個表主要是用於給數據包打標記,而後根據標記去操做哪些包。這個表幾乎不怎麼用。除非你想成爲一個高級網絡工程師,不然你就沒有必要花費不少心思在它上面。網絡
iptables -nvL
iptables -t nat -nvL
其中:-t 後面跟表名,--nvL 即查看該表的規則,其中-n表示不針對IP反解析主機名;-L表示列出的意思;而-v表示列出的信息更加詳細。若是不加-t ,則打印filter表的相關信息。tcp
[root@localhost ~]# iptables -F [root@localhost ~]# iptables -Z
不加-t默認是針對表filter來操做的,-F 表示把全部規則所有刪除;-Z表示把包以及流量計數器置零。 -F 是把當前規則清除,但這個只是臨時的,重啓系統或者重啓 iptalbes 服務後還會加載已經保存的規則,因此須要使用 /etc/init.d/iptables save 保存一下規則code
# iptables -A INPUT -s 10.72.11.12 -p tcp --sport 1234 -d 10.72.137.159 --dport 80 -j DROP
ip
這就是增長了一條規則,省略-t因此針對的是filter表。-A 表示增長一條規則,另外還有-I 表示插入一條規則,-D刪除一條規則;後面的INPUT即鏈名稱,還能夠是OUTPUT或者FORWORD;-s 後跟源地址;-p 協議(tcp, udp, icmp); --sport/--dport 後跟源端口/目標端口;-d 後跟目的IP(主要針對內網或者外網);-j 後跟動做(DROP即把包丟掉,REJECT即包拒絕;ACCEPT即容許包)。這樣講可能很亂,那阿銘多舉幾個例子來幫你理解:get
iptables -I INPUT -s 1.1.1.1 -j DROP
:插入一條規則,把來自1.1.1.1的全部數據包丟掉。it
iptables -D INPUT -s 1.1.1.1 -j DROP
: 刪除剛剛插入的規則。注意要刪除一條規則時,必須和插入的規則一致,也就是說,兩條iptables命令,除了-I 和-D不同外,其餘地方都同樣。io
iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
:上例表示把來自2.2.2.2 而且是tcp協議到本機的80端口的數據包丟掉。這裏要說的是,--dport/--sport 必需要和-p選項一塊兒使用,不然會出錯。table
iptables -I OUTPUT -p tcp --dport 22 -d 10.0.2.34 -j DROP
:這條規則表示,把發送到10.0.2.34的22端口的數據包丟掉。
-A/-D :增長刪除一條規則;
-I :插入一條規則,其實跟-A的效果同樣;
-p :指定協議,能夠是tcp,udp或者icmp;
--dport :跟-p一塊兒使用,指定目標端口;
--sport :跟-p一塊兒使用,指定源端口;
-s :指定源IP(能夠是一個ip段);
-d :指定目的IP(能夠是一個ip段);
-j :後跟動做,其中ACCEPT表示容許包,DROP表示丟掉包,REJECT表示拒絕包;
-i :指定網卡(不經常使用,但有時候能用到);
有時候你的服務器上iptables過多了,想刪除某一條規則時,又不容易掌握當時建立時的規則。其實有一種比較簡單的方法:
[root@localhost ~]# iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 133 packets, 9740 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- eth0 * 192.168.1.0/24 0.0.0.0/0
刪除某一條規則使用以下命令:
[root@localhost ~]# iptables -D INPUT 1
iptables還有一個選項常常用到,-P(大寫)選項,表示預設策略。用法以下: [root@localhost ~]# iptables -P INPUT DROP
-P後面跟鏈名,策略內容或者爲DROP或者爲ACCEPT,默認是ACCEPT。注意:若是你在鏈接遠程服務器,千萬不要隨便敲這個命令,由於一旦你敲完回車你就會斷掉。
這個策略一旦設定後,只能使用 iptables -P INPUT ACCEPT 才能恢復成原始狀態,而不能使用-F參數。下面阿銘針對一個小需求講述一下這個iptables規則如何設定。
需求:只針對filter表,預設策略INPUT鏈DROP,其餘兩個鏈ACCEPT,而後針對192.168.137.0/24開通22端口,對全部網段開放80端口,對全部網段開放21端口。這個需求不算複雜,可是由於有多條規則,因此最好寫成腳本的形式。腳本內容以下:
[root@localhost ~]# cat /usr/local/sbin/iptables.sh #! /bin/bash ipt="/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -s 192.168.137.0/24 -p tcp --dport 22 -j ACCEPT $ipt -A INPUT -p tcp --dport 80 -j ACCEPT $ipt -A INPUT -p tcp --dport 21 -j ACCEPT