Descartar fragmentos de IP de un determinado protocolo.

2

Cuando conntrack está activo, la pila de iptables nunca ve un paquete IP fragmentado, solo el que se vuelve a ensamblar ( fuente ), entonces el -f prueba nunca coincide.

Si quiero bloquear algún fragmento podría establecer ipfrag_high_thresh o ipfrag_time a 0 ( fuente ), pero eso dejaría caer cualquier tipo de fragmento. ¿Hay algo que pueda hacer si quiero eliminar fragmentos de un determinado protocolo IP?

Lorenzo Pistone
fuente

Respuestas:

2

Veo dos formas de lograr tu objetivo, dependiendo de tus necesidades.

Puede dejar que el reensamblaje siga su curso, luego, después de un reensamblado exitoso, deje caer todo el paquete. Esto funciona solo si el paquete reensamblado está sobre la interfaz MTU (de lo contrario, no podrá distinguir entre paquetes reensamblados y paquetes "normales"). Si los paquetes no se pueden volver a ensamblar con éxito, se eliminarán de todos modos, pero con una mayor sobrecarga de CPU.

La otra forma es modificar la fuente, y hacer nf_defrag_ipv4 ignore los paquetes de los protocolos que desea manejar directamente. Una mirada rápida sugiere que esto debería funcionar, ya que ya hay una opción ( IP_NODEFRAG ) disponible para sockets RAW que le permite omitir el código de reensamblado.

Para ser honesto, a mí también me encantaría tener más control sobre esta parte del filtrado, así que intentaré conseguir un parche para remediar la situación

Matyas Koszik
fuente
1
Creo que deberías estar mirando tc filtrado de entrada. Puedes hacer cosas antes de que los paquetes lleguen a los ganchos del filtro de red.
Lorenzo Pistone
1
Este es un enfoque interesante, pero no puedo trasladar mi conjunto de reglas a tc para evitar la desfragmentación obligatoria; después de todo, el filtrado de estado es una parte fundamental de mi configuración. También utilizo otras funciones de netfilter para clasificar más los paquetes, no disponibles en tc. Por cierto, ¿resolviste tu problema original? ¿Usaste tc para eso?
Matyas Koszik
solía tc, de hecho. También hay mejoras mínimas de rendimiento cuando se filtra temprano en tc, ver meat.pisto.horse/2014/10/…
Lorenzo Pistone
1
Si solo desea eliminar paquetes basados ​​en una clasificación simple a velocidades extremadamente altas, debería echar un vistazo a netmap - Puede manejar una interfaz de 10 gbits llena de paquetes de tamaño mínimo con facilidad en un solo núcleo de una PC moderna.
Matyas Koszik
1

Me pregunto si puede usar la tabla "sin procesar" de netfilter, que aparece antes de la mayoría de los enlaces de seguimiento de conexión. Tiene un objetivo "NOTRACK" que puede usar para eximir ciertos paquetes de Conntrack, o tal vez el -f condición en sí trabajaría con --table raw.

Steven K
fuente
Mientras conntrack está cargado, -f Siempre es falso, porque el paquete siempre se reconstruye.
Lorenzo Pistone