WEB-DL

防止SSL证书泄露源站IP

我们在搭建网站的时候为了防止被DDOS攻击,可能会使用Cloudflare\Akamai\CloudFront\CacheFly这些“CDN/WAF”来保护源站,但是如果你的网站SSL证书配置不恰当,源站ip可能会更方便的泄露,尤其Censys等网站会每天扫全球ip和域名,一旦被扫描到关联信息,则会记录在这些网站上,然后 别人就可以轻松的查到你的网站的ip,为了防止因为SSL证书导致源站ip泄露,。

几种主流的解决方法

1.直接屏蔽censys扫描的IP段
不可靠,因为不止又censys这种扫描网站还有其他公开扫描的网站,工程量大
需要通过防火墙设置大量的黑白名单IP段,不利于维护和更新

2.为VPS的IP设置一个SSL证书,并且禁止直接访问IP的HTTP或者HTTPS服务器
SSL证书可以是正规可信机构颁发的,有整套认证体系的;也可以是自签无效的证书。
NGINX有HTTP Code 444专门阻止访问
简单设置即可

3.源站仅使用IPv6,并且只允许Cloudflare CDN服务器访问源站,其他一律拒绝
IPv6拥有非常庞大的总量,Censys扫描起来时间很长,不容易被找到
在没有IPv6的vps上不太靠谱,并且还是需要设置相应的IP段
一样需要通过防火墙设置黑白名单IP段,不利于维护和更新

本文以Nginx服务情况下,介绍一种比较可靠的方法来避免SSL证书配置不当导致源站ip泄露。
在使用 nginx 作为 web 服务器的时候,对于未绑定的域名可能会解析到其他站点,容易被恶意解析。在 443 端口上,这种情况可能更加严重,在直接访问 443 端口时,nginx 会使用第一个配置了 SSL 的站点的证书来建立连接,导致源站暴露,我们可以通过配置一个空白证书到默认站点来解决问题。

先在任意目录下建立 ssl.crtssl.key 两个文件,内容如下(这是一份长期有效的空白证书):

server
 {
     listen 80;
     server_name _;
     index index.html;
     root /www/server/nginx/html;  #这里填写web默认目录
     return 444;
 }
 server
 {
     listen 443 ssl;
     server_name _;
     ssl_certificate    /xxx/ssl.crt;  #这里填写你的证书绝对路径
     ssl_certificate_key    /xxx/ssl.key;  #这里填写你的证书绝对路径
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
     ssl_prefer_server_ciphers on;
     ssl_session_cache shared:SSL:10m;
     ssl_session_timeout 10m;
     index index.html;
     root /www/server/nginx/html;  #这里填写web默认目录
     return 444;
 }

以LNMP脚本创建环境时为例

cd /usr/local/nginx/conf
mkdir ssl
cd ssl
wget --no-check-certificate https://web-dl.cc/share/ssl/ssl.crt
wget --no-check-certificate https://web-dl.cc/share/ssl/ssl.key

修改nginx默认配置

nano /usr/local/nginx/conf/nginx.conf
server
 {
     listen 443 ssl;
     server_name _;
     ssl_certificate    /usr/local/nginx/conf/ssl/ssl.crt;  #这里填写你的证书绝对路径
     ssl_certificate_key    /usr/local/nginx/conf/ssl/ssl.key;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
     ssl_prefer_server_ciphers on;
     ssl_session_cache shared:SSL:10m;
     ssl_session_timeout 10m;
     index index.html;
     root /home/wwwroot/default;  #这里填写web默认目录
     return 444;
 }
码字很辛苦,转载请注明来自非WEB-DL资源站《防止SSL证书泄露源站IP》

评论