我依靠我的特定服务在 debian 安装启动时加载 iptables 规则,该服务调用
iptables-restore my_rules.v4
ip6tables-restore my_rules.v6
并执行一些其他脚本
但是我意识到,在启用接口和应用固件规则之间存在应用默认规则的一小段时间,这可能会使机器面临一些风险。
我已经启用了 iptables-persistent 服务,但我不确定它是否在网络部分启动之前加载。
在网络上线并可用之前加载脚本的最佳方法是什么?
我听说过接口中的 pre-up,但我有很多接口,所以我不确定首先放置哪个接口,并且在所有接口上使用 pre-up 会导致脚本运行太多次而不是只运行一次。
在 Debian 12 中,
iptables
默认是新nftables
子系统的包装器。该iptables-persistent
包依赖于 package ,它创建一个名为和的别名netfilter-persistent
的服务。netfilter-persistent.service
iptables.service
ip6tables.service
的
netfilter-persistent.service
定义如下:注意
DefaultDependencies=no
,Wants=network-pre.target
和Before=network-pre.target
。假设您使用任何预期的方式来配置网络接口,这些已经确保在配置任何网络接口之前恢复 iptables/nftables 规则。所以答案是,是的,
iptables-persistent
在启动任何网络接口之前加载。如果您想为 iptables/nftables 规则创建自己的自定义服务,您应该以相同的方式设置该服务的依赖项
netfilter-persistent.service
。请参阅手册页
network-pre.target
上的文档(重点是我的):systemd.special(7)
取决于您的发行版,例如 Fedora Linux 会为您做到这一点。奇怪的是你的发行版却没有——这是一个绝对值得报告和修复的安全漏洞。Systemd 对加载单元有依赖性,您需要使网络依赖于您的防火墙单元。如果您使用不同的初始化系统,请咨询它。