Reglas de iptables para bloquear paquetes específicos

Reglas de iptables para bloquear paquetes específicos

Estoy usando la siguiente regla de iptables:

iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH,ACK -m length --length 52 -m state --state ESTABLISHED -j DROP

Hace su trabajo de bloquear el paquete no deseado de mi servidor, pero también bloquea cosas que no deberían.

Aquí están los paquetes capturados con Wirehark:

unwanted packet:source=192.168.0.100    destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62401→38111 [PSH, ACK] Seq=15 Ack=19 Win=65536 Len=12

needed packet:source=192.168.0.100  destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62433→38111 [PSH, ACK] Seq=344 Ack=37855 Win=62825 Len=12

Mi pregunta es cómo modificar la regla para permitir el paquete necesario y bloquear el no deseado.

Respuesta1

No puede hacer esto en la capa del firewall (bueno, puede hacerlo, pero no logrará lo que cree ni lo que desea). El segundo paquete (que desea) es parte del mismo flujo TCP que el primer paquete (que no desea), y TCP es un mecanismo de entrega confiable. Eso significa que el sistema operativo sabe si un paquete en medio del flujo ha desaparecido (en virtud del número de secuencia en el encabezado de cada paquete, consulte, por ejemplo).http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structurepara más información).

Si filtra un paquete en medio de una secuencia, el kernel simplemente seguirá avisando al otro extremo que falta un paquete, y el otro extremo seguirá retransmitiéndolo (comportamiento que ya está viendo, tenga en cuenta los [TCP Retransmission]marcadores de arriba). Si continúa bloqueando esas retransmisiones, la transmisión se desincronizará, se cortará la conexión y no se procesará nada en la transmisión.

Tendrás que hacer esto en la capa de aplicación.

Editarun intercambio de comentarios entre nosotros dos (muchos de los cuales han sido eliminados desde entonces) ha dejado en claro que es posible que la pregunta no contenga todos los detalles que debería. Le recomiendo que cierre esta pregunta (acepte mi respuesta o elimine toda la pregunta) y escriba una nueva en la que exponga con considerable detalle qué sucede exactamente ahora, cómo sucede y qué desea lograr.

Todo lo que puedo decir ahora, con cierta confianza, es queno se puede utilizar iptablespara cortar un solo paquete de la mitad de una secuencia TCP y esperar que la aplicación receptora procese correctamente el resto de esa secuencia.

información relacionada