我在专用主机服务器上使用 ubuntu 无头服务器 18.04。主机有外部防火墙,我在其中打开了端口 8443,443 (tcp)。在我使用 iptables 的 ubuntu 服务器上,我使用表 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。我不知道,问题出在哪里?我希望一些专家可以帮助我解决这个问题。
亲切的问候
黑胡子
您真正需要的是一个反向代理(例如 Nginx),它可以在端口 443 上为您执行 SSL 终止,然后在端口 8443 上将请求传递给 Tomcat。
SSL/TLS 很复杂,在我看来,依靠 IPTABLES 处理 SSL 握手并将您的请求发送到 Tomcat 应用程序并不是一个好主意。
如果您真的需要使用 IPTABLES,请连接到该服务
openssl
并找出到底发生了什么。在此处报告输出,可能会提供更多帮助。问题也可能是您正在使用该
nat
表。我的理解是,仅当请求通过服务器路由时才应用此表的规则,而不是路由到同一 IP 地址上的不同端口。反向代理会消除很多这种复杂性,并为您提供更多功能(例如速率限制、访问控制等)来启动。
这可能取决于您的 tomcat 绑定到哪个接口。如果它绑定到环回接口,那么这根本不起作用。
大多数情况下,REDIRECT 目标与指定的接口一起使用,例如:
(将 eth1 替换为运行 tomcat 的实际网络接口)
REDIRECT 是 DNAT 目标的一种便捷方法,因此如果上述方法不起作用,您可以尝试以下方法:
(将 10.0.0.1 替换为您机器的 ip 地址)