将传出流量重定向到本地服务器

将传出流量重定向到本地服务器

我有一个 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 请求?

例子:

  1. 请求已发送至 www.google.com
  2. 请求被重定向到我的服务器 ( 127.0.0.1:4000)
  3. 服务器接收请求,做一些事情,然后向 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

[1]http://nginx.com/resources/admin-guide/reverse-proxy/

答案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的流量会被重定向。

相关内容