iptables 策略如何工作?

iptables 策略如何工作?

我添加了一些基本规则:

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 有什么不同?

答案1

iptables DROP 策略相当于iptables -A INPUT -j DROP链末端的(DROP 规则)。但是这个规则必须留在链条的末端,它之后的任何规则都不会被任何数据包触碰。

如果您使用 DROP 规则,则不能再使用iptables -A(附加),您只能使用iptables -I nr(插入,nr 是最后一条规则的编号)并在最后一条规则之前插入规则。并且要使此插入起作用,您必须知道最后一条规则的规则编号,这当然会发生变化,因此编写脚本变得更加困难。您可以使用 DROP 策略来避免一些困难。

最后,我认为,如果我从一开始就知道如何处理不符合任何规则的数据包,那么它会使整体更具可读性。

对此还有其他想法吗?

相关内容