質問: 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ルールも削除しますが、これは望ましくないことです。
回答: ルールの番号( --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