別讓SSL證書暴露了你的網站伺服器IP

夢共裡醉發表於2021-06-25
我們通常會用cdn套到伺服器ip上,來為網站或者後端程式做加速、防禦。可是nginx在設計上有個小缺陷,會因為ssl證照洩露網站的原IP

別讓SSL證照暴露了你的網站伺服器IP別讓SSL證照暴露了你的網站伺服器IP

原理

用Nginx部署網站,在預設或不正確的配置下,網站開啟ssl,直接訪問ip的443埠,即ip:443,Nginx會返回預設一個站點的ssl證照,間接的能讓別人掃到這個ip對應的域名。

原理就是對ip的443埠傳送clienthello,對方回覆的 serverhello中有ssl證照,ssl證照裡的common name 有域名資訊。這樣就知道了解析這個ip的域名。所以更準確的說是IP的443埠可能會暴露了域名。

動作再大一點,批次掃描機房的ip段,把對應的域名-ip 的多值對映表統計起來。以後想查某個域名對應的源站 ip 查這個表就夠了,這是黑產喜歡乾的事。

同時也是很多站點,明明套上了cdn,依然能被打到源站IP的原因。

解決辦法
禁止直接訪問IP
# 禁止IP直接訪問網站
server {
      listen       80 default_server;
      listen       [::]:80 default_server;
      server_name  _;
      return 444;
}
自籤IP的SSL證照,返回444

自簽證照的目的不是為了訪問,而是避開Nginx的這個缺陷。生成自籤的IP SSL證照可以用開源的Mkcert()工具。Mkcert使用起來稍微麻煩,或者用一個測試證照的線上網頁工具:
別讓SSL證照暴露了你的網站伺服器IP別讓SSL證照暴露了你的網站伺服器IP
在填寫域名的位置填上IP地址,點生成按鈕會自動測試證照展示在下面,各自儲存為.pem檔案和.key檔案。然後在nginx裡配置上“return 444”,類似配置大概:

{
listen 80 ;
listen 443 ssl http2 default_server;
server_name ip;
  #HTTP_TO_HTTPS_END
    ssl_certificate    xxxx.pem;
    ssl_certificate_key   xxxx.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
return 444;
  
}
購買合法IP站點的SSL證照

花點小錢買個合法的IP SSL證照配置到nginx裡,IP證照一般一二百左右。

加錢,世界觸手可及。

僅允許指定cdn的IP訪問

Nginx僅允許指定cdn的IP訪問,避免放到公網上被任何人掃。以騰訊雲CDN段為例,在Nginx網站配置檔案裡,新增如下:

location / {
allow   58.250.143.0/24;
allow   58.251.121.0/24;
allow   59.36.120.0/24;
allow   61.151.163.0/24;
allow   101.227.163.0/24;
allow   111.161.109.0/24;
allow   116.128.128.0/24;
allow   123.151.76.0/24;
allow   125.39.46.0/24;
allow   140.207.120.0/24;
allow   180.163.22.0/24;
allow   183.3.254.0/24;
allow   223.166.151.0/24;
  deny    all;
}

查一下使用的CDN商家的文件,如果有新的IP段更新,也加到裡面。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2778427/,如需轉載,請註明出處,否則將追究法律責任。

相關文章