如果规则文件有除了ip之外的规则,比如开放端口的规则,那iptables在载入规则的时候会发送DNS请求。如果在service文件里的Unit部分写的是Before=network.target
,因为此时还没有网络,所以无法进行DNS请求。这样的话iptables-restore
就会808错误码退出,结果就是规则恢复失败,无防火墙。
为了实现重启后自动恢复规则,但是又不留下可乘之机,就要创建一个最简单的防火墙规则:禁止incoming,允许outgoing(这里不更改forward,有需要的自己改)。
1
2
3
4
5
6
7
# Generated by iptables-save v1.8.7 on Sat Apr 3 15:30:35 2021
*filter
:INPUT DROP [1426:454948]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [177:12694]
COMMIT
# Completed on Sat Apr 3 15:30:35 2021
保存成rules.v4.startup
。然后复制一份iptables.service
为iptables-startup.service
。把iptables.service
的Before=network.target
改成After=network.target
,把iptables-startup.service
的rules.v4
改成rules.v4.startup
。然后enable一下iptables-startup.service
就完成了。
ip6tables同理。