防止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.crt 和 ssl.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; }
评论
评论关闭