几个月前,我在 iptables 中设置了规则,并习惯于iptables-persistent
让规则在重启后仍然有效。我刚刚更新了我的规则,并试图让它们保留下来,但没有任何效果,它们不断重置为较早的版本。我尝试过:
创建一个在系统重启时以及每分钟运行的 cronjob,
#!/bin/bash
iptables-restore -c < /home/amart219/iptables.backup
我已将其保存到据称是规则默认位置的文件并重新配置了 iptables-persistent
iptables-save > /etc/iptables/rules.v4
dpkg-reconfigure iptables-persistent 我在 /etc/network/if-pre-up.d/ 目录中放置了一个脚本,内容如下:
#!/bin/bash
/sbin/iptables-restore < /home/amart219/iptables.backup
/sbin/ip6tables-restore < /home/amart219/iptables.backup
我修改了/etc/network/interfaces
文件
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.rules
post-down iptables-restore < /etc/iptables.downrules
if-pre-up.d
我在和if-post-down.d
目录中添加了 iptables-restore 和 iptables-save/etc/network directory
#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0
#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
iptables-restore < /etc/iptables.downrules
fi
exit 0
我确信这些文件是可执行的。
sudo chmod +x /etc/network/if-post-down.d/iptablessave
sudo chmod +x /etc/network/if-pre-up.d/iptablesload
这些更改都没有任何区别。我的理解是 dpkg-reconfigure iptables-persistent 是正确的方法,但是我尝试的方法都没有用。恐怕在过去的某个时候,我可能尝试过以在安装 iptables-persistent 之前有效的其他方式使它们持久化,但如果是这样,我不知道我该怎么做。我运行:tail -500 /var/log/syslog
在重启后立即查看系统是否加载了任何东西,但我只看到通常的启动数据。除了我创建的尝试恢复 iptables 设置的 cron 作业之外,此服务器没有其他 cron 作业。我不知道这是否是问题所在,但如果是的话,我不知道如何找到它可能从哪里运行以更改它。
如果我手动运行我在 cron 中设置的脚本来恢复 iptables 设置,它会正常工作,但不会在重启后持续存在。cronjob 设置正确,在单独的服务器上我有 40 多个 cronjob,我熟悉该过程。
有什么建议吗?我对方法并不挑剔,我只是需要它能起作用。
答案1
Andrea Turbiglio 在另一个网站上回答了我的问题。我相信该网站与此网站有关联,但我不知道链接到另一个网站的规则,所以我将答案归功于他,并将其放在这里。
“我曾经将“iptables-restore”一行放在 /etc/rc.local 中(在 Debian 8 和 Ubuntu 16.04 上测试过),并且它运行良好。”
答案2
可能是第三方防火墙程序被激活了。检查ufw
并firewalld
使用
dpkg -l | grep ufw
dpkg -l | grep firewalld
你可以安装相应的GUI工具:
sudo apt-get install ufw gufw
sudo apt-get install firewalld firewall-applet