Nejlepší řešení, které mi bez problémů funguje, vypadá takto:
1. Přidejte dočasné pravidlo s komentářem:
comment=$(cat /proc/sys/kernel/random/uuid | sed 's/\-//g')
iptables -A ..... -m comment --comment "${comment}" -j REQUIRED_ACTION
2. Když je pravidlo přidáno a chcete jej odstranit (nebo vše s tímto komentářem), proveďte:
iptables-save | grep -v "${comment}" | iptables-restore
Takže 100% smažete všechna pravidla, která odpovídají $komentáři a ostatní řádky necháte nedotčené. Toto řešení funguje poslední 2 měsíce s přibližně 100 změnami pravidel za den – žádné problémy. Doufám, že to pomůže
Proveďte stejné příkazy, ale nahraďte "-A" za "-D". Například:
iptables -A ...
se stává
iptables -D ...
Můžete také použít číslo pravidla (--line-numbers ):
iptables -L INPUT --line-numbers
Příklad výstupu:
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
Takže pokud chcete smazat druhé pravidlo:
iptables -D INPUT 2
Aktualizovat
Pokud používáte(d) konkrétní tabulku (např. nat), musíte ji přidat do příkazu delete (thx @ThorSummoner za komentář)
sudo iptables -t nat -D PREROUTING 1
Nejprve vypište všechna pravidla iptables pomocí tohoto příkazu:
iptables -S
uvádí se jako:
-A XYZ -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Poté zkopírujte požadovaný řádek a pouze nahraďte -A
s -D
pro smazání:
iptables -D XYZ -p ...