¿Cómo entender por qué el paquete fue considerado NO VÁLIDO por `iptables`?

11

Configuré algunas iptablesreglas para que registre y descarte los paquetes que NO SON VÁLIDOS ( --state INVALID). Leyendo los registros, ¿cómo puedo entender por qué el paquete se consideró no válido? Por ejemplo, lo siguiente:

Nov 29 22:59:13 htpc-router kernel: [6550193.790402] ::IPT::DROP:: IN=ppp0 OUT= MAC= SRC=31.13.72.7 DST=136.169.151.82 LEN=40 TOS=0x00 PREC=0x00 TTL=242 ID=5104 DF PROTO=TCP SPT=80 DPT=61597 WINDOW=0 RES=0x00 ACK RST URGP=0
mbaitoff
fuente

Respuestas:

25

Los paquetes pueden estar en varios estados cuando se utiliza la inspección de paquetes con estado.

  • Nuevo : el paquete no forma parte de ningún flujo o socket conocido y los indicadores TCP tienen el bit SYN activado.
  • Establecido : el paquete coincide con un flujo o socket rastreado CONNTRACKy tiene indicadores TCP. Después de completar el protocolo de enlace TCP inicial, el bit SYN debe estar desactivado para que un paquete esté en estado establecido.
  • Relacionado : el paquete no coincide con ningún flujo o socket conocido, pero el paquete se espera porque hay un socket existente que lo predica (ejemplos de esto son datos en el puerto 20 cuando hay una sesión FTP existente en el puerto 21, o datos UDP para una conexión SIP existente en el puerto TCP 5060). Esto requiere un ALG asociado.
  • No válido : si ninguno de los estados anteriores se aplica, el paquete está en estado INVALID. Esto podría deberse a varios tipos de sondas de red ocultas, o podría significar que se está quedando sin CONNTRACKentradas (que también debería ver en sus registros). O simplemente puede ser completamente benigno.

En su caso, el paquete que usted cita muestra que los indicadores TCP ACKy RST, y que el puerto de origen es 80. Lo que eso significa es que el servidor web en 31.13.72.7(que resulta ser Facebook) le envió un paquete de reinicio. Es completamente imposible decir por qué sin ver los paquetes que vinieron antes (si los hay). Pero lo más probable es que le esté enviando un reinicio por la misma razón que su computadora cree que no es válido.

bahamat
fuente
Entonces, ¿no hay forma de pedirle a un kernel (o iptables) que agregue una especie de "firma" a un paquete que contenga la razón de que sea inválido?
mbaitoff
2
Por definición, no. Inválido significa que no coincide con ningún estado conocido. En otras palabras, ese es el núcleo que dice "No sé por qué recibí este paquete".
bahamat
Para la depuración de paquetes INVÁLIDOS específicos, mirarlos en Wireshark desde un volcado podría funcionar ... He visto paquetes con campos SACK (en realidad, el firewall cambia los números de secuencia normales y los de la opción SACK no lo hacen, lo que resulta en SACK valores no válidos) que fue roto por un cortafuegos que se cayó como no válido ...
Gert van den Berg