查看iptables表中鏈的命令,如查看filter表:
iptables -t filter -L
介紹iptables命令
iptables -t table 命令 chain rules -j target
table可以是filter nat mangle 默認爲filter
命令
-P 定義默認策略
-A 在規則列表的最後增加一條規則
-I 在指定的位置插入一條規則
-D 刪除一條規則
-R 替換規則列表中的某個規則
-F 刪除表中所有的規則
以上規則從上往下匹配,匹配到合適的規則數據包則不繼續往下匹配,如上圖,filter表中匹配到INPUT鏈的icmp,則下面的規則不走。反之,如果INPUT鏈下面的規則都不匹配,則匹配默認策略(pollicy ACCEPT)
修改默認策略命令:
iptables -t filter -P FORWARD DROP//將上圖的ACCEPT修改爲DROP
以下內容請結合上圖查看,否則內容可能看不懂
實例:
添加一條命令不允許ping通路由器本身,根據上一篇Netfilter框架可以知道Ping包通過鏈路層走INPUT鏈。
規則添加如下:
iptables -t filter -I INPUT -p icmp -j DROP
//-I INPUT表示將該規則插入到INPUT鏈的第一條規則
iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere
REJECT all -- anywhere anywhere
//刪除該規則
iptables -t filter -D INPUT 1
iptables 匹配選項
-i 指定數據包從那個網絡接口進入,如ppp0,eth0和eth1等
-o 指定數據包從哪個網絡接口輸出,如ppp0,eth0和eth1等
-p 協議類型 指定數據包匹配的協議,如TCP,UDP,和ICMP等
-s 指定數據包匹配的源地址
-d 指定數據包的目標地址
–sport 指定數據包匹配的源端口,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口
– dport 目標端口號:指定數據包匹配的目標端口號,可以使用”起始端口號:結束端口號“的格式指定一個範圍的端口
實例
/*初始環境
路由器LA口網絡接口爲br0,默認IP爲192.168.0.3.
WAN口爲eth2.2,上層路由器默認IP爲192.168.5.1.默認路由走eth2.2
*/
# ip route
192.168.5.1 via 192.168.5.1 dev eth2.2 metric 1
255.255.255.255 dev br0 scope link
192.168.5.0/24 dev eth2.2 proto kernel scope link src 192.168.5.105 metric 11
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.3
default via 192.168.5.1 dev eth2.2 equalize
//1.設置路由器網絡接口禁止電腦Ping路由器
iptables -t filter -I INPUT -i eth2.1 -p icmp -j DROP
//因爲:電腦ping路由器走的是INPUT鏈
//2.設置路由器網絡接口禁止電腦ping通上層路由器192.168.5.1,但是能ping通路由器本身192.168.0.3
iptables -t filter -I FORWARD -o eth2.2 -p icmp -j DROP
//因爲:電腦ping上層路由器,需要192.168.0.3的路由器做路由轉發,走的是FORWARD鏈,然後通過eth2.2接口出去,查找上層路由192.168.5.1,禁止出去的網絡接口轉發數據即可
//禁止電腦訪問192.168.0.3路由器的界面
iptables -t filter -I INPUT -p tcp --dport 80 -j DROP
//因爲:http界面的目的端口是80
參考:
http://www.zsythink.net/archives/1764
注意:
只做SNAT時,我們並不用手動進行DNAT設置,iptables會自動維護NAT表,並將響應報文的目標地址轉換回來。
配置DNAT時,並不能正常的DNAT,經過測試發現,將相應的SNAT同時配置後,即可正常DNAT。