
¿Existe alguna forma de actualizar las reglas de iptables para bloquear una conexión sin necesidad de reiniciarla?
Aquí hay un ejemplo del comportamiento que quiero 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.
Me gustaría saber si hay alguna manera de bloquear el comando ping sin necesidad de reiniciarlo.
Respuesta1
1) Lo que solicita es la forma más sencilla de iptables
trabajar: bloquear todo el tráfico a un destino independientemente del estado de la conexión, de modo que las conexiones existentes expiren. Entonces en tu ejemplo
iptables -I OUTPUT -d 8.8.8.8 -j DROP
bloqueará inmediatamente los paquetes UDP (DNS), ICMP (ping) y TCP que lleguen a 8.8.8.8. Entonces esa parece ser tu respuesta. Si obtiene el comportamiento que describe, publique la línea de comando de iptables que está utilizando.
2) Si desea que el otro comportamiento mantenga las conexiones existentes hasta que se reinicie el proceso, puede:
iptables -I OUTPUT -d 8.8.8.8 -m state --state NEW -j DROP
o
iptables -I OUTPUT -d 8.8.8.8 -p tcp --syn -j REJECT
3) En el caso avanzado en el que desea cerrar una conexión TCP establecida lo antes posible en lugar de bloquearla y dejar que expire el tiempo de espera, tal vez podría basarse en algo -j REJECT --reject-with tcp-reset
en las cadenas de entrada y salida o ejecutarla tcpkill
durante unos segundos. Esto es difícil y en casi todos los casos querrás romper la conexión con la solución 1).