为什么u32和PRErouting的组合在iptables中不起作用?

问题描述 投票:1回答:1

我目前正在尝试在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表?

iptables
1个回答
1
投票

nat表仅与连接的第一个数据包进行协商。检查this response

© www.soinside.com 2019 - 2024. All rights reserved.