As novas regras do iptables afetam apenas o novo processo gerado

As novas regras do iptables afetam apenas o novo processo gerado

Existe uma maneira de atualizar as regras do iptables para bloquear uma conexão sem a necessidade de reiniciá-la?

Aqui está um exemplo do comportamento que quero evitar:

On shell#1: I start a ping command 8.8.8.8
On shell#2: I block ping command with iptables rules.
On shell#1: The ping command is still working and I get replies from 8.8.8.8, 
            but if I end the ping command and I restart it, now it will not work.

Gostaria de saber se existe uma forma de bloquear o comando ping sem a necessidade de reiniciá-lo.

Responder1

1) O que você pede é a maneira mais simples de iptablesfuncionar - bloqueie todo o tráfego para um destino, independentemente do status da conexão, para que as conexões existentes expirem. Então, no seu exemplo

iptables -I OUTPUT -d 8.8.8.8 -j DROP

bloqueará imediatamente pacotes UDP (DNS), ICMP (ping) e TCP que cheguem a 8.8.8.8. Então essa parece ser a sua resposta. Se você estiver obtendo o comportamento descrito, poste a linha de comando do iptables que você está usando.

2) Se você desejasse o outro comportamento, para manter as conexões existentes até que o processo fosse reiniciado, você poderia:

iptables -I OUTPUT -d 8.8.8.8 -m state --state NEW -j DROP

ou

iptables -I OUTPUT -d 8.8.8.8 -p tcp --syn -j REJECT

3) No caso avançado em que você deseja realmente fechar uma conexão TCP estabelecida o mais rápido possível, em vez de bloqueá-la e deixá-la expirar, talvez você possa basear algo -j REJECT --reject-with tcp-resetnas cadeias de entrada e saída ou executar tcpkillpor alguns segundos. Isso é difícil e, em quase todos os casos, você deseja interromper a conexão com a solução 1).

informação relacionada