如果删除并再次创建接口,iptables 规则还会继续起作用吗?

如果删除并再次创建接口,iptables 规则还会继续起作用吗?

我的服务器通过 OpenVPN 连接到一些奇怪的资源,并且每次 OpenVPN 客户端启动时,ovpn都会出现一个界面。

我想只向该接口公开选定的端口(例如,MySQL),因此在我的 iptables 中有这条规则:

iptables -A INPUT -i ovpn -p tcp --dport 3306 -j ACCEPT

但是,由于 OpenVPN 客户端可以在无人干预的情况下断开连接并重新连接,因此链接 ID(如图所示ip link show ovpn)可能会发生变化。

当链接消失并再次出现(具有不同的 ID)时,上述 iptables 规则还会继续起作用吗?

答案1

是的,它将继续发挥作用,因为iptables不使用接口的索引,而是在评估-i/--in-interface参数时与当前接口的名称进行字符串比较。实际上它似乎是总是被评估,即使没有提供参数,但内联函数相当优化。

相比之下,nftables(现任候选人继任者iptables) 提供了两种不同的表达方式:iifname:直接等同于-i,比较当前名称,并iif比较接口索引,这会在您的用例中导致问题。当iptables被翻译成nftables(使用iptables-翻译或者iptables-nft对于较新的 iptables-over-kernel-nftables API),-i将转换iifname为符合预期的兼容性。

答案2

是的,会。删除引用的接口时,规则不会被删除。

此外,还有通配符规则,例如,您可以使用匹配-i ppp+或指定“任何 pppX 接口” -o ppp+。根本没有具有该名称的接口,因此它无法引用任何内容。但如果有涉及 ppp2 接口的流量,则此规则将立即应用。

一般来说,规则是在界面出现之前还是之后创建的并不重要。

相关内容