
Por motivos de prueba, me gustaría bloquear paquetes específicos según sus opciones o tipo.
Por ejemplo, en una transacción DHCP DORA, me gustaría bloquear únicamente los paquetes DHCP ACK.
¿Es posible hacer esto usando iptables? Si no, ¿cuáles son las posibilidades?
Respuesta1
Podrías usar el u32
módulo. (Ver elpágina de manual paraiptables-extensions
). No es demasiado fácil de usar, pero debería ser utilizable.
DHCP es un poco difícil de analizar también porque partes de los datos, incluido el tipo de mensaje DHCP, están en las opciones, que pueden estar en orden arbitrario. Aunque es probable que la opción de tipo de mensaje sea la primera.
Las opciones de DHCP comienzan en el desplazamiento 236 en el paquete UDP y los encabezados IP y UDP tienen una longitud de 20+8 bytes. Por lo tanto, estamos interesados en los bytes que comienzan en el desplazamiento 264. Los primeros cuatro bytes deben ser el identificador mágico y los tres siguientes se pueden marcar para la opción de tipo de mensaje. El código de tipo es 0x35
, la longitud es siempre 0x01
y DHCPACK
el valor es 0x05
. (ElEl formato del paquete DHCP se describe, por ejemplo, en tcpipguide.com)
Entonces la expresión para u32
podría ser:
--u32 '268 >> 8 = 0x350105'
Lo que simplemente significa leer 4 bytes en el desplazamiento 268 (como número big-endian), desplazarlos 8 bits hacia la derecha (para mantener los primeros tres bytes) y compararlo con el valor esperado.
También podríamos comprobar el número mágico:
--u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'
Verificar que realmente tenemos un paquete UDP yendo al puerto correcto es más fácil de hacer con iptables
reglas regulares, por lo que usaríamos algo como lo siguiente para hacer coincidir los paquetes DHCP esperados.
iptables -A foo -m udp --dport bootpc -m u32 --u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'
Aunque, como se dijo, las opciones de DHCP pueden estar en cualquier orden, por lo que este no es un método sólido, especialmente si alguien intenta activamente solucionarlo. Pero quizás para probarlo podría servir. Además, asumí que el encabezado IP no contiene ninguna opción.