iptables
起動時に実行されるスクリプトが複数あり、すべてルールの追加などiptables -A ...
のタスクを実行しているとします。このすべてのシェルスクリプトをiptables-save
。
しかし、これらすべてのルールセットを読もうとすると、私が何か間違っているようです。起動時に実行されるスクリプトは、これらのファイルを繰り返しますiptables-restore
。これは一部のルール(デフォルトチェーンに保存されています)では機能しますが、他のチェーンのほとんどのルールでは機能しません。以下は、互いに更新される2つのルールセットの例です(セットaの読み取り、確認、セットbの読み取り、確認がセットaの消去)。-n
--noflush
複数のiptablesルールセットをどのように読みますか?
例:
$ cat fake1-a.rules
*nat
:PREROUTING ACCEPT [7:997]
:INPUT ACCEPT [7:997]
:OUTPUT ACCEPT [28:1810]
:POSTROUTING ACCEPT [28:1810]
COMMIT
*mangle
:PREROUTING ACCEPT [344:84621]
:INPUT ACCEPT [344:84621]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296:37971]
:POSTROUTING ACCEPT [296:37971]
COMMIT
*filter
:INPUT ACCEPT [102:26513]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [89:10767]
:TESTCHAIN - [0:0]
-A TESTCHAIN -p tcp -m tcp --dport 12345 -j DROP
COMMIT
$ cat fake1-b.rules
*nat
:PREROUTING ACCEPT [7:997]
:INPUT ACCEPT [7:997]
:OUTPUT ACCEPT [28:1810]
:POSTROUTING ACCEPT [28:1810]
COMMIT
*mangle
:PREROUTING ACCEPT [344:84621]
:INPUT ACCEPT [344:84621]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [296:37971]
:POSTROUTING ACCEPT [296:37971]
COMMIT
*filter
:INPUT ACCEPT [102:26513]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [89:10767]
:TESTCHAIN - [0:0]
-A TESTCHAIN -p tcp -m tcp --dport 54321 -j DROP
COMMIT
# cat fake1-a.rules | iptables-restore --noflush
# iptables -nL | grep DROP
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:12345
# cat fake1-b.rules | iptables-restore --noflush
# iptables -nL | grep DROP
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:54321
答え1
--noflush
iptables-restore
オプションはカスタムチェーンには適用されません。たとえば、TESTCHAIN
組み込みチェーンにのみ適用されます。最善の方法は、TESTCHAIN
すべてのルールを1つのファイルにまとめて、次のすべてのiptables-restore
ルールを使用することです。
egrep -r "\sTESTCHAIN\s" firewall_rules_directory/*