为什么 u32 和 PRERouting 的组合在 iptables 中不起作用?
Why does a combination of u32 and PRErouting not work within iptables?
我目前正在尝试了解在 xubuntu 网关上使用 iptables 的高级设置。我发现可以使用 u32 模块过滤数据包中的特定字节值。
例如,我可以使用下一个命令
检测到通过网关的 TLS 1.2 Client 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 table(例如,对于不应转发的邮件)。但是如果我尝试
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 table?
nat table 仅在连接的第一个数据包中查询。检查 this response
我目前正在尝试了解在 xubuntu 网关上使用 iptables 的高级设置。我发现可以使用 u32 模块过滤数据包中的特定字节值。 例如,我可以使用下一个命令
检测到通过网关的 TLS 1.2 Client 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 table(例如,对于不应转发的邮件)。但是如果我尝试
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 table?
nat table 仅在连接的第一个数据包中查询。检查 this response