iptables 默认策略为“DROP”与在输入链中插入单独策略以 DROP 所有连接之间的区别

iptables 默认策略为“DROP”与在输入链中插入单独策略以 DROP 所有连接之间的区别

我正在尝试删除除特定网络之外的所有传入到我的服务器的连接。同时,我想保持从我的服务器到外部网络(任何协议上的任何网络)的所有传出连接打开。它通过在 INPUT 链中进行以下两项更改来实现:

注意:测试使用 3 台服务器(虚拟机)进行,其 IP 位于 192.168.0.0/24 网络,所有规则均在服务器 3(IP:192.168.0.3)上定义

a. iptables -P INPUT DROP
b. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
[root@server3 ~]# iptables -nvL

Chain INPUT (policy DROP 124 packets, 22308 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  265 34603 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 433 packets, 34693 bytes)
 pkts bytes target     prot opt in     out     source               destination         

但是,我的第一个问题是:

  1. 当我定义上述第一条规则(更改 INPUT 链的默认策略)时,它也会停止来自我的服务器(IP:192.168.0.3)的所有传出连接(ssh、ping)。如果我的默认 OUTPUT 链策略仍然接受,并且我在 OUTPUT 链下没有定义任何规则,为什么会发生这种情况?

我想通过不改变 INPUT 链的默认策略来实现同样的目的,如下所示:

c. iptables -I INPUT -j DROP
d. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

但它仍然阻止了所有进出我的服务器 3 的连接。这让我想到了第二个问题:

  1. 规则c.a.工作方式有何不同?请帮助我理解,因为我对 Linux 防火墙还不熟悉。

答案1

如果你有一个默认的 DROP INPUT 策略,即使回复来自你的传出连接的数据包将被丢弃。

要接受这些,请添加此输入规则:

iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

至于你的最后一个问题,在你的c and d例子中(假设这些命令之前的规则为空),你正在设置第一条规则drop everything第二接受来自特定网络的流量的规则。IPTABLES 会尽快获取匹配项,因此第一条规则始终匹配(不设置条件),因此之后的所有规则都不会执行。必须定义规则的例外情况规则。

在第一个示例中-P INPUT DROP,您设置了一个最后的规则将捕获之前未匹配的任何内容,因此任何添加的异常都将在默认规则之前执行(-P)。

-I 插入到某个位置(例如,在我之前的命令中,我将 ESTABLISHED,RELATED 规则设置为第一个,因此无论您之后设置什么,它都会匹配。

-A 附加到规则列表,因此 if 将在默认规则之前匹配。

如果您想要使用明确的规则(如c and d)实现与第一个例子相同的效果,您应该交换这些规则的位置。

相关内容