我有一个 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.target
为WantedBy=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'