别让SSL,成为泄漏源站IP的最佳助攻
在如今高度数字化的网络时代,网络安全已然成为网站运营者和用户都极为关注的重要议题。而在整个网络安全体系中,源站 IP 的保护可谓是重中之重,它就如同网站的 “命根子”,一旦不慎泄露,就如同打开了潘多拉魔盒,各种恶意攻击将接踵而至。DDoS 攻击会向网站服务器发送海量的请求,使其不堪重负而瘫痪;CC 攻击则通过不断发起 HTTP 请求,消耗服务器资源,让正常用户无法访问网站。更糟糕的是,数据泄露风险也会大幅增加,用户的个人信息、重要数据等都可能被窃取,给网站和用户带来难以估量的损失。
而 SSL 证书,作为保障网络通信安全的关键工具,其初衷是在客户端和服务器之间搭建起一道坚不可摧的加密桥梁,确保数据在传输过程中的安全性和完整性,防止数据被窃取、篡改或监听。然而,现实却并非总是如我们所愿,在某些特定的情况下,SSL 证书竟可能 “叛变”,成为泄漏源站 IP 的 “得力帮凶”,这一现象着实值得我们深入剖析和研究。
SSL 如何成为源站 IP 泄漏的 “导火索”
直接访问 IP 与 SSL 证书关联
在众多网站所使用的 Nginx 服务器部署场景中,存在一个容易被忽视的安全隐患。当网站未给 IP 绑定默认站点时,一旦有人直接访问https://你的IP
,即便服务器设置了诸如 405 等状态码,Nginx 依然会返回默认站点的 SSL 证书。而这张证书中所包含的丰富信息,如域名、颁发机构、有效期等,都可能成为攻击者追踪源站 IP 的关键线索。攻击者可以通过专业的工具和技术,对这些证书信息进行深度分析,利用其中的域名信息,结合各种网络查询手段,逐步缩小范围,最终精准定位到源站 IP。打个比方,这就好比你在自家门口挂了一块看似普通的牌子,本以为它不会暴露任何隐私,可牌子上却不小心写了一些关键信息,让路过的心怀不轨之人轻易就知道了你的身份和住址。
Censys 扫描带来的风险
Censys 是一款由专业团队精心打造的强大搜索引擎,其背后有着密歇根大学研究人员的智慧结晶,甚至还得到了谷歌的支持。它拥有一项令人惊叹的能力,那就是每天都会对整个 IPv4 地址空间进行地毯式的全面扫描,就像一个不知疲倦的 “网络侦探”,不放过任何一个联网设备,仔细收集设备、网站和证书等相关资源的详细配置和部署信息,并将这些信息整理成详细的报告。
在这个扫描过程中,Censys 会重点获取网站的 SSL 证书信息。对于攻击者来说,Censys 就像是一把 “金钥匙”,他们可以利用 Censys 强大的查询功能,将获取到的 SSL 证书相关信息输入其中进行比对分析。比如,通过对比证书的公钥,这就如同每个人独一无二的指纹,每个证书的公钥都有其独特之处;再比如证书的指纹,它是对证书内容的一种摘要形式,也具有唯一性;还有主题信息,包含了网站的相关标识等内容。只要发现与已知的源站证书存在哪怕一丝相关性,攻击者就如同嗅到猎物气味的猎犬,顺着线索不断追踪,最终极有可能成功定位源站 IP。就连百度这样的互联网巨头,其网站都曾因 SSL 证书相关问题,导致源站 IP 被 Censys 扫描到,这一事件足以让我们警醒,意识到问题的严峻性和普遍性。
防护策略:筑牢源站 IP 的安全防线
面对 SSL 证书可能带来的源站 IP 泄漏风险,我们绝不能坐以待毙,必须积极主动地采取一系列行之有效的防护措施,为源站 IP 构筑起一道坚不可摧的安全堡垒。
屏蔽 Censys 的 IP 段
在防火墙中设置规则,将来自 Censys 扫描 IP 段的流量拒之门外,这无疑是一种简单直接且行之有效的防护手段。不过,由于不同的操作系统和防火墙软件在设置方式上存在一定差异,下面我们以 Ubuntu 系统中常用的 UFW 防火墙为例,详细介绍具体的操作步骤。
首先,打开终端,以管理员身份依次输入以下命令,对 Censys 的 IP 段进行屏蔽:
sudo ufw deny from 162.142.125.0/24
sudo ufw deny from 167.94.138.0/24
sudo ufw deny from 167.94.145.0/24
sudo ufw deny from 167.94.146.0/24
sudo ufw deny from 167.248.133.0/24
sudo ufw deny from 199.45.154.0/24
sudo ufw deny from 199.45.155.0/24
sudo ufw deny from 206.168.34.0/24
sudo ufw deny from 2602:80d:1000:b0cc:e::/80
sudo ufw deny from 2620:96:e000:b0cc:e::/80
sudo ufw deny from 2602:80d:1003::/112
sudo ufw deny from 2602:80d:1004::/112
当这些命令输入完成后,不要忘记执行以下操作,让刚刚设置的规则生效。先重载 UFW 防火墙,使其读取新的配置:
sudo ufw reload
接着,查看 UFW 防火墙的状态,确认规则是否已正确添加:
ufw status
最后,重启相关的服务,比如 Nginx 服务器,让其应用新的防火墙规则:
sudo systemctl reload nginx
如果你使用的是宝塔面板,那么操作过程就会更加简单便捷。只需登录宝塔面板,找到宝塔安全或防火墙模块,在其中轻松找到屏蔽 IP 的功能入口,然后将 Censys 的 IP 段逐一添加进去,即可完成屏蔽设置。
屏蔽 Censys 的 UA
Censys 在进行 HTTP 扫描时,为了标识自身身份,会使用一个特定的用户代理(User - Agent),即Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)
。我们可以充分利用这一特性,在服务器或 CDN(内容分发网络)中设置规则,将带有这个特定 UA 的请求统统过滤掉,从而阻止 Censys 的扫描。
如果你的网站使用了 CDN 服务,以 Cloudflare 为例,登录 Cloudflare 的管理界面,在其中找到安全性相关的设置选项,然后进入 WAF(Web 应用防火墙)的自定义规则部分。在这里,设置字段为用户代理,运算符选择等于,值则填写 Censys 的 UA。这样,当 Censys 发起扫描请求时,Cloudflare 的 WAF 就会根据设置的规则,将其拦截下来。
而在服务器端,如果使用的是 Nginx 服务器,我们可以在 Nginx 的配置文件中添加相应的规则。打开 Nginx 的配置文件,一般位于/etc/nginx/nginx.conf
或相关的站点配置文件中,在合适的位置添加以下内容:
if ($http_user_agent ~* "Mozilla/5.0 (compatible; CensysInspect/1.1; \+https://about.censys.io/)") {
return 403;
}
这段代码的作用是,当 Nginx 检测到用户代理中包含 Censys 的特定标识时,直接返回 403 禁止访问的状态码,从而拒绝 Censys 的扫描请求。添加完成后,保存配置文件,并重启 Nginx 服务,使新的配置生效:
sudo systemctl restart nginx
利用 Nginx 新特性
Nginx 在 1.19.4 及以上版本中,新增了一个非常实用的ssl_reject_handshake
特性。这个特性就像是一道坚固的盾牌,当有 IP 访问时,它能够迅速终止 TLS 握手过程,从而有效防止域名暴露,进而保护源站 IP 不被泄露。
如果你使用的是宝塔面板,想要利用这个特性来增强安全性,操作步骤如下:首先,在宝塔面板中找到/www/server/panel/vhost/nginx
目录,在这个目录下找到0.default.conf
文件。这个文件是 Nginx 的默认配置文件,我们需要对其进行修改。打开0.default.conf
文件后,删除其中原有的所有代码,然后添加以下内容:
server {
listen 443 ssl default_server;
# 如果你的服务器支持IPv6地址,并且需要对IPv6进行同样的防护设置,则加入下面这行。
# listen [::]:443 ssl default_server;
ssl_reject_handshake on;
}
这段配置代码的含义是,当有客户端通过 443 端口(HTTPS 协议默认端口)访问服务器时,Nginx 会启用ssl_reject_handshake
特性,拒绝进行 TLS 握手。添加完成后,保存文件,并重启 Nginx 服务,让新的配置生效:
/etc/init.d/nginx restart
建立虚假网站
创建一个纯静态的虚假网站,这是一种 “以假乱真” 的巧妙策略。通过精心布置这个虚假网站,让攻击者误以为这就是真正的源站,从而成功保护源站 IP 的安全。
具体操作步骤如下:首先,准备一个空的目录,用于存放虚假网站的文件。例如,在/var/www/
目录下创建一个名为fake_site
的文件夹:
sudo mkdir /var/www/fake_site
然后,进入这个文件夹,删除除了.htaccess
和.user.ini
之外的其他所有文件(如果有的话)。这两个文件在某些情况下对于网站的运行和配置有重要作用,所以予以保留:
cd /var/www/fake_site
sudo rm -rf *
接下来,为这个虚假网站添加自签的空白 SSL 证书。自签证书虽然不被权威证书颁发机构认可,但在这种场景下,主要是为了迷惑攻击者,起到伪装的作用。使用以下命令生成自签名证书:
mkdir -p /opt/signcert && cd /opt/signcert
openssl req -x509 -newkey rsa:4096 -keyout OpenLiteSpeed-key.pem -out OpenLiteSpeed-cert.pem -nodes -days 365
在生成证书的过程中,会提示你输入一些信息,如国家、地区、组织等,这些信息可以随意填写,因为主要目的是生成证书文件。
证书生成后,需要将其替换到 Nginx 的证书目录中,让 Nginx 使用这个自签证书来为虚假网站提供 HTTPS 服务。假设你的 Nginx 证书目录为/www/server/panel/vhost/cert/
`ip.com/`,执行以下命令进行证书替换:
cat /opt/signcert/OpenLiteSpeed-cert.pem > /www/server/panel/vhost/cert/ip.com/fullchain.pem
cat /opt/signcert/OpenLiteSpeed-key.pem > /www/server/panel/vhost/cert/ip.com/privkey.pem
最后,重启 Nginx 服务,使新的证书生效:
/etc/init.d/nginx restart
完成上述步骤后,还需要将这个假站点设置为默认站点。在 Nginx 的配置文件中,找到与默认站点相关的配置部分,将其指向刚刚创建的虚假网站目录。例如,在/etc/nginx/nginx.conf
或相关的站点配置文件中,找到类似以下的配置代码:
server {
listen 80 default_server;
server_name _;
root /var/www/fake_site;
# 其他配置项
}
这样,当 Censys 或其他攻击者扫描 IP 时,他们获取到的只是这个虚假网站的信息,而真正的源站 IP 则隐藏在背后,安然无恙。
写在最后
源站 IP 的安全防护绝非一朝一夕之功,而是一场需要长期坚持的艰苦战斗。SSL 证书虽然在网络安全体系中扮演着重要的角色,但如果配置不当,就如同在坚固的城堡中埋下了一颗定时炸弹,随时可能引发安全漏洞。我们必须时刻保持高度的警惕性,密切关注网络安全领域的最新动态,不断学习和掌握新的防护技术和方法,及时更新和完善我们的防护策略。
希望通过本文的详细介绍,能够帮助大家更加深入地了解 SSL 证书与源站 IP 泄漏之间的微妙关系,同时熟练掌握各种有效的防护方法。让我们共同努力,为我们的网站在复杂多变的网络环境中打造一个坚不可摧的安全环境。如果你在实践过程中遇到了任何问题,或者积累了宝贵的经验,欢迎在评论区留言分享,让我们一起共同进步,共同守护网络安全的防线。
参考文献
- 别让 SSL 证书暴露了你的源站 IP - Sakimir - 博客园
- 如何屏蔽/退出 Censys 检测真实服务器 IP 地址 - 腾讯云开发者社区
- 阻止 Censys 的扫描以保护自己的网站和服务器
- 屏蔽 Censys,防止源站 IP 泄露
- Opt Out of Data Collection - Censys Support
参考:https://www.v2ex.com/t/1108651
内容很不错呢 OωO