Estou procurando pacotes TURN/STUN vindos de uma porta 443. De acordo com o TURN RFC, os bytes 46 a 49 são o cookie mágico do pacote TURN '2112a442'.Aquié a captura de tela do wireshark onde descobri que o cookie STUN era de 46 a 49
Estou usando -m u32 --u32 "46=0x2112A442"
, mas não consigo filtrá-los.
Aqui está minha regra completa do iptable
-A PREROUTING -i eth0 -p tcp --dport 443 -m u32 --u32 "46=0x2112A442" -j REDIRECT --to-port 3478
Alguma ideia do que posso estar fazendo de errado?
Responder1
Os deslocamentos do módulo iptables u32 são referenciados ao pacote menos o wrapper ethernet (menos o MAC de origem e destino, 6 bytes cada, e o tipo ether, 2 bytes. Portanto, seu deslocamento wireshark de 46 precisa ser ajustado em 14 e deve ser 32 .
Agora, para uma verificação de integridade, encontre o tipo de byte de serviço, que conhecemos da área u32 deas páginas man para iptables-extensionsestá no deslocamento 9 e também sabemos que é 0x11 (17) para UDP. Está no byte 0x17 (23) da captura de tela do wireshark. Contando a partir daí, também obtemos 32 como o deslocamento que você deveria usar.
EDIT 1: Como o protocolo é UDP, você também precisa ajustar essa parte do seu comando iptables. Então:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 443 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478
EDIT 2: Na captura de tela do exemplo do wireshark, a porta de destino é 5004, não 443. Portanto, o comando iptables ainda não funcionará para o seu exemplo de pacote específico. Talvez isto:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 5004 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478