在特定連接埠上運行的服務可以在任何網站上運行...如何停用它?

在特定連接埠上運行的服務可以在任何網站上運行...如何停用它?

因此,我在我的 VPS 上運行多個網頁,並利用 Apache 的虛擬主機來確保訪問我網站的任何人都被發送到正確的網站。不幸的是,在設定 Jenkins 實例後我注意到,我可以轉到指向不同虛擬主機上的 VPS 的任何網域,並向它們附加 :8080 以存取 Jenkins 伺服器。我想找到一種方法來防止這種情況,並允許我只能透過 ip:port 存取 Jenkins 伺服器。任何幫助深表感謝!

作為一個附加問題,有什麼方法可以讓我也放棄連接 ip:80 的嘗試嗎?謝謝。

答案1

我可以存取這些網域中的任何一個 [...] 並附加到:8080它們以存取 Jenkins 伺服器。我想找到一種方法來防止這種情況發生,並允許我只能通過ip:port.

正如評論中提到的,第一步是阻止公共存取your_ip:8080(Jenkins 仍然可以在此連接埠上內部運行)。如何執行此操作可能取決於您的 VPS(儘管您的 iptables 或防火牆介面可能是一個不錯的起點)。

第二步是為連接埠:XXa設定「預設」Apache虛擬主機反向代理(使用阿帕契模組代理模組)並將代理目標設定為對連接埠 上執行的 Jenkins 的(本機)參考:8080。這個反向代理將允許存取 Jenkins,即使否則它會被公開阻止。您可能會對以下內容特別感興趣官方 Jenkins wiki 關於在 Apache 背後運行 Jenkins 的說明

筆記

  • 您希望反向代理成為給定連接埠的「預設」主機的原因是,對於 Apache 和基於名稱的虛擬主機,:XX當 IP 為要求。

  • 反向代理的連接埠由您的虛擬主機條目定義。但是,如果 Apache 和 Jenkins 在同一台伺服器上運行,則該連接埠不能與 Jenkins 運行的連接埠相同(例如:8080)。

  • 不要忘記在 Apache 設定中新增正確的Listen連接埠指令。:XX

  • 如果您使用連接埠:443(SSL),則該連接埠的憑證應包含您的 IP 作為有效名稱。否則您可能會收到證書警告。


需要明確的是,連接埠:XX只是一個範例/佔位符,表示您選擇的任何連接埠。


ip:80有什麼方法可以讓我也放棄連線嘗試嗎?

Listen:80.但是,這將破壞:80對您網站的所有正常連接埠 HTTP 訪問(即,如果用戶沒有https://在瀏覽器中明確鍵入或使用明確https://連結進行訪問,他們將無法連接)。

作為折衷方案,您可以使用上面相同的技術(在連接埠上使用「預設」主機:80)將請求重定向(而不是代理)到您的主網站或其他地方(例如https://www.google.com)。

相關內容