私はそれぞれポート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ルールも削除しますが、これは望ましくないことです。
同じコマンドを実行しますが、 " - A"を " - D"に置き換えます。例えば:
iptables -A ...
になる
iptables -D ...
ルールの番号( --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
何の問題もなく私のために働く最良の解決策はこのように見えます:
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か月間有効です - 問題ありません。
このコマンドで最初にすべてのiptablesルールをリストします。
iptables -S
それはリストします:
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
それから希望する行をコピーし、それを削除するために-A
を-D
に置き換えるだけです。
iptables -D XYZ -p ...
-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
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