很多小伙伴喜欢用服务器搭建个人博客,用来写写文章,分享技术,平时访问的流量也不多,并且域名也套用了 CDN,为什么还是被攻击了呢?这就要从 CDN 的实现原理说起了…
- CDN 介绍
CDN 全称是内容分发网络(Content Delivery Network),它的作用是加速用户访问网站的速度。CDN 在全球不同地区放置了很多缓存服务器,这些服务器被称为“节点”,每个节点都存放了部分或全部的网页内容,比如图片、视频、CSS文件等,如果用户请求的内容节点中没有,它就会去网站的源服务器获取,之后再把这些内容返回给用户,从而避免了用户直接访问源服务器。整个过程看似完美无缺,但是其中却隐藏了一个卧底。
- 谁是卧底?
我们直接使用浏览器访问服务器的 IP 地址,这样就绕过了 CDN,默认情况下会使用 http 协议访问,也就是访问服务器的 80 端口,正常情况下服务器会返回 Nginx 的默认页面,这时我们把 http 改为 https 再次访问,这时会显示证书不安全,我们查看证书信息,发现共用名正是我们的域名,问题就出在这里。
本不应该返回证书的地址却出现了我们的证书信息,而罪魁祸首竟然是 Nginx。当客户端请求了一个没有配置的主机名(IP 地址),Nginx 会把配置文件中的第一个网站的配置返回给客户端,因为是通过 https 发送的请求,所以会连同证书信息一起返回,这可以说是 Nginx 的一个漏洞。
当我们把互联网上所有的 IP 地址都使用 https 请求遍历一遍,和返回的域名信息对号入座,自然就能够找到域名对应的 IP 地址,你可能会说互联网上那么多的 IP 地址,一个个遍历得到什么时候?但是已经有一些坑爹的网站在这么做了…
- 坑爹的网站
这些网站会实时扫描互联网上的 IP 地址,几乎每隔一天就可以把互联网上的 IP 地址扫描一遍,美其名曰“网络空间测绘“。我们打开 FOFA 这个网站,输入我们的域名进行搜索,可以看到这里详细的记录了服务器的 IP 地址,甚至包含了服务器开放的端口号。所以,黑客压根不需要自己去遍历 IP,在这个网站搜一下就出来了,类似的还有 censys。
- 消灭卧底
既然已经了解了 IP 泄漏的原理,要想解决这个问题其实也很简单,我们只需要稍微修改一下 Nginx 的配置,当访问默认站点时,返回一个虚假的证书就可以了。
(默认配置路径:/etc/nginx/sites-available/default )
server{listen80default_server;listen[::]:80default_server;# SSL configurationlisten443ssl default_server;listen[::]:443ssl default_server;# 其他 https 端口listen8443ssl default_server;listen[::]:8443ssl default_server;# 配置一个虚假的证书ssl_certificate /root/cert/default.crt;ssl_certificate_key /root/cert/default.key;ssl_session_timeout1d;ssl_session_cacheshared:SSL:10m;ssl_session_ticketsoff;root/var/www/html;# Add index.php to the list if you are using PHPindexindex.html index.htm index.nginx-debian.html;server_name_;location/ {# First attempt to serve request as file, then# as directory, then fall back to displaying a 404.try_files$uri$uri/ =404;}}
添加所有 https 访问的端口,然后配置一个虚假的证书,证书可以使用下面的命令生成。
openssl req-x509-nodes-newkey ec:<(openssl ecparam-name prime256v1)-keyout/root/cert/default.key -out /root/cert/default.crt-subj”/CN=bing.com”-days3650
原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/3219.html
