Linux
使用 Docker 的持久性 iptables:使用 if-pre-up.d 時會多次恢復規則
附加上下文(可以跳過)
我正在嘗試在我的系統上設置 psad ,這需要向 iptables 添加規則
iptables -A INPUT -j LOG
。當然,這個規則會在重啟時被刷新,所以我研究了讓它持久化的方法(其中有很多)。雖然該
iptables-persistent
軟體包似乎是最方便的解決方案,但我無法使用它,因為它與系統上執行的 docker 守護程序發生衝突,因為它iptables-persistent
只是在iptables-restore < /etc/iptables/rules.v4
沒有-n
標誌的情況下執行,這可能會破壞 docker-daemon 對 iptables 的任何更改。實際問題
所以我不想完全禁用 docker 守護程序的自動 iptable 規則,因為它只會造成巨大的維護麻煩,所以我只是添加了一個腳本
#!/bin/bash iptables-restore -n < /etc/network/iptables.rules
在沒有docker 規則的情況下
/etc/network/if-pre-up.d
使用chmod +x
並保存配置。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 服務時它不會執行。
最後,我剛剛創建了一個執行腳本一次的 systemd 服務並將其從
if-pre-up.d