Ubuntu / iptables:使用服务器作为中间人与防火墙服务器对话

Ubuntu / iptables:使用服务器作为中间人与防火墙服务器对话

我遇到一种情况,需要与只允许来自一个特定 IP 的连接的 API 进行通信。

因此 api.example.com 接受来自 whitelisted-ip 的端口 443 上的连接

我希望能够从任何地方连接到白名单 IP 端口 443,并让其将数据包转发到端口 443 上的 api.example.com,并将响应发送回连接的机器。

我认为有某种方法可以实现类似于透明鱿鱼代理的功能,但我无法弄清楚。

我尝试按照这里的例子(http://www.tldp.org/HOWTO/TransparentProxy-6.html) 使用下面的语句,但没有成功。

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to api.example.com:443
iptables -t nat -A POSTROUTING -o eth1 -d api.example.com -j SNAT --to whitelisted-ip

任何帮助,将不胜感激。

更新:

我也尝试了以下方法,但无济于事:

iptables -t nat -A PREROUTING  -p tcp -d whitelisted-ip  --dport 443 -j DNAT --to api.example.com:443
iptables -t nat -A POSTROUTING -p tcp -s api.example.com --sport 443 -j SNAT --to whitelisted-ip:443

谢谢

答案1

据我所知,您想从任何地方使用一个 IP(白名单 IP)访问服务器,但该 IP 不是您正在使用的客户端 IP。您无法做到这一点,因为您可能能够使用白名单 IP 访问服务器,但服务器无法响应,因为它不是您在网络中的 IP 地址

答案2

在 whitelisted-ip shell 上,你可以尝试使用网猫完成此类任务。

通过在 whitelisted-ip shell 上发出以下命令,您将绑定端口 4443 并将连接转发到 api.example.com:443。

nc -l -p 4443 -c "nc api.example.com 443"

因此您可以从任何其他端点连接到 whitelisted-ip:4443。

提醒:我不建议将其绑定到任何可公开访问的接口上而没有任何保护,您可以将端口绑定到环回接口并添加-s 127.0.0.1参数。

答案3

我刚刚意识到这是另一个问题的重复:

如何在同一网络中从一个 IP 进行端口转发到另一个 IP?

我让它工作了:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination api.example.com:443
iptables -t nat -A POSTROUTING -p tcp -d api.example.com --dport 443 -j SNAT --to-source whitelisted-ip

与 ip 转发 sysctl 一起:

echo 1 > /proc/sys/net/ipv4/ip_forward

相关内容