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