[Nginx] 預設阻擋透過 IP 連線到主機上的 Vhost HTTPS 網站的資安解決方法

本篇文章更新時間:2025/10/27
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


當你使用 Nginx 伺服器,啟用 HTTPS 協議但沒有設定「預設的伺服器區塊 (default server)」時,在遇到 https://IP_ADDRESS 或未知的 Host 時,會隨機(實際上是第一個)挑一個 HTTPS 虛擬主機回應。這樣做會造成:

  • 別人輸入你的 IP 就會看到某個網站;
  • SSL 憑證不匹配(可能出現警告);
  • 有時會洩漏不該曝光的網站內容。

這問題滿妙的。不解決雖然不會怎樣,但其實能透過 HTTPS://IP 這樣方式就可以知道這台主機上有什麼網站,怎樣都不太踏實。

解決辦法如下:

先自簽一個預設 SSL 憑證

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048  -keyout /usr/local/nginx/conf/ssl/default.key  -out /usr/local/nginx/conf/ssl/default.crt  -subj "/CN=default.invalid"

建立 server 組態

檔案: /usr/local/nginx/conf/default.conf

server {
        #listen 80 default_server;
        #listen [::]:80 default_server;
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        ssl_certificate     /usr/local/nginx/conf/ssl/default.crt;
        ssl_certificate_key /usr/local/nginx/conf/ssl/default.key;
        ssl_reject_handshake on; #v1.19.4 後可以單純用這個阻擋,不需要假憑證
        return 444;
}

修改預設組態

檔案: /usr/local/nginx/conf/nginx.conf

在 vhost 前補上 include default.conf; 引用這組設定後,重新整理組態設定: lnmp reload

後記

基本上現在我都編譯的版本都是 Nginx 1.2x 以上版本了,不用自簽那段也可以直接把預設組態掛上也能發揮效果。

只是這段不會是預設組態會出現的,要自己加入設定才可以。筆記一下~

組態這邊 return 444 就是看要用在 HTTPS 下,還是連 HTTP 也要,可以自由搭配。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon