使用 iptables TPROXY 代替 REDIRECT

使用 iptables TPROXY 代替 REDIRECT

我正在运行Debian 8。我正在尝试拦截所有数据包,目前正在使用iptables

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 5000

这似乎有效,但它消除了获取数据包上的原始目标端口的可能性。

我已经阅读了TPROXY应该是可行的方法,因为它没有使用NAT

我尝试REDIRECT用这个来替换:

iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 5000

但是这样做的时候我并没有拦截我的服务上的任何数据包......

答案1

内核树中的 Documentation/networking/tproxy.txt 提到以下内容:

“TPROXY”目标提供了类似的功能,而无需依赖 NAT。只需将这样的规则添加到上面的 iptables 规则集中:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
  --tproxy-mark 0x1/0x1 --on-port 50080

请注意,为了使其正常工作,您必须修改代理以启用 (SOL_IP, IP_TRANSPARENT) 来监听套接字。

您是否在应用程序中的监听套接字上设置了上述选项?

还请注意,上面的文档提到需要添加适当的 IP 路由规则和表以便在本地传送数据包。

相关内容