iptables - ルール番号の代わりにルール/名前に基づいてNATルールを削除します。

iptables - ルール番号の代わりにルール/名前に基づいてNATルールを削除します。

Ubuntu 16サーバーでは、NATルール(-t nat)に関連するいくつかのIptablesルールの変更をスクリプトとして作成する必要があります。 -D [ここではルール]を使用してルールを削除する一般的な方法は、-t識別子では機能しないようです。見つけて持って来なさい。関連する行番号...どのようなアイデアがありますか?

役に立つ場合は、次の規則の目的は、(デフォルトでは)ローカルMySQLデータベースの競合または再起動中にローカルホストと外部トラフィックを1つのサーバーからバックアップにリダイレクトすることです。

私のルール:

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination RMT_IP:3306
iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306

私はあきらめようとしました(効果がありました):

iptables -t nat -D POSTROUTING -j MASQUERADE
iptables -t nat -D PREROUTING -p tcp --dport 3306 -j DNAT --to-destination RMT_IP:3306

--line-numberを使用せずにこのルールを削除する方法はわかりません。

iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306

答え1

-I(挿入)または(追加)を含むルールがある場合は、-Aルール定義を繰り返し-D削除できます。

特定の例では、テーブルチェーンから最初の一致OUTPUTルールnatが削除されます。

iptables -t nat -D OUTPUT -p tcp -o lo --dport 3306 -j DNAT --to-destination RMT_IP:3306

答え2

ルールを簡単にオン/オフしたい場合は、別のチェーンを作成してみてはいかがでしょうか?

iptables -t nat -N MySQLnat
iptables -t nat -A MySQLnat -j DNAT --to-destination RMT_IP:3306

次に、わずかに変更された方法でルールを作成します。

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j MySQLnat
iptables -t nat -I OUTPUT -p tcp -o lo --dport 3306 -j MySQLnat

これで、カスタムチェーンを削除してMySQL関連DNATルールを簡単に削除できます。

iptables -t nat -F MySQLnat

空のチェーンはちょうど空のチェーンに入ったチェーンと同じな-j RETURNので、何もせずに空のチェーンに飛び込んだチェーンを処理し続けます。

(あなたの立場では、-j MASQUERADEPOSTROUTINGチェーンに他の何も依存しないという確信がない限り、POSTROUTINGチェーンから無条件のルールを削除することに注意してください。)

MySQL DNATが再び必要な場合は、チェーンの内容を再度入れてください。

iptables -t nat -A MySQLnat -j DNAT --to-destination RMT_IP:3306

関連情報