让我们举个例子,假设我只允许传出 HTTP[S] 流量通过防火墙。我知道在现实场景中我还需要允许传出 DNS 流量,但这只是一个示例。我会这样编写 iptable 规则:
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP
-A INPUT -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
它是否正确?我想知道,因为我见过有人编写了相同的防火墙规则,如下所示:
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP
-A INPUT -p tcp -m multiport --sports 80,443 -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp -m multiport --dports 80,443 -m state --state NEW -j ACCEPT
传出规则NEW
和for之间有什么区别?NEW,ESTABLISHED,RELATED
仅仅编写NEW
并让防火墙执行一些神秘的魔法就足够了吗?或者说有必要写吗NEW,ESTABLISHED,RELATED
?
答案1
第二种配置将不起作用(尝试一下!)。由于你的默认策略是DROP
在OUTPUT
链上,所以TCP三次握手的第三个数据包将被防火墙阻止,因为该数据包不属于NEW
,因此永远不会建立连接。
OUTPUT
如果您的默认策略是ACCEPT
,或者您之后有其他一些OUTPUT
允许ESTABLISHED
并RELATED
声明的规则,那么它会起作用。
总之,如果您想将DROP
其作为默认策略,则第一个规则集是正确的。