避免证书泄露源站IP

前言

最近咱看到EPYDIY的网站被攻击的原因查明后,咱也通过censys扫描发现,咱的小破站一样被SSL证书泄露了咱的源站

几种主流的解决方法

  • 直接屏蔽censys扫描的IP段
    • 不可靠,因为不止又censys这种扫描网站还有其他公开扫描的网站,工程量大
    • 需要通过防火墙设置大量的黑白名单IP段,不利于维护和更新
  • 为VPS的IP设置一个SSL证书,并且禁止直接访问IP的HTTP或者HTTPS服务器
    • SSL证书可以是正规可信机构颁发的,有整套认证体系的;也可以是自签无效的证书。
    • NGINX有HTTP Code 444[1]专门阻止访问
    • 简单设置即可
  • 源站仅使用IPv6。并且只允许Cloudflare CDN服务器访问源站,其他一律拒绝。
    • IPv6拥有非常庞大的总量,Censys扫描起来时间很长,不容易被找到
    • 咱的小破站没有IPv6,并且还是需要设置相应的IP段
    • 一样需要通过防火墙设置黑白名单IP段,不利于维护和更新

系统环境

  • 系统:Debian 11(Bullseye)
  • Web服务器:nginx/1.18.0
  • CDN:Cloudflare

操作步骤

因此选择第二种解决方案

  • 申请并下载证书
    1. 注册并且登录ZeroSSL
    2. Dashboard找到Create SSL Certificate,点击New Certificate蓝色按钮
    3. 在Enter Domains处输入源站IP
    4. 其实过期也无妨,总之不让censys扫描到真正的域名证书就可以。因此选择90天证书
    5. CSR & Contat保持不变
    6. 验证域名的办法选择HTTP File Upload
      • 使用NGINX的话,如果你保持原先设置不变,即/etc/nginx/sites-available/default不变就没问题。当然,如果你改变了,记得保留server {listen 80; root /var/www/html;}就可以
      • 然后下载Auth File,并且把它上传到/var/www/html/.well-known/pki-validation。如果没有文件夹,就新建,记得让NGINX有权访问这些文件,否则还是会失败
      • 按照提示,点击一下.txt文件是不是可以访问。成功的话,就验证好了
    7. 咱曾经遇到过证书生成等了十多分钟没反应的。一般等待五六分钟可以出证书,如果时间超过十分钟,可以取消证书申请,再申请一下就好。同时,访问和生成证书,错开晚高峰也是不错的选择
  • 配置证书并且设置禁止IP 80/433的HTTP访问
    1. 下载*.zip文件,解压它。解压好的文件夹里面有好申请到的证书
    2. ca_bundle.crtcertificate.crt合并,方法是用notepad3或者vsode等可靠的编辑器打开certificate.crt。然后把ca_bundle.crt内容复制进去。格式是
      1
      2
      3
      4
      5
      6
      7
      -----BEGIN CERTIFICATE-----
      certificate.crt内容
      -----END CERTIFICATE-----

      -----BEGIN CERTIFICATE-----
      ca_bundle.crt内容
      -----END CERTIFICATE-----
    3. 下上传合并好的文件和private.key
    4. 上传证书到一个NGINX有权限的文件夹,咱放在/etc/nginx/ip-certificate/
    5. 设置/etc/nginx/sites-available/default文件。参考设置如下
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      server {
      #HTTP Server Default Set
      listen 80;
      listen 443 ssl http2 default_server;
      server_name ip;

      #HTTP_TO_HTTPS_END
      ssl_certificate /etc/nginx/ip-certificate/certificate.crt;
      ssl_certificate_key /etc/nginx/ip-certificate/private.key;
      ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
      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;

      #Server ROOT
      index index.html;
      root /var/www/html/;
      index index.html;

      return 444; #NGINX HTPP Code 444
      }
    6. 服务器后台输入nginx -t检查是否有误,正确即可service nginx restart重启
  • 直接输入IP作为网址检查是不是连接后立刻变成空白页

反思

  • Censys还暴露了一些服务器敏感信息,是否可以提前打开或者关闭这些“入口”?
  • 既然公开的平台Censys可以做,那是不是有别有用心的人正在搜集这些信息?
  • 在当今互联网时代如何保护信息安全?

脚注


避免证书泄露源站IP
http://mimo.moe/2023/04/04/如何避免证书泄露源站IP/
作者
秋未萌
发布于
2023年4月4日
许可协议