可以修改/etc/rc.d/boot.local讓規則重新開機後也能生效,如:
/sbin/iptables -F
/sbin/iptables -A INPUT -i eth0 -p tcp --sport 80 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp -j DROP
/sbin/iptables -A INPUT -i eth0 -p udp -j DROP
iptables是一個鍊的方式從前往後判斷,如果前面的規則成立就不會往後繼續,是以要注意順序,一般每行對應一條規則。
-A是Append意思,也就是追加
-I是Insert意思,也就是插入
-F表示清除(即删除)掉已有規則,也就是清空。
檢視已有的規則,執行指令:iptables -L -n
如(參數-L為list意思,-n表示以數字方式顯示IP和端口,不指定-n則顯示為名稱,如:http即80端口):
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:443
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:80
DROP tcp -- 0.0.0.0/0 0.0.0.0/0
DROP udp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
從可以看到:iptables有三種規則鍊(Chain),即INPUT、OUTPUT和FORWARD。
INPUT 用于指定輸入規則,比如外部是可以通路本機的80端口
OUTPUT 用于指定輸出規則,比如本機是否可以通路外部的80端口
FORWARD 用于指定端口轉發規則,比如将8080端口的資料轉到到80端口
-I和-A需要指定鍊(Chain)名,其中-I的鍊名後還需要指定第幾條(行)規則。
可通過-D參數删除規則,有兩種删除方式,一是比對模式,二是指定第幾條(行)。
也可以通過-R參數修改已有規則,另外-L參數後也可以跟鍊(Chain)名,表示隻列出指定鍊的所有規則。
-j參數後跟的是動作,即滿足規則時執行的操作,可以為ACCEPT、DROP、REJECT和REDIRECT等。
在iptables的INPUT鍊的第一行插入一條規則(可通路其它機器的80端口):
iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
在iptables的INPUT鍊尾追加一條規則(可通路其它機器的80端口):
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
如果要讓其它機器可以通路本機的80端口,則為:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
插入前:
DROP udp -- 0.0.0.0/0 0.0.0.0/0
插入:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
插入後:
追加前:
DROP udp -- 0.0.0.0/0 0.0.0.0/0
追加:
追加後(ACCEPT将不能生效):