censys.io扫描ip这个功能的确强大,不过有开源的脚本,分分钟扫描全球ip4,但是对于用于网站的就不友好了。
censys能扫描到网站使用CDN之后的源站ip,我们也有很多个网站被泄漏了,但是今天全部重新整理、测试之后,发现就只有用cloudflare CDN的才会被扫描到,阿里云、腾讯云的CDN都扫描不到,当然这取决于你当时配置CDN的步骤,如果先开放了A解析,那同样能扫描到。比如这个博客域名www.jingxialai.com,能扫到的都是曾经套过cloudflare CDN的服务器ip。
网上搜索Cloudflare censys泄漏源站ip的资讯很多,相关教程也多,不过看了很多都是先自签ip证书,或者先弄个假证书,然后再替换回去。不过我们在通过第三方平台cname接入的时候,又发现了如果步骤顺序对了,censys同样也是可以扫描不到源站IP的。
最终实际测试了2台服务器、2个子域名,不同方式接入均不会被扫描到,相当于先走Cloudflare自签证书。
理论上以下过程不适用于已经泄露过网站ip的服务器,也就是如果之前同台服务器下有其他网站已经泄露了,那下面依旧可能扫到,如果这个时候还能扫到,就直接给服务器ip绑定个假证书,当然也可以一开始就上ip证书,只是有的人不知道怎么给服务器ip绑定证书。
一、绑定假证书的方式:
服务器环境搭建好之后,先不要上网站,先套服务器ip的假证书。
就是在你服务器nginx.conf里面添加个ip证书就行:
listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/1.crt; ssl_certificate_key /usr/local/nginx/conf/ssl/1.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_timeout 10m; ssl_session_cache builtin:1000 shared:SSL:10m; ssl_buffer_size 1400; add_header Strict-Transport-Security max-age=15768000; ssl_stapling on; ssl_stapling_verify on;
在server段增加443证书的方式,1.crt和1.key就是假证书,这个证书你随便生成个与你无关的证书,然后把名称改成1.crt和1.key,放到你服务器ssl目录就好,有的证书格式是pem.
然后重启nginx之后,再给服务器绑定网站。
一、接入域名之后随便解析
比如测试域名:test.jingxialai.com 设置A解析IP:172.69.22.128
就是这个第一次解析的ip乱写,填写Cloudflare自己的节点ip就行。
二、去SSL设置
- Overview – 选择Full(全程模式)
- Edge Certificates – Always Use HTTPS – on(强制跳转到HTTPS)
- Origin Certificates – Create Certificate(创建一个自己的域名证书)
- 把创建的证书分别保存为pem和key,放到自己的服务器网站相关配置路径去
- 创建证书下面有个Authenticated Origin Pulls – On (开启证书身份验证)
三、改回正常解析ip
现在就去把自己的域名解析,改到自己服务器真ip就行了,然后过几天再去censys.io测试看看有没有扫到。
或者给自己服务器默认ip直接绑定个假证书。
如果不放心,就加强下安全规则,只允许Cloudflare的ip回源访问,把这里面的IP:https://www.cloudflare.com/ips/ 都加到服务器安全组的白名单,只允许访问80、443端口。同时不要开放0.0.0.0/0的80和443访问权限,服务器安全组这步可以最先做。
不过你网站要是用了默认的SMTP邮件,还是会泄露服务器ip,所以可以用第三方邮件推送或者用手机号验证。