使用 Docker 持久化 iptables:使用 if-pre-up.d 时规则会被多次恢复

使用 Docker 持久化 iptables:使用 if-pre-up.d 时规则会被多次恢复

附加背景信息(可以跳过)

我正在尝试在我的系统上设置 psad,这需要向 iptables 添加一条规则iptables -A INPUT -j LOG。当然,此规则将在重新启动时被刷新,因此我研究了使其持久的方法(其中有很多)。

虽然该iptables-persistent软件包似乎是最方便的解决方案,但我无法使用它,因为它与系统上运行的 docker 守护进程冲突,因为只是在没有标志的情况下iptables-persistent运行,这可能会破坏 docker-daemon 对 iptables 的任何更改。iptables-restore < /etc/iptables/rules.v4-n

实际问题

所以我不想完全禁用docker守护进程的自动iptable规则,因为这只会带来巨大的维护麻烦,所以我只是添加了一个脚本

#!/bin/bash
iptables-restore -n < /etc/network/iptables.rules

/etc/network/if-pre-up.d保存chmod +x配置没有docker 规则如下iptables-save > /etc/network/iptables.rules

然后文件iptables.rules就说

-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -j LOG

但是当我重启系统时,我看到这个规则出现-A INPUT -j LOG了三次。我目前的猜测是,这可能是因为这个规则/etc/network/firewall被执行了多次(因为有多个接口??)。

我该如何解决这个问题?请注意,它rc.local已被弃用,并且不适用于此目的,因为它不会在 iptables 服务重新启动时运行。

答案1

最后,我只是创建了一个 systemd 服务来运行该脚本一次,然后将其从if-pre-up.d

相关内容