我正在运行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 路由规则和表以便在本地传送数据包。