用iptable将一个端口的流量重定向到一个链?

用iptable将一个端口的流量重定向到一个链?

在树莓派上,我安装了privoxy和socks代理软件。

我想将所有流量重定向到链 REDSOCKS_FILTER。所有80端口的tcp协议的流量都会经过privoxy,然后到达REDSOCKS_FILTER链。在REDSOCKS_FILTER链中,我将丢弃一些本地IP地址,最后处理后的流量进入socks代理软件。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8118
iptables -t nat -A OUTPUT -p tcp --dport 8118  -j REDSOCKS_FILTER
iptables -t nat -A PREROUTING -p tcp -j REDSOCKS_FILTER

我尝试写这个ase,但是经过privoxy的端口80的流量无法到达REDSOCKS_FILTER链。但如果我输入

iptables -t nat -A OUTPUT -p tcp --dport 8118  -j REDSOCKS_FILTER

从我的测试看来,它不起作用,但结果仍然相同。我对自己犯了什么错误感到困惑。

答案1

我假设REDSOCKS_FILTER是在filter表中iptables,而不是在nat表中?您无法从一个表跳转到另一个表,因为不同的表在 TCP/IP 驱动程序堆栈中的不同位置进行处理。

由于您在 NAT 表中的 PREROUTING 和 OUTPUT 链中进行重定向,因此当数据包由相应的 INPUT 和 OUTPUTfilter表处理时,这些更改已经应用。所以你需要这样的事情:

iptables -t filter -A INPUT -p tcp --dport 8118 -j REDSOCKS_FILTER
iptables -t filter -A OUTPUT -p tcp --dport 8118 -j REDSOCKS_FILTER

由于filter是默认表,您可以省略该-t filter选项。

各种 Netfilter 表之间的数据包流图可能会有所帮助:

https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

由于您没有进行桥接,因此您所做的一切都iptables发生在该图像中的绿色“网络层”内。

相关内容