問題なく機能する最適なソリューションは次のようになります。
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% 削除し、他の行はそのままにしておきます。このソリューションは、過去 2 か月間、1 日あたり約 100 のルールの変更で機能します - 問題はありません。
同じコマンドを実行しますが、「-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
更新
特定のテーブル (nat など) を使用する場合は、それを削除コマンドに追加する必要があります (コメントについては @ThorSummoner に感謝します)
sudo iptables -t nat -D PREROUTING 1
最初に、次のコマンドですべての iptables ルールを一覧表示します:
iptables -S
次のようにリストされます:
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
次に、目的の行をコピーし、 -A
を置き換えるだけです -D
で それを削除するには:
iptables -D XYZ -p ...