Estoy buscando paquetes TURN/STUN que lleguen a un puerto 443. Según TURN RFC, los bytes 46 a 49 son la cookie mágica del paquete TURN '2112a442'.Aquíes la captura de pantalla de Wireshark donde encontré que la cookie STUN es del 46 al 49
Los estoy usando -m u32 --u32 "46=0x2112A442"
pero no puedo filtrarlos.
Aquí está mi regla iptable completa.
-A PREROUTING -i eth0 -p tcp --dport 443 -m u32 --u32 "46=0x2112A442" -j REDIRECT --to-port 3478
¿Alguna idea de qué podría estar haciendo mal?
Respuesta1
Las compensaciones del módulo iptables u32 están referenciadas al paquete menos el contenedor de Ethernet (menos la MAC de origen y de destino, 6 bytes cada una, y el tipo de ether, 2 bytes. Por lo tanto, su compensación de Wirehark de 46 debe ajustarse en 14 y debe ser 32 .
Ahora, para una verificación de cordura, busque el tipo de byte de servicio, que conocemos del área u32 delas páginas man para extensiones-iptablesestá en el desplazamiento 9 y también sabemos que es 0x11 (17) para UDP. Está en el byte 0x17 (23) de la captura de pantalla de Wireshark. Contando a partir de ahí, también obtenemos 32 como el desplazamiento que deberías usar.
EDITAR 1: Dado que el protocolo es UDP, también necesita ajustar esa parte de su comando iptables. Entonces:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 443 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478
EDITAR 2: en la captura de pantalla de ejemplo de Wirehark, el puerto de destino es 5004, no 443. Por lo tanto, el comando iptables aún no funcionará para su ejemplo de paquete en particular. Tal vez esto:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 5004 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478