我目前正在尝试在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表?
nat表仅与连接的第一个数据包进行协商。检查this response