Linux

使用 Docker 的持久性 iptables:使用 if-pre-up.d 時會多次恢復規則

  • November 15, 2018

附加上下文(可以跳過)

我正在嘗試在我的系統上設置 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

引用自:https://serverfault.com/questions/938977