开头:你的网站被恶意子域名“绑架”了
你可能已经发现了:网站流量突然暴涨,但转化率却跌到冰点。或者更糟——搜索引擎突然给你发来“网站被黑”的警告,排名一夜之间消失。别急着怀疑服务器被黑,先看看你的子域名列表。恶意注册子域名是个老问题,但最近几年随着云计算和自动化工具的普及,它成了很多站长的噩梦。攻击者用你的主域名生出成千上万个子域名,用来发垃圾邮件、挂黑链、搞钓鱼,甚至做色情内容。而你的主域名,得替它们背锅。我见过一个案例:某中小电商,辛苦做了两年的SEO,被一个恶意子域名“test.shop.example.com”搞到降权,流量直接腰斩。处理方案不复杂,但得动手。
为什么恶意子域名能让你“社死”?
搜索引擎不认主域名和子域名的边界。 从Google到百度,爬虫抓取时会把所有子域名视为你网站的一部分。如果一个恶意子域名挂了大量垃圾外链或违规内容,搜索引擎会认为你的网站有安全问题,直接降权甚至K站。更恶心的是,攻击者经常用“通配符DNS”漏洞。如果你在DNS设置里开了“*.example.com”,他们就能自动生成任意子域名——比如“free-iphone.example.com”或“xxx.example.com”。你防不胜防。
真实案例: 我帮一个客户处理过类似问题。他的主域名是“techblog.com”,某天突然发现百度收录了上千个“123.techblog.com”之类的页面,内容全是赌博推广。他一开始以为是服务器被入侵,查了半天日志才发现是DNS配置问题。攻击者用自动脚本扫描到通配符DNS,然后批量注册子域名。最后他花了三天清理,但排名恢复用了整整两个月。所以说,别等出事了再动手。
怎么快速发现恶意子域名?3个方法
1. 手动查DNS记录。 用 dig 或 nslookup 查你的域名。比如在终端输入 dig example.com any,看返回的A记录和CNAME记录里有没有你不认识的子域名。如果看到“malware.example.com”或“free-xxx.example.com”,基本就是中招了。这个方法简单,但只适合小规模发现。如果攻击者注册了成千上万个,你靠手动查会累死。
2. 用搜索引擎的site:命令。 在Google或百度里搜 site:example.com,然后翻看结果。恶意子域名通常有奇怪的前缀,比如“test”、“api”、“admin”、“free”后面跟数字或乱码。你还可以加关键词过滤,比如 site:example.com “free” 或 site:example.com inurl:123。这个方法能快速看到搜索引擎已经收录的恶意页面,但缺点是只能发现已经被索引的,有些刚注册的你可能漏掉。
3. 自动扫描工具。 如果你会点技术,用 sublist3r 或 Amass 这类工具跑一遍。它们能枚举大量子域名,输出列表后你手动对比。不会用的话,网上有在线子域名扫描器,输入你的域名就能看到结果。但注意:这些工具依赖公共数据源,可能漏掉一些隐藏的子域名。所以最好结合手动查。
发现恶意子域名后,先别急着删
很多人第一反应是删掉DNS记录或服务器文件,但这么干可能打草惊蛇。 攻击者可能留了后门,你一删他立刻换新域名。正确做法是:先取证。把恶意子域名的IP、注册时间、内容截图都保存下来。然后查服务器日志,看这些子域名是怎么被创建的。通常有三种来源:
- 通配符DNS漏洞:你的DNS配了“*”号,攻击者直接生成。
- 服务器漏洞:比如你用了旧版Apache或Nginx,攻击者通过脚本创建虚拟主机。
- 第三方服务:比如你在Cloudflare或AWS上开了子域名托管,但没限制权限。
真实案例: 有个朋友的公司用阿里云,他们开了CDN,但没限制子域名创建。攻击者利用CDN的API批量注册了上百个“cdn-xxx.example.com”的子域名,全用来做恶意跳转。他们一开始以为是服务器被黑,查了三天日志才发现是CDN配置问题。最后他们关了CDN的自动子域名功能,才彻底解决。
怎么彻底阻止恶意子域名?5个步骤
1. 关掉通配符DNS。 这是最基础的。去你的DNS管理面板,把“*.example.com”的A记录删掉。如果你需要通配符功能(比如用于子域名分发),改用白名单模式——只允许你手动添加的子域名解析。
2. 限制服务器虚拟主机。 如果你用Apache,检查 httpd.conf 或虚拟主机配置文件,确保没有 ServerAlias *.example.com 这种配置。Nginx同理,检查 server_name 字段。如果你用面板(比如cPanel),关掉“允许用户创建子域名”的选项。
3. 用CSP(内容安全策略)限制。 在HTTP响应头里加 Content-Security-Policy: default-src 'self',这样浏览器会拒绝加载来自非你主域名的资源。但注意:这个只防前端,不防后端。
4. 配置HSTS预加载。 强制HTTPS连接,可以防止攻击者用HTTP伪造子域名。但前提是你已经全站HTTPS。Google和百度都支持HSTS,配置后恶意子域名很难被收录。
5. 定期监控。 用脚本每天跑一次子域名枚举,对比白名单。发现未知子域名立刻报警。你可以用cron job配合 sublist3r 或 dnsrecon,输出结果到邮箱。
如果恶意子域名已经被搜索引擎收录了怎么办?
别慌,按这个顺序操作:
- 1. 向搜索引擎提交“网站移除”请求。 在Google Search Console里,点“移除” -> “移除内容” -> “选择URL前缀”,输入恶意子域名。百度站长平台也有类似功能。注意:这个只是临时隐藏,不会删除索引。
- 2. 用
robots.txt阻止爬虫。 在你的主域名根目录下创建robots.txt,加上Disallow: /针对恶意子域名。但这个方法有局限:如果恶意子域名有自己的独立服务器,爬虫可能不读你的主域名robots。 - 3. 用
nofollow和noindex标签。 如果恶意子域名是用你的服务器生成的,可以在页面源代码里加<meta name="robots" content="noindex, nofollow">。但攻击者通常不会让你控制他们的页面代码,所以这个方案只适用于你自己服务器上的子域名。 - 4. 向搜索引擎举报。 在Google的“垃圾内容举报”页面提交链接,说明这是恶意子域名。百度也有类似渠道。这个方法效果不错,但需要时间。
真实案例: 我处理过一个博客,恶意子域名“spam.blog.example.com”被百度收录了200多页。我用robots.txt和移除请求同时操作,两天后百度开始逐步删除。但主域名的排名恢复花了三周,因为搜索引擎需要重新评估你主域名的安全性。
结尾:今天就能做的1个操作
打开你的DNS管理面板,检查有没有通配符“*”的A记录。如果有,立刻删掉。然后去Google Search Console或百度站长平台,查一下“手动操作”或“安全问题”报告,看有没有恶意子域名的记录。没有的话,用site:命令快速扫一遍。做完这两个动作,你就堵住了恶意子域名最大的入口。剩下的细节,可以慢慢优化。