
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 iptables
funcionar - 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-reset
nas cadeias de entrada e saída ou executar tcpkill
por alguns segundos. Isso é difícil e, em quase todos os casos, você deseja interromper a conexão com a solução 1).