web-dev-qa-db-ja.com

iptablesチェーンとそのすべてのルールを削除する

次のような多くのルールがチェーンに追加されています。

> :i_XXXXX_i - [0:0]
> -A INPUT -s 282.202.203.83/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.62.253/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.60.62/32 -j i_XXXXX_i 
> -A INPUT -s 224.93.27.235/32 -j i_XXXXX_i 
> -A OUTPUT -d 282.202.203.83/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.62.253/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.60.62/32 -j i_XXXXX_i 
> -A OUTPUT -d 224.93.27.235/32 -j i_XXXXX_i

私がこのチェーンを削除しようとすると:

iptables -X XXXX

しかし、(前にiptables -F XXXXXを試しました)のようなエラーが発生しました:

iptables:リンクが多すぎます。

一度のコマンドでチェーンを削除する簡単な方法はありますか?

33
timy

'-j CHAINTODELETE'を含むルールがチェーンを参照している場合は、チェーンを削除できません。チェーン(リンク)を参照しているものを見つけ、それを削除します。また、フラッシュして殺します。

-F、-flush [チェーン]

選択したチェーンをフラッシュします(何も指定されていない場合は、テーブル内のすべてのチェーン)。これは、すべてのルールを1つずつ削除することと同じです。

-X、-delete-chain [chain]

指定されたオプションのユーザー定義チェーンを削除します。 チェーンへの参照があってはなりません。ある場合、チェーンを削除する前に参照ルールを削除または置き換える必要があります。チェーンは空である必要があります。つまり、ルールが含まれていません。引数が指定されていない場合は、テーブル内のすべての非組み込みチェーンを削除しようとします。

41
Jeff Ferland

これはトピックから外れている可能性がありますが、この投稿を見つけた後に私がしたことです!一部のユースケースでは、iptables -Dオプションが役立つ場合があります。 -Aを使用してプログラムで追加された参照ルールをクリアできるため(追加方法を正確に知っている場合)。

例えば

    iptables -N MYCHAIN
    iptables -A INPUT -i interface -j MYCHAIN
    iptables -A MYCHAIN -j ACCEPT

で逆にすることができます

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN
13
Att Righ

2つのステップが必要ですが、これはoneコマンドで行います。

ファイルを作成し、その中に配置します。

# Empty the entire filter table
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

ファイルを「clear-all-rules」として保存します。次に、次のコマンドを実行します。

iptables-restore < clear-all-rules

これで、1つのコマンドでいつでもクリアできます。

9
Avery Payne

これが代替案です。 1つのコマンドではなく3つのコマンドが含まれますが、運が良ければ機能するはずです。

iptablesルールセットをファイルにダンプします。

iptables-save > /tmp/iptables.txt

問題のチェーンのすべての使用(およびその参照)を削除します。

sed -i '/i_XXXXX_i/d' /tmp/iptables.txt

次に、ルールセットをリロードします。

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt
6
Steven Monday

Iptables manファイルにはオプション-Sがあります

S、--list-rules [chain]選択したチェーンのすべてのルールを出力します。チェーンが選択されていない場合、すべてのチェーンはiptables-saveのように出力されます。他のすべてのiptablesコマンドと同様に、指定したテーブルに適用されます(フィルターがデフォルトです)。

iptables -S | grep <CHAINNAMEHERE>を使用する。例えば:

root @ root:〜#iptables -S | grep TRAFFICLOG

-Nトラフィックログ

-Aフォワード-i eth0 -jトラフィックログ

その後、テーブルからのチェーンの削除をブロックしているルールを確認できます。各ルールを確認します(iptables -N <CHAINNAMEHERE>を除く)。-Dオプションを使用してルールを削除します

-D、--delete chain rulenum選択したチェーンから1つ以上のルールを削除します。このコマンドには2つのバージョンがあります。ルールは、チェーン内の番号(最初のルールは1から開始)または一致するルールとして指定できます。

たとえば、iptables -D FORWARD -i eth0 -j TRAFFICLOGです。チェーンの各ルールを削除したら、-Fオプションiptables -F <CHAINNAMEHERE>を使用してチェーンをフラッシュします。

-F、--flush [chain]選択したチェーン(指定されていない場合はテーブル内のすべてのチェーン)をフラッシュします。これは、すべてのルールを1つずつ削除することと同じです。

次に、-Xオプション、iptables -X <CHAINNAMEHERE>を使用してチェーンを削除します

-X、--delete-chain [chain]指定されたオプションのユーザー定義チェーンを削除します。チェーンへの参照があってはなりません。存在する場合は、チェーンを削除する前に、参照ルールを削除または置き換える必要があります。チェーンは空である必要があります。つまり、ルールが含まれていません。引数が指定されていない場合、テーブル内のすべての非組み込みチェーンを削除しようとします。

Iptablesは複雑なツールセットであるため、理想的なチュートリアルが必要です。 www.iptables.info で試してみることができます

1
Jacob Bryan

これらの行に沿ったものは、iptablesをまったく停止することなく、それらすべてを1行で取得します。

for chain in `iptables -L |grep i_XXXXX_i|awk '{ print $2 }'`; do iptables -X $chain; done
0
flickerfly

/etc/iptables/rules.v4にあるルールファイルを編集することで、ルールとチェーンを削除できることがわかりました。このファイルで不要なチェーンを削除してからiptablesをリロードすると、iptables -Lを実行してもチェーンが表示されなくなります。

0
Jay Phillips

これはチェーンを吐き出して削除します

for i in $(iptables -S | awk '{print $2}' | uniq ); do iptables -F $i && iptables -Z $i && iptables -X $i  ; done
0
user1007727