En alguna ocasión me he encontrado con la necesidad de cortar conexiones establecidas en Linux, dado que no podía reiniciar el servicio y no tenía control sobre el cliente en el otro lado.

Existen dos opciones de hacerlo

Cortar conexiones establecidas con iptables

Esta es la opción que suelo utilizar. No es la más elegante, pero funciona en un plazo de 1 minuto aproximadamente.

root@servidor:~# netstat -na |grep ip_de_cliente
tcp 0 37 ip_del_servidor:1234 ip_del_cliente:41427 ESTABLISHED

En este caso, pongamos que la ip del cliente es 1.2.3.4. Si queremos cortar la conexion en estado ESTABLISHED que vemos en netstat, aplicaremos la siguiente regla de iptables

root@servidor:~# iptables -A INPUT -s 1.2.3.4 -m state --state ESTABLISHED,RELATED -j DROP

Cortar conexiones establecidas con tcpkill

tcpkill es una herramienta que viene dentro del paquete de debian/ubuntu dsniff

Con ella podremos matar conexiones de manera bastante selectiva, por ejemplo:

Para matar todas las conexiones establecidas a un puerto sin reiniciar el servicio

tcpkill -i eth0 port 12345

 

Para matar todas las conexiones establecidas desde o hacia una ip concreta

tcpkill -i eth0 host 1.2.3.4
tcpkill -i eth0 host fqdn.dominio.com

 

La sintaxis de tcpkill está basada en las expresiones propias de tcpdump, por ejemplo

Para matar todas las conexiones establecidas entre una ip de tu equipo y dos ips remotas concretas

tcpkill -i eth0 ip host ip_de_tu_equipo and host 1.2.3.4.5 or host 5.6.7.8

tcpkill realmente se pone a escuchar y dropea los paquetes, no es que termine las conexiones de una manera mágica, pero el efecto que conseguimos es el mismo. Además, usar tcpkill puede suponer un problema en la red en la que lo emplees si hay detectores de sniffers. Tenlo presente para no hacer saltar falsas alarmas.

Igual que indicaba en el primer método de cortar conexiones establecidas mediante iptables, recuerda poner una regla que prevenga futuras conexiones o en cuanto termines el comando el cliente puede volver a iniciar la conexión a tu servicio.

cortar conexiones establecidas en linux