我有一个 Apache Web 服务器集,它侦听端口 4000,我想使用此(本地)服务器作为一种代理。
这个想法是将所有本地传出 HTTP 流量(端口80
)重定向到我的服务器(位于 )127.0.0.1:4000
。当然,服务器必须能够在端口 上发送请求80
。
我尝试iptables
像这样更新:
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
显然它不起作用,因为来自我的服务器的流量也被重定向到其自身。
问题是:如何只授权来自我的服务器的 HTTP 请求?
例子:
- 请求已发送至 www.google.com
- 请求被重定向到我的服务器 (
127.0.0.1:4000
) - 服务器接收请求,做一些事情,然后向 www.google.com 发送请求
我设法完成了第一部分(2.),但由于我的服务器无法访问 www.google.com,因为它也被重定向到自身。
答案1
为此使用 netfilter 不是一个好主意。您需要一个反向代理[1],就像 nginx 或 apache 可以做的那样。
如果您想使用 iptable,您可以从传入接口中进行过滤,例如:
iptables -t nat -A OUTPUT -i eth0 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
答案2
根据@Bratchley 的评论,我设法通过添加该选项使其工作--uid-owner
。
这是我使用的命令:
iptables -t nat -A OUTPUT -m owner --uid-owner 1000 -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:4000
由于apache服务器有特定用户,因此只有来自uid 1000的流量会被重定向。