防止域名被劫持的关键在于使劫持结果无法生效、难以持久或立即暴露:启用dnssec并确保信任链完整(提交ds记录)、配置caa限制证书签发、清理悬空dns记录、固化可信解析路径(手动指定多源递归dns并锁定hosts文件)。

防止域名被劫持,关键不在“堵住所有入口”,而在于让劫持后的解析结果无法生效、难以持久、或第一时间暴露。DNS 记录配置是第一道可控防线,直接决定攻击者能否篡改后长期得逞。
启用 DNSSEC 并确保信任链完整
DNSSEC 不加密查询,而是为每条 DNS 响应附加数字签名,使递归解析器能验证数据是否来自合法权威服务器、是否中途被篡改。签名失效即拒绝使用该响应。
- 在权威 DNS 服务商(如 Cloudflare、阿里云 DNS)后台开启 DNSSEC,并生成 ZSK/KSK 密钥对;优先选用 ECDSA P-256 签名算法
- 将生成的 DS 记录提交至域名注册商——这是激活信任链的关键一步,否则下游无法向上追溯验证
- 确认父域(如 .com、.cn)已收录你的 DS 记录,可用 dig example.com DNSKEY +dnssec 或在线工具(如 dnsviz.net)验证签名状态
- 避免仅在客户端开启验证却忽略上游签名:若权威服务器未签、注册商未提交 DS,验证始终失败,形同虚设
配置 CAA 记录限制证书滥发
即使域名被劫持指向恶意 IP,若攻击者无法为其申请有效 HTTPS 证书,钓鱼页面就容易暴露(无锁图标、浏览器警告)。CAA 记录强制 CA 机构在签发前检查授权,大幅提高伪造门槛。
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 在 DNS 管理后台添加 CAA 记录,例如:0 issue "letsencrypt.org"(仅允许 Let's Encrypt 签发)
- 可同时设置 issuewild 控制通配符证书,以及 iodf 指定违规通知邮箱,便于及时发现异常申请
- 注意:CAA 对子域名也生效,建议主域和关键子域(如 www、shop、api)均单独配置,避免遗漏
清理悬空记录,杜绝子域名接管风险
当 CNAME 或 ALIAS 记录仍指向已下线的云资源(如删除的 Azure App Service、停用的 GitHub Pages),该子域即成“悬空 DNS”,极易被攻击者复用同一 FQDN 重新部署恶意服务并完成接管。
- 定期扫描全部 DNS 记录,重点排查 CNAME 类型,核对目标地址是否仍为活跃、受控资源
- 资源下线前必须同步删除对应 DNS 记录;若需保留跳转,改用 301 重定向而非 DNS 层指向
- 对开发/测试环境使用的临时子域(如 dev.example.com、staging.example.com),建立生命周期管理流程,自动标记过期时间并触发清理提醒
固化可信解析路径,减少中间环节依赖
不依赖单一、易被污染的 DNS 递归服务,从源头压缩劫持生效空间。
- 禁用网卡“自动获取 DNS”,手动指定至少两个不同体系的可信递归 DNS,例如:223.5.5.5(阿里DNS)+ 1.1.1.1(Cloudflare)
- 在路由器或本地 DNS 服务(如 systemd-resolved、unbound)中启用 DNSSEC 验证和 DoT/DoH 加密上行,使局域网出口统一执行校验
- 检查并锁定 hosts 文件,删除可疑条目;Linux/macOS 可执行 chmod 444 /etc/hosts,Windows 可设为只读属性,防恶意软件写入










