使用 SuSEfirewall2 或 iptables 规则重定向本地请求(而非内部请求)

使用 SuSEfirewall2 或 iptables 规则重定向本地请求(而非内部请求)

我有一台服务器,它运行部署在 Tomcat 上的 Web 应用程序,位于测试网络中。我们运行的是 SuSE 11 sp1,并且对传入请求有一些重定向规则。例如,我们没有在 Tomcat 的 server.xml 文件中绑定端口 80,而是监听端口 9600,并在 SuSEfirewall2 中有一行配置行将端口 80 重定向到 9640。这是因为 Tomcat 不是以 root 身份运行,无法打开端口 80。

我的 Web 应用程序需要能够向端口 80 发出请求,因为这是部署时将使用的端口。我可以添加什么规则以便本地请求被 iptables 重定向?

我尝试看一下这个问题:如何使用 iptables 将本地计算机上的一个端口重定向到另一个端口?但那里的建议似乎对我没有帮助。

我尝试在 eth0 上运行 tcpdump,然后连接到我的本地 IP 地址(不是 127.0.0.1,而是实际地址),但没有看到任何活动。如果我从外部机器连接,我确实看到了活动。然后我在 lo 上运行 tcmpdump,再次尝试连接,这次我看到了活动。所以这让我相信,任何对我自己的 IP 地址发出的本地请求都不会被 iptables 处理。

仅供参考,这就是我的 NAT 表现在的样子:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:http redir ports 9640
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:xfer redir ports 9640
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:https redir ports 8443

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

答案1

首先我想说的是,我不相信 Tomcat 作为非特权用户无法绑定 80 端口。可能您对该用户的权限不足。重定向怎么样:您的表输出不完整。您能否提供 iptables -nvL -t nat 输出?我的意思是,在这里您可以按接口拒绝规则,但您的输出没有显示这一点。本地终端的请求怎么样:想想路由的选择取决于路由表,哪个接口将发送数据包也取决于路由表。因此,如果您的应用程序仅绑定 lo 接口,您将获得从“lo”到“lo”的内部流量

相关内容