iptablesルールセットを結合する方法

iptablesルールセットを結合する方法

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

--noflushiptables-restoreオプションはカスタムチェーンには適用されません。たとえば、TESTCHAIN組み込みチェーンにのみ適用されます。最善の方法は、TESTCHAINすべてのルールを1つのファイルにまとめて、次のすべてのiptables-restoreルールを使用することです。

egrep -r  "\sTESTCHAIN\s" firewall_rules_directory/*

おすすめ記事