連接埠重定向 443 到 8443 對我的 tomcat 實例不起作用

連接埠重定向 443 到 8443 對我的 tomcat 實例不起作用

我在專用主機伺服器上使用 ubuntu 無頭伺服器 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位址)

相關內容