
Estoy intentando crear reglas de iptables para redirigir todo el tráfico destinado al puerto 1986 al puerto 9 para provocar una "conexión rechazada" usando la siguiente regla:
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1986 -j DNAT --to-destination :9
Esto funciona muy bien para nuevas conexiones, pero el problema es que las conexiones establecidas parecen saltarse esta regla y no son rechazadas.
Intenté agregar una NOTRACK
regla en la tabla sin formato para intentar evitar el seguimiento del estado de la conexión, pero esto no tiene ningún efecto:
iptables -t raw -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j NOTRACK
Agregar estado a la regla nat tampoco funciona:
iptables -t nat -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j DNAT --to-destination :9
¿Cómo puedo usar iptables para provocar un error de "conexión rechazada" para paquetes enviados en conexiones establecidas?
Respuesta1
La DNAT
regla crea una entrada en la tabla de seguimiento cuando la conexión se establece con un protocolo de enlace de tres vías TCP.
La notrack
regla parece deshabilitar la creación de nuevas entradas de conntrack. Sin embargo, no impide el uso de entradas de conntrack existentes.
Como la conexión ya está establecida, ya hay una entrada en la tabla conntrack y el kernel la usa para reenviar el tráfico.
Debe utilizar conntrack
la herramienta para eliminar los flujos de la tabla conntrack. Por ejemplo:
conntrack -D -s 192.168.1.10 -d 192.168.100.20 -p tcp --dport 1986
Después de emitir este comando, la conexión se vuelve a agregar a conntrack usando las nuevas reglas DNAT en iptables. Entonces el nuevo servidor de destino rechazará la conexión. No estoy seguro de qué enviará exactamente el nuevo servidor de destino, tal vez TCP RST.