我使用 Nginx 來管理我的很多網路服務。它們偵聽不同的埠,但都由一個域內的 Nginx 反向代理訪問。例如訪問我可以使用的 RESTful-API 服務器http://my-domain/api/,以及訪問我可以使用的視頻服務器http://my-domain/video。
我已經為我生成了一個 SSL 證書my-domain并將其添加到我的 Nginx 配置中,所以我的 Nginx 服務器現在是 HTTPS——但那些原始服務器仍在使用 HTTP。
當我訪問時會發生什么https://my-domain/<path>?這與在原始服務器上配置 SSL 一樣安全嗎?
uj5u.com熱心網友回復:
使站點成為 HTTPS 的目標之一是防止兩個端點之間傳輸的資料被外部方攔截以進行修改,如中間人攻擊,或者資料被盜和使用出于不良目的。在公共互聯網上,兩個端點之間傳輸的任何資料都需要安全。
在專用網路上,這種需求并不是那么大。許多服務在專用網路上僅在 HTTP 上運行就好了。但是,有幾點需要考慮:
確保未使用的埠被阻止:
雖然您可能有一個 NGINX 反向代理偵聽埠 443,但埠 80 是否被阻止,或者仍然可以通過 HTTP 訪問站點?
服務的其他埠是否也被阻止?假設您的 Web 服務器在埠 8080 上運行,并且 NGINX 反向代理將某些流量轉發到 localhost:8080,該站點仍然可以通過http://example.com:8080或https://example.com:8080訪問嗎?防止這種情況的一種方法是使用防火墻并阻止您不打算接受流量的任何埠上的所有傳入流量。如果您添加需要打開該埠的服務,您可以隨時取消阻止它們。
內部服務可以被同一臺服務器上的其他服務訪問
下一個考慮涉及可能在服務器上運行的其他軟體。雖然它在私有生態系統中,但在服務器上運行的任何服務都可以訪問 localhost:8080。由于反向代理和 Web 服務器之間的流量未加密,因此即使需要授權才能對 localhost:8080 進行身份驗證,也可以嗅探該流量。流氓服務需要做的就是監視埠并等待用戶登錄。然后該服務可以捕獲兩個端點之間的所有內容。
減輕間諜軟體造成的危險的一種策略是使用虛擬化將單個服務器分成多個邏輯服務器,或者對不相關的事物使用不同的硬體。這至少將事情分開,以便負責應用程式 A 的人不會認為服務 X 可能是運行應用程式 B 的團隊正在使用的東西。任何不合適的地方都更有可能脫穎而出。
例如,公司網站和內部 wiki 可能不屬于同一臺服務器。
通過限制服務器的作業,我們可以在服務器上保持設定和配置越簡單,我們就越容易密切關注服務器上發生的事情并防止資料泄漏。
使用良好的安全實踐
在服務器上使用良好的安全最佳實踐。例如,不要以 root 身份運行。使用非 root 用戶執行管理任務。對于任何長期運行的服務,不要以 root 身份運行它們。
例如,NGINX 能夠作為用戶 www-data 運行。對于不同服務的特定用戶,我們可以創建組并將不同的用戶分配給他們,然后使用 chown 和 chmod 修改檔案所有權和權限,以確保這些服務只能訪問他們需要的內容,僅此而已。舉個例子,我經常想知道為什么 NGINX 需要讀取日志。從理論上講,它真的應該只需要對它們進行寫訪問。如果此服務以某種方式受到損害,它所能做的最壞的事情就是將一堆垃圾寫入日志,但攻擊者可能會發現在從他們那里檢索敏感資訊時,他們的手被束縛了。
本地主機 SSL 證書通常僅用于開發
雖然我不建議將其用于生產,但有一些方法可以讓 localhost 使用 HTTPS。一種是帶有自簽名證書。另一個使用名為mkcert的工具,它讓您成為自己的 CA(證書頒發機構)來頒發 SSL 證書。后者是一個很好的解決方案,因為瀏覽器和其他服務會隱式地信任生成的證書,但普遍的共識,即使是 mkcert 的作者,也是只推薦用于開發目的,而不是生產目的。我還沒有為生產中的 localhost 找到一個好的解決方案。我不認為它存在,根據我的經驗,我從未見過有人擔心它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/383134.html
標籤:nginx ssl ssl-证书 nginx-反向代理
