¿Cómo puedo redirigir conexiones establecidas con iptables?

¿Cómo puedo redirigir conexiones establecidas con iptables?

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 NOTRACKregla 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 DNATregla 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 notrackregla 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 conntrackla 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.

información relacionada