端口重定向 443 到 8443 对我的 tomcat 实例不起作用

端口重定向 443 到 8443 对我的 tomcat 实例不起作用

我在专用主机服务器上使用 ubuntu headless server 18.04。主机有外部防火墙,我在其中打开了端口 8443、443(tcp)。在我的 ubuntu 服务器上,我使用 iptables,我使用表 nat 将端口 443 重定向到 8443。

iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-ports 8443

我还打开了入站和出站端口 443 和 8443。

我仍然可以通过 example.com:8443 访问 tomcat 实例,没有任何问题,但 example.com 没有响应。查看 iptables 时,我没有看到任何丢弃数据包。在我的 tomcat 实例上,我没有更改 server.xml。连接器监听 8443。我不知道问题出在哪里?我希望一些专家能帮助我解决这个问题。

亲切的问候

黑胡子

答案1

您真正需要的是一个反向代理(例如 Nginx),它可以在端口 443 上为您执行 SSL 终止,然后将请求传递给端口 8443 上的 Tomcat。

SSL/TLS 很复杂,而且在我看来,依靠 IPTABLES 来处理 SSL 握手并将请求发送给 Tomcat 应用程序不是一个好主意。

如果您确实需要使用 IPTABLES,请使用连接到服务openssl并准确了解正在发生的事情。在此处报告输出,可能会获得更多帮助。

openssl s_client -connect www.example.com:443

问题也可能在于你正在使用nat表格。我的理解是,只有当请求被路由时,此表的规则才适用通过服务器,而不是路由到同一 IP 地址上的不同端口。

反向代理可以消除很多复杂性,并为您提供更多功能(例如速率限制、访问控制等)。

答案2

这可能取决于你的 tomcat 绑定到哪个接口。如果它绑定到环回接口,那么这根本行不通。

REDIRECT 目标通常与指定的接口一起使用,例如:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8443

(将 eth1 替换为 tomcat 正在运行的实际网络接口)

REDIRECT 是 DNAT 目标的一种便捷方法,因此如果上述方法不起作用,您可以尝试类似以下方法:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:8443

(将 10.0.0.1 替换为您的机器的 IP 地址)

相关内容