别让 SSL 证书暴露了你的网站服务器 IP

安全 应用安全
我们通常会用cdn套到服务器ip上,来为网站或者后端程序做加速、防御。可是nginx在设计上有个小缺陷,会因为ssl证书泄露网站的原IP。

[[403880]]

我们通常会用cdn套到服务器ip上,来为网站或者后端程序做加速、防御。可是nginx在设计上有个小缺陷,会因为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的原因。

解决办法

  1. # 禁止IP直接访问网站 
  2. server { 
  3.       listen       80 default_server; 
  4.       listen       [::]:80 default_server; 
  5.       server_name  _; 
  6.       return 444; 

自签IP的SSL证书,返回444

自签证书的目的不是为了访问,而是避开Nginx的这个缺陷。生成自签的IP SSL证书可以用开源的Mkcert(https://myssl.com/create_test_cert.html)工具。Mkcert使用起来稍微麻烦,或者用一个测试证书的在线网页工具:https://myssl.com/create_test_cert.html

在填写域名的位置填上IP地址,点生成按钮会自动测试证书展示在下面,各自保存为.pem文件和.key文件。然后在nginx里配置上“return 444”,类似配置大概:

  1. listen 80 ; 
  2. listen 443 ssl http2 default_server; 
  3. server_name ip; 
  4.  
  5.   #HTTP_TO_HTTPS_END 
  6.     ssl_certificate    xxxx.pem; 
  7.     ssl_certificate_key   xxxx.pem; 
  8.     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; 
  9.  
  10. return 444; 
  11.  

购买合法IP站点的SSL证书

花点小钱买个合法的IP SSL证书配置到nginx里,IP证书一般一二百左右。加钱,世界触手可及。

仅允许指定cdn的IP访问

Nginx仅允许指定cdn的IP访问,避免放到公网上被任何人扫。以腾讯云CDN段为例,在Nginx网站配置文件里,添加如下:

  1. location / { 
  2. allow   58.250.143.0/24; 
  3. allow   58.251.121.0/24; 
  4. allow   59.36.120.0/24; 
  5. allow   61.151.163.0/24; 
  6. allow   101.227.163.0/24; 
  7. allow   111.161.109.0/24; 
  8. allow   116.128.128.0/24; 
  9. allow   123.151.76.0/24; 
  10. allow   125.39.46.0/24; 
  11. allow   140.207.120.0/24; 
  12. allow   180.163.22.0/24; 
  13. allow   183.3.254.0/24; 
  14. allow   223.166.151.0/24; 
  15.   deny    all

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

本文转载自微信公众号「Linux就该这么学」,作者倪家兴。转载本文请联系Linux就该这么学公众号。

 

责任编辑:武晓燕 来源: Linux就该这么学
相关推荐

2009-08-26 22:35:20

2009-08-14 16:09:12

2009-08-26 22:37:46

服务器证书SSL

2009-08-26 23:13:44

2017-11-13 06:27:18

2023-04-17 16:37:14

2022-05-13 13:50:18

ElasticSea服务器配置数据泄露

2023-02-14 10:30:07

ChatGPT代码微软

2017-03-06 09:26:56

Nginx服务器 SSL

2021-04-07 14:11:04

AI 数据人工智能

2011-07-28 12:10:26

钓鱼网站网站安全

2014-09-22 09:52:06

2018-05-18 09:43:37

服务器架构大型网站

2021-11-18 11:45:54

Stripchat漏洞信息泄露

2009-07-02 17:17:03

2011-07-27 14:14:13

2009-08-27 17:23:57

SSL证书网站安全

2018-03-15 08:25:53

2011-03-18 13:41:50

2018-08-02 10:33:42

点赞
收藏

51CTO技术栈公众号