web-dev-qa-db-ja.com

Iptablesから特定のルールを削除するにはどうすればいいですか?

私はそれぞれポート8006と8007で特別なHTTPとHTTPSサービスをホストしています。私はiptablesを使ってサーバーを「起動」します。つまり、着信HTTPポートとHTTPSポートをルーティングするには、

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8006 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 8007 -j ACCEPT
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8006 
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8007  
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 8006
iptables -A OUTPUT -t nat -d 127.0.0.1 -p tcp --dport 443 -j REDIRECT --to-ports 8007 

これは魅力的です。しかし私は私のサーバーを再び無効にする別のスクリプトを作成したいと思います。つまり、iptablesを上記の行を実行する前の状態に復元します。しかし、これらの規則を削除するための構文を理解するのは困難です。うまくいくように思われる唯一のことは完全なフラッシュです:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

しかし、それは他のiptablesルールも削除しますが、これは望ましくないことです。

288
Jeroen

同じコマンドを実行しますが、 " - A"を " - D"に置き換えます。例えば:

iptables -A ...

になる

iptables -D ...
411
Eli Rosencruft

ルールの番号( --line-numbers )を使うこともできます。

iptables -L INPUT --line-numbers

出力例

Chain INPUT (policy ACCEPT) 
    num  target prot opt source destination
    1    ACCEPT     udp  --  anywhere  anywhere             udp dpt:domain 
    2    ACCEPT     tcp  --  anywhere  anywhere             tcp dpt:domain 
    3    ACCEPT     udp  --  anywhere  anywhere             udp dpt:bootps 
    4    ACCEPT     tcp  --  anywhere  anywhere             tcp dpt:bootps

あなたが2番目のルールを削除したいのであれば:

iptables -D INPUT 2

更新

あなたが(d)特定のテーブル(例えばnat)を使うなら、あなたはそれを削除コマンドに追加しなければなりません(コメントのためにthxを@ThorSummonerに)

Sudo iptables -t nat -D PREROUTING 1
398
domi27

何の問題もなく私のために働く最良の解決策はこのように見えます:
1。コメント付きで一時的なルールを追加します。

comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION

2.ルールが追加され、それを削除したい場合(またはこのコメントが付いているものすべて)、

iptables-save | grep -v "${comment}" | iptables-restore

そのため、$ commentに一致するすべてのルールを100%削除し、他の行はそのまま残します。このソリューションは、1日あたり約100のルール変更で、過去2か月間有効です - 問題ありません。

29
ETech

このコマンドで最初にすべてのiptablesルールをリストします。

iptables -S

それはリストします:

-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

それから希望する行をコピーし、それを削除するために-A-Dに置き換えるだけです。

iptables -D XYZ -p ...
4
Wladdy Lopez

-Dコマンドを使用してください、これはmanページがそれを説明する方法です:

-D, --delete chain rule-specification
-D, --delete chain rulenum
    Delete  one  or more rules from the selected chain.  
    There are two versions of this command: 
    the rule can be specified as a number in the chain (starting at 1 for the first rule) or a rule to match.

理解してください このコマンドは、他のすべてのコマンド(-A-I)と同様に特定のテーブルに対して機能します。デフォルトのテーブル(filter table)で作業していない場合は、-t TABLENAMEを使用してそのターゲットテーブルを指定してください。

一致するルールを削除する

iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

注:これは一致した最初のルールだけを削除します。たくさんのルールが一致した場合(これはiptablesで起こる可能性があります)、これを数回実行します。

番号として指定されたルールを削除する

iptables -D INPUT 2

数を数える以外に、--line-numberパラメータで行番号をリストすることができます、例えば:

iptables -t nat -nL --line-number
2
cizixs

NAT rulesを削除したい場合は、

以下のコマンドを使用して、追加されたIPテーブルをリストしてください。

# Sudo iptables -L -t nat -v

Chain PREROUTING (policy ACCEPT 18 packets, 1382 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    7   420 DNAT       tcp  --  any    any     anywhere             saltmaster           tcp dpt:http to:172.31.5.207:80
    0     0 DNAT       tcp  --  eth0   any     anywhere             anywhere             tcp dpt:http to:172.31.5.207:8080

IPテーブルからnatルールを削除したい場合は、以下のコマンドを実行してください。

# Sudo iptables -F -t nat -v

Flushing chain `PREROUTING'
Flushing chain `INPUT'
Flushing chain `OUTPUT'
Flushing chain `POSTROUTING'

それから、あなたはそれを確認することができます、

# Sudo iptables -L -t nat -v
1
lakshmikandan