域名劫持问题分析与解决方案
📋 问题描述
现象
- 访问
ky.xiaojieyahu.top
会指向au.xiaojieyahu.top
的内容 - 新建的二级域名
asd.xiaojieyahu.top
也会显示au.xiaojieyahu.top
的内容 - 明明是两个不同的站点,但内容却相同
用户困惑
- 已删除DNS泛域名解析,但问题依然存在
- 担心是否遭受了域名劫持攻击
🔍 根本原因分析
1. DNS解析层面
# 查询结果显示
asd.xiaojieyahu.top → XXX.XXX.XXX.XXX (你的服务器IP)
ky.xiaojieyahu.top → XXX.XXX.XXX.XXX (另一个服务器IP)
原因:
- 可能存在泛域名解析
*.xiaojieyahu.top
- 或者有单独的A记录配置
- DNS缓存导致删除后仍然生效
2. Nginx配置层面
通过分析服务器配置发现关键问题:
原始默认配置
# nginx默认配置文件
server {
listen 80;
server_name _;
index index.html;
root /var/www/html;
}
问题所在
- 没有
default_server
标识 - 当访问未配置的域名时,Nginx会选择第一个匹配的虚拟主机
au.xiaojieyahu.top
按字母顺序排在前面,成为了默认站点
3. Nginx虚拟主机匹配规则
访问流程:
1. 用户访问 asd.xiaojieyahu.top
2. DNS解析到服务器IP
3. 请求到达Nginx服务器
4. Nginx查找匹配的server_name
5. 找不到 asd.xiaojieyahu.top 的配置
6. 使用第一个虚拟主机 au.xiaojieyahu.top
7. 显示 au.xiaojieyahu.top 的内容
🛡️ 解决方案
方案一:修改默认虚拟主机(推荐)
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
# SSL配置(防止SSL错误)
ssl_certificate /path/to/your/cert/fullchain.pem;
ssl_certificate_key /path/to/your/cert/privkey.pem;
# 为未配置的域名返回404页面
location / {
return 404 "Domain not configured / 域名未配置";
}
}
优点:
- ✅ 符合HTTP标准
- ✅ 用户体验友好
- ✅ 防止域名劫持
- ✅ 不影响正常站点
方案二:返回444状态码(不推荐)
server {
listen 80 default_server;
listen 443 ssl default_server;
server_name _;
return 444; # 直接关闭连接
}
缺点:
- ❌ 浏览器显示
ERR_HTTP2_PROTOCOL_ERROR
- ❌ 用户体验差
- ❌ 不符合HTTP标准
方案三:DNS层面解决
- 删除泛域名解析
*.xiaojieyahu.top
- 删除不需要的单独A记录
- 清除DNS缓存
🔧 实施步骤
1. 修改Nginx配置
# 编辑默认配置文件
vim /path/to/nginx/default.conf
# 测试配置
nginx -t
# 重载配置
nginx -s reload
2. 验证效果
# 测试未配置域名
curl -I -H "Host: test.yourdomain.top" http://YOUR_SERVER_IP/
# 预期结果: HTTP/1.1 404 Not Found
# 测试正常域名
curl -I -H "Host: yourdomain.top" http://YOUR_SERVER_IP/
# 预期结果: HTTP/1.1 301 Moved Permanently
3. DNS清理
- 登录DNS管理面板(如DNSPod)
- 删除不需要的A记录
- 清除本地DNS缓存
📊 测试结果
修复前
未配置域名 → 显示其他站点内容 ❌
访问未配置域名 → 内容泄露风险 ❌
修复后
未配置域名 → 404 "Domain not configured / 域名未配置" ✅
正常域名 → 正常重定向到HTTPS ✅
其他已配置域名 → 正常访问 ✅
🔐 安全效果
防护措施
- 防止域名劫持 - 未配置域名无法访问站点内容
- 防止内容泄露 - 避免敏感信息被恶意域名获取
- SEO保护 - 防止重复内容影响搜索排名
- 品牌保护 - 避免恶意域名冒充官方站点
安全检查清单
- [x] 配置默认虚拟主机
- [x] 返回适当的HTTP状态码
- [x] 测试未配置域名访问
- [x] 验证正常域名功能
- [x] 清理DNS记录
- [x] 监控异常访问
💡 预防措施
1. DNS管理
- 定期检查DNS记录
- 避免使用泛域名解析(除非必要)
- 及时删除不需要的子域名记录
2. 服务器配置
- 始终配置默认虚拟主机
- 使用白名单方式配置域名
- 定期审查Nginx配置
3. 监控告警
- 监控异常域名访问
- 设置404错误日志告警
- 定期检查访问日志
📝 总结
这次问题不是真正的域名劫持攻击,而是由于:
- DNS泛域名解析配置
- Nginx默认虚拟主机机制
- 缺乏适当的安全配置
通过修改Nginx默认配置,我们成功:
- ✅ 阻止了未配置域名的访问
- ✅ 保护了网站内容安全
- ✅ 提供了用户友好的错误提示
- ✅ 维持了正常站点的功能
这是一个典型的服务器配置安全问题,通过正确的配置可以有效防范。
创建时间:2025-09-18
问题状态:✅ 已解决
风险等级:🟡 中等(已修复)
3 条评论
ヾ(≧∇≦*)ゝ
ヾ(≧∇≦*)ゝ
|´・ω・)ノ