刘慈欣说过,技术本身并没有善恶,只是人性的放大器。而从 Censys 这种扫描程序背后,我看到的人性更多是恶,只因为它轻而易举地就把你煞费苦心隐藏的信息全部公开了出来。
Censys、Shodan 等等扫描程序在网络安全大佬看来,自然是掌上明珠。但对于更多的程序员、站长甚至云厂商而言,应该是个不折不扣的撒旦。“CDN 我用上了,高防 IP 也花了我不少钱,可为什么服务器总是那么不争气”可能是曾经饱受 Censys 折磨的每一个人共同的经历。Censys 降低了发动网络攻击的成本,让那些囊中羞涩的脚本小子也敢对你的邮箱发送勒索信。
我初识 Censys 是在一个讨论 CloudFlare 的技术群里。然而,这个群里的一部分人却总是在讨论如何发现隐藏在 CloudFlare CDN 之下的源站地址。发动 DDoS 攻击?不行,CloudFlare 的防护能力实在太过强大;投诉侵犯版权?也不行,CloudFlare 只会转发投诉给源站提供商,最多暂停提供服务,但就是不给你源站。各种歪门邪道都提了一遍,才看到有人发:“要不用 Censys 试试看?”结果一搜一个准。
我想,你点进来的目的,应该是为了学习如何减轻 Censys 这种东西对你服务器的影响,比如泄露源站 IP 地址、暴露 SSH 端口。那废话不多说,我们开始。
我仅以一个网络安全三脚猫的身份撰文,本文内容也仅适用于 Linux 与 Nginx ,因此以下方法仅供参考。
Nginx 默认站点
请单独创建一个子目录并设置为默认站点,就像这样
你需要把默认的前几行配置文件改成这样
代码语言:javascript复制server
{
listen 80 default_server;
listen 443 ssl http2 default_server;
并且,你应该为它添加一张自签名的 SSL 证书,但证书内不应包含任何与域名、IP 相关的信息,包括但不限于 CommonName、EmailAddress。至于为什么。
这么做的目的,是为了有些别有用心的人在访问 https://ip 的时候暴露本不应出现的证书信息。
防火墙
屏蔽 IP
Censys 在 Opt Out of Scanning 中给出了他们用于扫描的 IP 段。因此,你只需要在服务器内运行 iptables 或 firewalld 等命令,或者在服务器后台控制面板处屏蔽如下 IP 即可:
代码语言:javascript复制162.142.125.0/24
167.94.138.0/24
167.94.145.0/24
167.94.146.0/24
167.248.133.0/24
192.35.168.0/23
2620:96:e000:b0cc:e::
但是,Censys 并不会因此而删除已被记录的数据。如果你已经在 Censys 上发现了有关你服务的信息,请先更换公网 IP 后再这么做。
屏蔽 UA
Censys 也给出了用于扫描的 User Agent,请屏蔽它。你可以创建一个 block_censysua.conf
的文件:
if ($http_user_agent ~ "Mozilla/5.0 (compatible; CensysInspect/1.1; https://about.censys.io/)")
{
return 418;
}
然后在 nginx.conf
的 server
或者 location
中引用它
include block_censysua.conf;
开放端口
我曾经看到很多新手一拿到服务器就 iptables -P INPUT ACCEPT
一把梭,甚至还有 apt-get purge netfilter-persistent
,这是极不推荐的。请按需开放端口,如果你要建站,那么除了 80 443
端口,剩下的只需要开放你的 SSH 端口就可以了。如果你只用 VNC 登录,那 SSH 端口甚至都可以不开放。
另外,如果你使用了宝塔面板,请一定要修改默认登录端口 8888
——因此受害的人不在少数。
DNS
如果你前边的措施都还没做,就已经为域名解析好了源站的 IP,请赶快删除解析。不少扫描解析记录的网站也会暴露你的源站地址,甚至都不需要 Censys 出场。
另外,请使用具有一定攻击防护能力的 DNS。很多人以为自己的服务器已经固若金汤了,可 DNS 一被攻击,网站照样站不起来。
那 DNS 怎么解析?看下一小节。
CDN 与高防 IP
用好 CDN,进可加速,退可防护。高防 IP 同理,其实都是起到一个代理和转发的作用。如果预算充足,不要吝啬,为你所有的子域名都用上 CDN。有时候往往就是一个没有使用 CDN 的子域名暴露了你的源站地址。
网站托管
把网站托管分到 CDN 下,说对也不对。网站托管,比如腾讯云 Webify 和各种云厂商对象存储中的静态网站托管服务,都能为你的网站提供强大的源站基础,毕竟 SLA 放在那里,被攻击了也不会停,流量相比业务正常运行,又能贵到哪里去呢?
不对的,是在于如果你想全量把网站搬到网站托管平台,那就必须是静态站,很多只有动态网站才能实现的功能也会因此受限。
如果你想找三流小公司提供的那些企业官网、个人笔记代搭建,那只好自求多福了。
SSL
请尽量签发通配符证书,比如 *.princewen.com
,而不是为 ww1.princewen.com
ww2.princewen.com
和 ww3.princewen.com
分别签发三张证书。你签发了哪些证书,在 crt.sh 可是全都能查到的。
另外,如果你在开头的 nginx 默认站点 那里选择使用自签证书,那么证书链内一定不要包含任何与域名、IP 有关的内容,censys 的扫描细度会让你意想不到。
为了安全,截图中的数据已被编辑
日常该做的
日志
定期查看 Nginx 日志,发现可疑的 IP 或访问路径时,请按照 屏蔽 IP 直接屏蔽,免得日后生事。
不留联系方式
如果有人使用 Censys 等扫描程序是为了攻击你,那么最终目的往往离不开钱。不留联系方式,攻击者不知道如何勒索你,甚至你也不知道该怎样被勒索。
少去检测网站
检测网站往往会为你的每一次测试进行排行,而这就正好为攻击者提供了名单。更有甚者,会公布一些除了你没人知道的子域名,比如 myssl.com
君子协定
如果你采取了以上所有的措施,却仍然没有任何效果的话,humans.txt 和 robots.txt 可能会成为你感化攻击者的唯一方式。
报警
如果你的网站完成了 ICP 备案,且使用的是中国境内的服务器,请不要怜悯对面,警察叔叔更不会,即使攻击的流量并不大。
这会是最后一道防线。
我的博客即将同步至腾讯云 社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1hfr53h7bhvim