可以修改/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)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
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
插入前:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
DROP ? ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ??
DROP ? ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ?
插入:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
插入后:
# 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: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 ?
追加前:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
DROP ? ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ??
DROP ? ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0?
追加:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
追加后(ACCEPT將不能生效):
# iptables -L -n
Chain INPUT (policy ACCEPT)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
DROP ? ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ??
DROP ? ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0?
ACCEPT ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ?tcp spt:80
/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)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
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
插入前:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
DROP ? ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ??
DROP ? ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ?
插入:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
插入后:
# 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: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 ?
追加前:
# iptables -L -n
Chain INPUT (policy ACCEPT)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
DROP ? ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ??
DROP ? ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0?
追加:
# iptables -I INPUT 1 -p tcp --sport 80 -j ACCEPT
追加后(ACCEPT將不能生效):
# iptables -L -n
Chain INPUT (policy ACCEPT)
target ? ? prot opt source ? ? ? ? ? ? ? destination ? ? ? ??
DROP ? ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ??
DROP ? ? ? udp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0?
ACCEPT ? ? tcp ?-- ?0.0.0.0/0 ? ? ? ? ? ?0.0.0.0/0 ? ? ? ? ? ?tcp spt:80