Ubuntu

iptables 策略如何工作?

  • January 4, 2015

我添加了一些基本規則:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

然後,使用以下命令關閉所有其他埠:

iptables -A INPUT -j DROP

它工作得很好,我用以下方法測試了它:

% telnet x.x.x.x 81                                
Trying x.x.x.x...
telnet: connect to address x.x.x.x: Operation timed out
telnet: Unable to connect to remote host

但是當我列出規則時,我看到policy ACCEPT

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere

我知道如何改變它,用iptables -P INPUT DROP,然後它變成:

Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
DROP       all  --  anywhere             anywhere

但我不明白其中的區別,因為它和以前一樣工作。我讀過這篇文章,它建議將策略更改為 DROP,但我為什麼要這樣做?我上面的 iptables 有什麼區別?

一個 iptables 的 DROP 策略相當於iptables -A INPUT -j DROP鏈尾的(DROP rule)。但是這條規則*必須留在鏈的末端,*它之後的任何規則都不會被任何數據包觸及。

如果使用 DROP 規則,則不能再使用iptables -A(append),只能使用iptables -I nr(insert, nr 是最後一條規則的編號) 並在最後一條之前插入規則。並且要使此插入起作用,您必須知道最後一條規則的規則編號,該編號當然會更改,因此編寫腳本變得更加困難。您可以使用 DROP 策略為您節省一些困難。

最後,恕我直言,如果我從一開始就知道如何處理不匹配任何規則的數據包,它會使整個內容更具可讀性。

對此還有其他想法嗎?

引用自:https://serverfault.com/questions/656200