iptables的After和Before network.target

如果规则文件有除了ip之外的规则,比如开放端口的规则,那iptables在载入规则的时候会发送DNS请求。如果在service文件里的Unit部分写的是Before=network.target,因为此时还没有网络,所以无法进行DNS请求。这样的话iptables-restore就会808错误码退出,结果就是规则恢复失败,无防火墙。

为了实现重启后自动恢复规则,但是又不留下可乘之机,就要创建一个最简单的防火墙规则:禁止incoming,允许outgoing(这里不更改forward,有需要的自己改)。

# 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同理。

留下评论