仅重定向特定主机的请求,为其他主机保留默认设置

仅重定向特定主机的请求,为其他主机保留默认设置

我有一台只打开了 80 端口的机器,上面已经有一个 http 服务器。我想拦截 80 端口上的任何传入流量,并且:

  • 如果来自 ip1、ip2、ip3,则重定向到另一个监听另一个端口的应用程序
  • 否则转到网络服务器

这可能吗?目前我正在使用 socat,但即使使用 repeataddr,由于端口已被使用,启动 Web 服务器时仍然会出错……

答案1

您说的是“只开放 80 端口”。如果其他端口被某些外部防火墙阻止(例如,带有 NAT 的路由器,只转发 80 端口给您),则基本规则可能如下:

iptables -t nat -A PREROUTING -p TCP --dport 80 -s 192.168.1.7 -j REDIRECT --to-port 1234

对于进入端口的所有流量80,它会将其重定向192.168.1.7至端口1234,其余流量保持不变。

笔记iptables按先匹配原则运行,所以你可能想要做

iptables -t nat -I PREROUTING …

反而。

有关指定多个可能的源地址的各种方法,请参阅此问题的答案:iptables多个源 IP

但是如果“仅开放 80 端口”意味着您有iptables -A INPUT …仅允许 80 端口的规则,那么我认为上述方法本身不会起作用。这是因为nat/PREROUTING首先起作用。在这种情况下,您还应该解除对另一个端口的阻止。

相关内容