在 iptables 中,我丢弃了所有传入流量。但我希望当发送到被阻止的地址时,PING 能够正常工作。
如果我允许 ESTABLISHED,则有效。但这也允许现有(=已建立)连接继续,即使 iptables 规则规定应阻止/丢弃它们。
已确立的意味着该数据包与一个已在两个方向上看到数据包的连接相关联
我没有看到任何更好的状态来识别刚刚在第二个方向上接收到第一个数据包的连接 - 对传出请求的第一个回复。
有没有办法为这些“新建立”的连接设置规则?
或许新的可以以某种方式在传出连接上使用以允许传入数据包吗?
更新:因为我无法用其他方式表达意图:
我希望实施白名单,这样一些特定地址应该能够连接,其他地址则应被丢弃。所以我有:
iptables -A INPUT -s 1.1.1.1,2.2.2.2 -j ACCEPT
iptables -P INPUT DROP
但这也会阻止回复流量,因此如果这台计算机向白名单地址发送 ping,它不会收到回复这就是为什么我添加了 ESTABLISHED 规则,它可以修复该问题:
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
但这又引入了另一个问题:如果在应用这些规则之前,来自非白名单地址 9.9.9.9 的连接已经存在,它将允许继续。
我怎样才能允许回复流量而不允许被 iptables 规则阻止的现有连接?
答案1
如果我理解正确的话,问题出现在防火墙规则过于宽松,而您又添加了一条规则来阻止之前允许的流量。然后,在新规则生效后,已经允许且在 conntrack 模块中具有开放连接的流量将被允许。
你应该看看conntrack 工具。
使用该conntrack
程序,您可以列出活动连接并明确删除不需要的连接。
请注意,conntrack 模块中的 ESTABLISHED 指的是 conntrack 模块已知的连接状态。这意味着,在您从那里删除连接后,iptables 规则将阻止重新建立连接,因为下一个数据报会将状态设置为 NEW。