![STUN/TURN 流量的 iptable 匹配规则](https://linux22.com/image/1157373/STUN%2FTURN%20%E6%B5%81%E9%87%8F%E7%9A%84%20iptable%20%E5%8C%B9%E9%85%8D%E8%A7%84%E5%88%99.png)
我正在寻找来自 443 端口的 TURN/STUN 数据包。根据 TURN RFC,字节 46 至 49 是 TURN 数据包 magic cookie“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 模块偏移量参考数据包减去以太网包装器(减去源和目标 MAC,各 6 个字节,以及以太类型,2 个字节)。因此,您的 wireshark 偏移量 46 需要调整 14,应该是 32。
现在,为了进行完整性检查,找到服务字节的类型,我们从iptables-extensions 的手册页偏移量为 9,我们还知道 UDP 的偏移量为 0x11 (17)。它位于您的 wireshark 屏幕截图的字节 0x17 (23)。从那里开始算起,我们还得到 32 作为您应该使用的偏移量。
编辑 1:由于协议是 UDP,您还需要调整 iptables 命令的该部分。因此:
sudo iptables -A PREROUTING -i eth0 -p udp --dport 443 -m u32 --u32 "32=0x2112A442" -j REDIRECT --to-port 3478
编辑 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