
特定の条件下で特定の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 DROP
iptables-save
1 しかし、このようにしても出力をiptables-restore
処理できないことがわかりましたがiptables-save
、これはバグだと思います。