避免证书泄露源站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
操作步骤
因此选择第二种解决方案
- 申请并下载证书
- 注册并且登录ZeroSSL
- 到Dashboard找到Create SSL Certificate,点击New Certificate蓝色按钮
- 在Enter Domains处输入源站IP
- 其实过期也无妨,总之不让censys扫描到真正的域名证书就可以。因此选择90天证书
- CSR & Contat保持不变
- 验证域名的办法选择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
文件是不是可以访问。成功的话,就验证好了
- 使用NGINX的话,如果你保持原先设置不变,即
- 咱曾经遇到过证书生成等了十多分钟没反应的。一般等待五六分钟可以出证书,如果时间超过十分钟,可以取消证书申请,再申请一下就好。同时,访问和生成证书,错开晚高峰也是不错的选择
- 配置证书并且设置禁止IP 80/433的HTTP访问
- 下载
*.zip
文件,解压它。解压好的文件夹里面有好申请到的证书 - 将
ca_bundle.crt
和certificate.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----- - 下上传合并好的文件和
private.key
- 上传证书到一个NGINX有权限的文件夹,咱放在
/etc/nginx/ip-certificate/
- 设置
/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
22server {
#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
} - 服务器后台输入
nginx -t
检查是否有误,正确即可service nginx restart
重启
- 下载
- 直接输入IP作为网址检查是不是连接后立刻变成空白页
反思
- Censys还暴露了一些服务器敏感信息,是否可以提前打开或者关闭这些“入口”?
- 既然公开的平台Censys可以做,那是不是有别有用心的人正在搜集这些信息?
- 在当今互联网时代如何保护信息安全?
脚注
避免证书泄露源站IP
http://mimo.moe/2023/04/04/如何避免证书泄露源站IP/