これまでに作成したすべてのINPUT DROPルールを削除します。

これまでに作成したすべてのINPUT DROPルールを削除します。

特定の条件下で特定のIPアドレスを禁止するスクリプトを作成しようとしていますが、再開できるように、深夜ごとにこれらのブロックを「消去」する方法が必要です。ブロック部分が正常に作成されました。

私は今一生懸命働いています。すべてのINPUT DROPルールをすぐに削除します。ただし、次のコマンドは「無効なルール」エラーを返します。

iptables -D INPUT -j DROP

答え1

問題がまったく存在しないように、問題を解決する方法は次のとおりです。フィルタ/入力に削除ルールを追加する代わりに:

iptables -A INPUT -s 192.0.2.2 -j DROP
iptables -A INPUT -s 198.51.100.10 -i eth0 -j DROP
...

これらの削除ルールを管理するのに役立つ専用のユーザーチェーンを作成します。以下を一度実行してください。

iptables -N onlydrops
iptables -A INPUT -j onlydrops

それから必要なとき:

iptables -A onlydrops -s 192.0.2.2 -j DROP
iptables -A onlydrops -s 198.51.100.10 -i eth0 -j DROP
...

これが完了すると、INPUT の残りのルールセットに影響を与えることなく、単一のコマンドですべてのユーザーチェーンコンテンツを更新できます。真夜中に以下を実行できます。

iptables -F onlydrops

いつものように、順序が重要です。上記は、ユースケースと既存のルールに基づいたカスタマイズの例にすぎません。

答え2

iptablesについて私が理解したように、「-D」コマンドを一度に呼び出すことによってルールグループ(たとえば、すべてのDROPルール)を削除することはできません。

フラッシュ(-F)を使用してチェーン内のすべてのルールを削除できます。
削除(-D)を使用して、チェーンから個々のルールを削除できます。

次の質問と回答は、ルール項目が同じ場合でもこれが問題になることを示しています。
https://stackoverflow.com/questions/25055121/can-i-remove-multiple-matching-rules-with-the-iptables-delete-command

iptabelsのマニュアルページに次のように言及されているようです。

選択したチェーンから1つ以上のルールを削除します。

誤解を招く事があります。一度の呼び出しで複数のルールを削除することはできませんiptables -D。しかし、これが可能であることを知らない状況があるかもしれません。

更新:DNSが「-D」パラメータを介して複数のルールを削除できることを示すABの説明を参照してください。これは、DNS名が複数のIPで解決される状況です。

答え3

iptablesルール定義に改行文字がない場合は、次のことができるはずです。

iptables-save -t filter | grep -vxe '-A INPUT .*-j DROP' | iptables-restore

-A INPUT出力から始まり終わるルールを削除します。-j DROPiptables-save


1 しかし、このようにしても出力をiptables-restore処理できないことがわかりましたがiptables-save、これはバグだと思います。

関連情報