netfilter-persistent 似乎没问题,但重启后不会加载规则

netfilter-persistent 似乎没问题,但重启后不会加载规则

其他人也有类似的问题,但我尝试了他们所有的方法,但在启动时缺少 iptable 条目,到目前为止都没有成功:|(这似乎不是加载过程中 iptable 文件中的拼写错误)

我在 iptables 中添加了一条简单规则

sudo iptables -I INPUT -p tcp -m tcp --dport 8140 -j ACCEPT

并执行 sudo service netfilter-persistent save

我已经检查过 8140 规则是否在 iptables 规则中 sudo cat /etc/iptables/rules.v4

但重新启动后并 sudo iptables -L INPUT -v -n没有显示我的 8140 输入条目。

systemctl status netfilter-persistent 说一切都好

samuel@samuel-VirtualBox:~$ systemctl status netfilter-persistent
* netfilter-persistent.service - netfilter persistent configuration
     Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/netfilter-persistent.service.d
             `-iptables.conf
     Active: active (exited) since Sun 2022-02-20 11:21:47 CET; 10min ago
       Docs: man:netfilter-persistent(8)
    Process: 642 ExecStart=/usr/sbin/netfilter-persistent start (code=exited, status=0/SUCCESS)
   Main PID: 642 (code=exited, status=0/SUCCESS)

Feb 20 11:21:47 samuel-VirtualBox systemd[1]: Starting netfilter persistent configuration...
Feb 20 11:21:47 samuel-VirtualBox netfilter-persistent[649]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Feb 20 11:21:47 samuel-VirtualBox netfilter-persistent[649]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Feb 20 11:21:47 samuel-VirtualBox systemd[1]: Finished netfilter persistent configuration.

因此服务已启用,当我手动运行时,sudo service netfilter-persistent reload它似乎正确加载规则,因为随后显示了 8140 INPUT 链。

欢迎提供任何关于该做什么的提示:)

答案1

我遇到了类似的问题netfilter-persistent

描述

netfilter-persistent通常会在启动时启动,我在系统日志中确认了这一点

$ cat /var/log/syslog | grep netfilter | tail
Apr  6 11:40:54 raspberrypi systemd[1]: Starting netfilter persistent configuration...
Apr  6 11:40:54 raspberrypi netfilter-persistent[381]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Apr  6 11:40:55 raspberrypi netfilter-persistent[381]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Apr  6 11:40:55 raspberrypi netfilter-persistent[381]: Warning: skipping IPv6 (no rules to load)
Apr  6 11:40:55 raspberrypi systemd[1]: Started netfilter persistent configuration.

但运行iptables -L没有产生任何规则/etc/iptables/rules.v4。手动运行iptables-restore < /etc/iptables/rules.v4或重新启动服务,就像您所做的那样。

解决方法

我的解决方法是延迟启动服务network.target。我打开了 systemd 单元文件/lib/systemd/system/netfilter-persistent.service

[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no
Wants=network-pre.target systemd-modules-load.service local-fs.target
Before=network-pre.target shutdown.target
After=systemd-modules-load.service local-fs.target network.target
Conflicts=shutdown.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop

[Install]
WantedBy=multi-user.target

并添加network.targetAfter=行中。现在netfilter-persistent在启动过程中稍后运行,并且所有规则都已存在,无需我手动重新运行它。

编辑:发现问题

因此,在发布此内容后,我做了进一步的挖掘,发现有一个我创建但忘记了的 init 脚本。该脚本是从不同的位置/etc/network/if-up.d运行的- 这解释了为什么移动后解决了这个问题。我建议您搜索 init 脚本并查找任何与 iptables 相关的内容。iptables-restore/etc/iptables/rules.v4netfilter-persistentnetwork.target

相关内容