Я ищу пакеты 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