Linux┊認識iptables(二):過濾規則運用

Category : 工作学习 / Tags : , / Date : 2008.11.09 / /

转载自:天蓝工作室

2. 如何設定過濾規則

除了「-A」能為您增添過濾規則外,iptables還有其他選項讓您刪除、查看、置換規則:

-A:在某chain添加過濾規則
-I:把過濾規則插入chain內特定位置
-R:置換chain內某位置的過濾規則
-D:刪除chain內某道過濾規則

(1) -A (Append,添加)
添加過濾規則的語法如下:


-A, –append chain rule-specification

我們可再用第三節的規則範例。首先,我們以「iptables -L」顯示iptables現有的過濾規則:


Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

加上「iptables -A INPUT -p icmp -s 127.0.0.1 -j DROP」後:


Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp — beryl anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

當中,beryl是127.0.0.1的主機名稱。現在我們知道剛才的規則已經添加在INPUT這道chain內。您可試著把更多的規則添加入INPUT:


iptables -A INPUT -p icmp -s 127.0.0.2 -j DROP
iptables -A INPUT -p icmp -s 127.0.0.3 -j DROP
iptables -A INPUT -p icmp -s 127.0.0.4 -j DROP

然後再輸入「iptables -L」:


Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp — beryl anywhere
DROP icmp — 127.0.0.2 anywhere
DROP icmp — 127.0.0.3 anywhere
DROP icmp — 127.0.0.4 anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

請留意每一次使用「-A」都會把規則加到最後,當有封包經過時,也是根據由上至下這個次序核對,若果有兩條前後矛盾的規則:


Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp — beryl anywhere
ACCEPT icmp — beryl anywhere

那麼iptables只會理會上一道規則,因為它未與下層的規則核對之前,已經從較上層的規則中知道如何處理該封包。


PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

— 127.0.0.1 ping statistics —
2 packets transmitted, 0 received, 100% packet loss, time 1013ms

(2) -I (Insert,插入過濾規則)

插入過濾規則的語法如下:


-I, –insert chain [rulenum] rule-specification

假設我們已有以下的過濾規則:


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp — beryl anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

現在我們輸入「iptables -I INPUT 1 -p icmp -s 127.0.0.1 -j DROP」:


Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp — beryl anywhere
ACCEPT icmp — beryl anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

剛才的指令把過濾規則插入成第一道規則,若果我們使用「-A」的話,該規則會加在「ACCEPT」下面。

當您有了剛才的兩道規則,您便可以選擇把規則插入1(最頂)、2(中間)或3(最底,即與-A無異)。您不能插入更高的數字,以剛才的例子為例,您不能把規則插進第四行,因為您本身沒有第三行規則,若果您犯了剛才的錯誤,iptables會有以下訊息:


iptables -I INPUT 4 -p icmp -s 127.0.0.1 -j DROP


iptables: Index of insertion too big

若果您沒有輸入數字,它會自動預設為「1」,即把規則插在頂端。

(3) -R (Replace,置換過濾規則)

置換過濾規則的語法如下:


-R, –replace chain rulenum rule-specification

由於rulenum並無預設值,因此您必須輸入被置換的規則是屬於哪一行。假設我們已有以下的過濾規則:

Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp — beryl anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

現在我們想把「DROP」變為「ACCEPT」,我們可輸入以下指令:


iptables -R INPUT 1 -p icmp -s 127.0.0.1 -j ACCEPT

然後再輸入「iptables -L」看一看:


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp — beryl anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

我們成功令原本的「DROP」變成「ACCEPT」,請留意您必須完整地鍵入新的規則,您不能輸入「iptables -R INPUT 1 -j ACCEPT」並企圖將「DROP」改成「ACCEPT」。

(4) -D (Delete,刪除過濾規則)

刪除過濾規則的語法如下:


-D, –delete chain rule-specification
-D, –delete chain rulenum

例如您已有以下的過濾規則:


Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp — beryl anywhere
ACCEPT icmp — 127.0.0.2 anywhere
ACCEPT icmp — 127.0.0.3 anywhere
ACCEPT icmp — 127.0.0.4 anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

如果您想刪除第二條規則,您可以輸入以下指令:


iptables -D INPUT 2

或者:


iptables -D INPUT -p icmp -s 127.0.0.2 -j ACCEPT

若果您輸入不正確的規則號碼,iptables將會有以下訊息:


iptables: Index of deletion too big

若果您輸入的規則並不能準確符合任何過濾規則的話,例如您輸入「iptables -D INPUT -p icmp -s 128.0.0.1 -j ACCEPT」:


iptables: Bad rule (does a matching rule exist in that chain?)

資料參考

[1]  Rusty Russell. "Linux 2.4 Packet Filtering HOWTO" [Online]. Available: http://www.netfilter.org/documentation/HOWTO//packet-filtering-HOWTO.html
[2]  Rusty Russell and Harald Welte. "Linux Netfilter Hacking HOWTO" [Online]. Available: http://www.netfilter.org/documentation/HOWTO//netfilter-hacking-HOWTO.html
[3]  H. Gilbert. "Introduction to TCP/IP". In PCLT 1995.



无觅相关文章插件,快速提升流量

Comments

There are no comments.

Leave a Reply

You must be logged in to post a comment.

传奇 似水流年 绽放 风筝 八月照相馆