systemd 服务 iptables-restore 已启用,但启动后未启动

systemd 服务 iptables-restore 已启用,但启动后未启动

我有一个 Gentoo 系统(基本系统版本 2.2)并且希望在启动时自动加载 iptables 规则。

因此我尝试让 systemd 服务iptables-restore在启动时运行。

该文件/usr/lib/systemd/system/iptables-restore.service看起来像:

[Unit]
Description=Restore iptables firewall rules
# if both are queued for some reason, don't store before restoring :)
Before=iptables-store.service
# sounds reasonable to have firewall up before any of the services go up
Before=network.target
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /var/lib/iptables/rules-save

[Install]
WantedBy=basic.target

然后我就做

systemctl daemon-reload
systemctl enable iptables-restore.service
systemctl start iptables-restore
systemctl status iptables-restore

服务启动后,iptables 规则已成功应用,可以通过以下命令进行检查iptables -L

但状态显示:

● iptables-restore.service - Restore iptables firewall rules
   Loaded: loaded (/usr/lib/systemd/system/iptables-restore.service; enabled)
   Active: inactive (dead)

重新启动后,规则也不会应用。

此外,我制作了另一个具有相同内容的 systemd 服务,但更改WantedBy=basic.targetWantedBy=multi-user.target

但这也不起作用......

有关如何让 systemd 服务在启动时运行或如何在启动时应用 iptables 规则的替代方法的任何提示?

答案1

ExecStart=/sbin/iptables-restore /var/lib/iptables/rules-save

iptables-restore不将文件名作为命令行参数。根据这个人(强调我的):

iptables-restore 用于从指定的数据恢复 IP 表标准输入。使用 shell 提供的 I/O 重定向来读取文件

您需要通过重定向传递文件:

ExecStart='/sbin/iptables-restore < /var/lib/iptables/rules-save'

相关内容