问题:我当前正在将端口 80 请求重定向到端口 1000 上的另一个系统。
这样做是这样的:
iptables -t nat -A PREROUTING ! -s 172.20.1.2 -p tcp --dport 80 -j DNAT --to-destination 172.20.1.2:1000
但是,当添加-m string --algo kmp --string 'MSIE'
到包含 MSIE 的过滤数据包时,由于预路由仅评估第一个 SYN 数据包(因此缺少带有我尝试评估的标头的 HTTP 数据包),它们将被忽略
被打破的规则:
iptables -t nat -A PREROUTING ! -s 172.20.1.2 -p tcp --dport 80 -j DNAT --to-destination 172.20.1.2:1000 --algo kmp -m string --string 'MSIE'
我的问题:如何评估 HTTP 标头并重定向数据包或在发生字符串匹配时触发系统事件?
答案1
引用手册页:
DNAT(特定于 IPv4)
该目标仅在 nat 表、PREROUTING 和 OUTPUT 链以及仅从这些链调用的用户定义链中有效。
换句话说:你输了,这是不可能的。这是显而易见的,因为您无法在连接中间更改目标地址(而不在新目的地修复目标地址)。
你想要应用层,你就需要一个应用程序。将所有数据包重定向到(透明)代理,该代理可以决定如何处理连接。