我目前正在尝试使用xubuntu网关上的iptables了解高级设置。我发现可以使用u32模块过滤数据包中的特定字节值。 例如,我可以使用下一个命令检测通过网关发送的TLS 1.2客户端Hello消息
sudo iptables -I FORWARD 1 \
-p tcp \! -f --dport 443 \
-m state --state ESTABLISHED -m u32 --u32 \
"0>>22&0x3C@ 12>>26&0x3C@ 0 & 0xFFFFFF00=0x16030100 && \
0>>22&0x3C@ 12>>26&0x3C@ 2 & 0xFF=0x01 && \
0>>22&0x3C@ 12>>26&0x3C@ 7 & 0xFFFF=0x0303" \
-j LOG --log-prefix "TLS 1.2 Client Hello detected: "
但是,有时最好使用PREROUTING表(例如,对于不应转发的消息)。但是,如果我尝试
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -m u32 --u32 \
"0>>22&0x3C@ 12>>26&0x3C@ 0 & 0xFFFFFF00=0x16030100 && \
0>>22&0x3C@ 12>>26&0x3C@ 2 & 0xFF=0x01 && \
0>>22&0x3C@ 12>>26&0x3C@ 7 & 0xFFFF=0x0303"
-j LOG --log-prefix "tls 1.2 detected"
虽然在Wireshark中可以看到客户端问候消息,但我没有看到日志文件中出现任何新行。 有谁知道我做错了什么或为什么u32没有使用PREROUTING表?