Правило соответствия iptable для трафика STUN/TURN

Правило соответствия iptable для трафика STUN/TURN

Я ищу пакеты TURN/STUN, поступающие на порт 443. Согласно TURN RFC, байты 46–49 — это волшебные куки-файлы пакета TURN «2112a442».Здесьэто скриншот из Wireshark, где я обнаружил STUN cookie с 46 по 49

Я пользуюсь -m u32 --u32 "46=0x2112A442" , но не могу их фильтровать.

Вот мое полное правило iptable

-A PREROUTING -i eth0 -p tcp --dport 443 -m u32 --u32 "46=0x2112A442" -j REDIRECT --to-port 3478

Есть идеи, что я могу делать неправильно?

решение1

Смещения модуля iptables u32 ссылаются на пакет за вычетом оболочки Ethernet (за вычетом MAC-адресов источника и назначения, по 6 байт каждый, и типа Ether, 2 байта). Поэтому смещение Wireshark 46 необходимо скорректировать на 14 и оно должно быть равно 32.

Теперь, для проверки работоспособности, найдем тип служебного байта, который мы знаем из области u32страницы руководства для iptables-extensionsнаходится на смещении 9, и мы также знаем, что это 0x11 (17) для UDP. Это байт 0x17 (23) вашего скриншота Wireshark. Считая оттуда, мы также получаем 32 в качестве смещения, которое вы должны использовать.

EDIT 1: Поскольку протокол — UDP, вам также нужно настроить эту часть вашей команды iptables. Итак:

sudo iptables -A PREROUTING -i eth0 -p udp --dport 443 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478

EDIT 2: В вашем примере снимка экрана Wireshark порт назначения — 5004, а не 443. Поэтому команда iptables все равно не будет работать для вашего конкретного примера пакета. Возможно, это:

sudo iptables -A PREROUTING -i eth0 -p udp --dport 5004 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478

Связанный контент