Você pode corresponder uma regra para exclusão especificando-a com precisão e usando -D
( --delete
) em vez de -A
. Por exemplo:
iptables -t nat -D POSTROUTING -s 10.10.10.10/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 1.2.3.4
Para fazer isso, correspondendo a um endereço IP específico e não perdendo nenhuma regra devido às condições de corrida, vamos tentar algo assim. Isso excluirá qualquer regra na tabela nat que contenha um determinado endereço IP:
IFS=$'\n'
for rule in 'iptables-save -t nat | grep -w $IP_ADDRESS | sed -e 's/-A/-D/''; do
echo $rule | xargs iptables -t nat
done
Algumas observações sobre isso: usamos grep -w
para garantir que os endereços IP correspondam exatamente e, por exemplo, um determinado endereço que termina em 25
não corresponde a 250
. A transformação de -A
para -D
é feita por sed
no loop. E usamos xargs
para expandir cada regra em parâmetros.