如何在NGINX設備禁止未綁定域名和 IP 訪問 443 端口

2018年9月13日09:41:08 发表评论 1 閱讀

簡單架構:用戶端→F5→Nginx

問題:例,a.xxx.com 開啟了https,訪問https://a.xxx.com ,正常,訪問未配置https的功能變數名稱,如 https://b.xxx.com 會打開https://a.xxx.com 的內容(原因不詳,可能跟F5的轉發配置有關,沒有做虛擬主機綁定)

解決辦法:為Nginx的443埠設置默認功能變數名稱default_server,並拒絕訪問

配置:

server {
     listen 443 default_server;
     server_name _ ;
     ssl on;
     ssl_certificate         隨便設置一個ssl證書;                
     ssl_certificate_key 隨便設置一個ssl證書的key;
     return 444;
}

注意:
ssl_certificate 隨便設置一個ssl證書;
ssl_certificate_key 隨便設置一個ssl證書的key;

這兩行配置必須要有,否則Nginx會拒絕所有443的連接(正常開啟https的功能變數名稱也會無法訪問)

如何在NGINX設備禁止未綁定域名和 IP 訪問 443 端口

在NGINX設備禁止未綁定功能變數名稱和 IP 訪問 443 埠

Google搜索了下,這種現象就叫“功能變數名稱惡意解析”,只要你的Web伺服器可以通過公網IP直接訪問,那麼別人的功能變數名稱就可以解析到你的IP上進行訪問。

有兩方面危害:
一、如果有一天這幾個功能變數名稱被指向了其他 IP,那麼我會失去對應的流量;
二、不同功能變數名稱指向同一個網站對 SEO 的效果不好。

知道了原因,解決就很簡單,Nginx增加限制IP直接訪問的配置就可以了。
在nginx設定檔nginx.conf中新增server塊

1
2
3
4
5
server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

server_name 指定”_”, 或者 “–” 或者 “!@#”都可以表示一個無效的功能變數名稱,Nginx通過HTTP請求中Host值來找對應的server_name,如果找不到Nginx就會講請求送到指定了default_server的節點來處理

在NGINX設備禁止未綁定功能變數名稱和 IP 訪問 443 埠

如果是https的網站,80換成443,增加ssl on就好了

1
2
3
4
5
6
server {
     listen 443 default_server;
     server_name _;
     ssl on;
     return 444;
}

這樣遇到惡意解析的時候,就返回444,提示無法打開頁面,該網頁無法正常運作。(注意:444是非標準狀態碼,是Nginx伺服器擴展的Http錯誤狀態碼,伺服器不向用戶端返回任何資訊,並關閉連接, 斷開用戶端和伺服器的連接,防止惡意軟體攻擊威脅。)

hcyaobin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: