我的服务器通过 OpenVPN 连接到一些奇怪的资源,每次 OpenVPN 客户端启动时,都会弹出一个ovpn
界面。
我只想将选定的端口(比如 MySQL)公开给这个接口,所以我的 iptables 中有这个规则:
iptables -A INPUT -i ovpn -p tcp --dport 3306 -j ACCEPT
但是,由于 OpenVPN 客户端可以在不干预的情况下断开连接和重新连接,因此链接 ID(如 所示ip link show ovpn
)可以更改。
在链接消失并再次出现(使用不同的 ID)后,上述 iptables 规则是否会继续工作?
是的,它将继续工作,因为iptables不使用接口的索引,而是在评估
-i
/--in-interface
参数时与当前接口的名称进行字符串比较。实际上它似乎总是被评估,即使没有提供参数,但内联函数已经非常优化。相比之下,nftables ( iptables的当前候选继任者)提供了两种不同的表达式:
iifname
直接等效于-i
、比较当前名称和iif
比较接口索引,这会在您的用例中引起问题。当iptables被翻译成nftables 时(对于更新的 iptables-over-kernel-nftables API使用iptables-translate或iptables-i
-nft),将按预期翻译成iifname
兼容性。是的,它会的。删除引用的接口时不会删除规则。
更重要的是,还有通配符规则,例如您可以使用匹配
-i ppp+
或-o ppp+
. 根本没有那个名字的接口,所以它不能引用任何东西。但如果有涉及 ppp2 接口的流量,该规则将立即适用。一般来说,规则是在界面出现之前还是之后创建的并不重要。