指南 · 约 4 分钟阅读

域名与 DNS 安全:实用清单

简短回答:谁控制了你的域名,谁就控制了你的网站、你的邮件,以及谁能以你的名义获取证书。用两步验证保护注册商账户,开启自动续费和转移锁,发布指明你所用证书颁发机构的 CAA 记录,如果 DNS 服务商支持就启用 DNSSEC,并删除指向不再使用的服务的 DNS 记录。

更新于 · HackGrade

先检查你的网站。 免费扫描会告诉你需要做哪些修复。 网站安全检测

快速步骤

  1. 保护注册商账户. 两步验证登录、使用其他域名的恢复邮箱,以及共享的所有者账户。
  2. 绝不让域名过期. 开启自动续费,并保持付款卡有效。
  3. 锁定转移. 确认域名状态显示 clientTransferProhibited。
  4. 添加 CAA 记录. 只允许你实际使用的证书颁发机构。
  5. 启用 DNSSEC. 在 DNS 服务商处签名区域,并在注册商处发布 DS 记录。
  6. 删除悬空记录. 删除指向不再使用的服务的 CNAME 和其他记录。

代码和配置保持英文。

为什么域名是你最重要的账户

如果有人接管了你的注册商账户或 DNS,他们就能把你的网站指向自己的服务器,读取你收到的邮件,并通过证书颁发机构使用的域名验证,让浏览器在他们的仿冒网站上显示有效的锁形图标。DNS 一旦失守,任何服务器加固都无济于事。大部分防护只是几项一次性设置。

1. 保护注册商和 DNS 账户

  • 在注册商和 DNS 服务商(通常是同一家公司,或 Cloudflare)处开启双因素认证。
  • 使用另一个域名下的恢复邮箱。如果恢复邮箱就在该域名上,而域名停止工作,你将收不到重置邮件。
  • 以公司名义注册域名,使用共享的职能邮箱,而不是前员工或建站代理公司的名义。
  • 记录谁拥有访问权限,并移除已离开的人。

2. 绝不让域名过期

过期的域名有时几天内就会被别人买走,连同仍在流入的流量和邮件。开启自动续费,保持银行卡有效,并检查到期日期和状态码:

Terminal
whois yourdomain.com | grep -iE 'expir|status'

3. 开启转移锁

在上面的状态行中,你应该看到 clientTransferProhibited。这表示在你自己解锁之前,域名无法转移到其他注册商。大多数注册商称之为“registrar lock”或“转移锁”。对于高价值域名,可以咨询你的域名后缀是否提供 registry lock 服务(注册局级别的锁定,只有经过人工验证才能更改)。

4. 发布 CAA 记录

CAA 记录列出了允许为你的域名签发证书的证书颁发机构;每个公共 CA 在签发前都必须检查它。先弄清楚你的主机商或 CDN 使用哪家 CA,然后发布类似下面的记录(此示例只允许 Let’s Encrypt,并禁止通配符证书):

DNS zone
yourdomain.com.  3600  IN  CAA  0 issue "letsencrypt.org"
yourdomain.com.  3600  IN  CAA  0 issuewild ";"
yourdomain.com.  3600  IN  CAA  0 iodef "mailto:security@yourdomain.com"
Terminal
dig +short CAA yourdomain.com

注意:如果你的 CDN 或主机商通过另一家未列出的 CA 签发证书,它们的续期将会失败。很多 CDN 都在文档中说明了需要添加哪些 CAA 值,有些还会替你添加。

5. 启用 DNSSEC

DNSSEC 会对你的 DNS 应答进行签名,让进行验证的解析器能够识别伪造的应答。在 DNS 服务商处开启它,然后在注册商处添加服务商提供的 DS 记录(如果注册商同时托管你的 DNS,很多会自动完成)。确认 DS 记录存在,并且验证型解析器会设置 ad(已认证数据)标志:

Terminal
dig +short DS yourdomain.com
dig @1.1.1.1 +dnssec yourdomain.com A | grep -E 'flags:'

一个提醒:把 DNS 迁移到其他服务商时,先删除 DS 记录(或按照新服务商的 DNSSEC 迁移步骤操作),否则验证型解析器将完全无法解析你的域名。

6. 删除悬空记录(子域名接管)

“悬空”记录指向一个你已不再使用的服务:已删除的云存储桶、旧的落地页工具、已关闭的主机账户。如果别人能在同一服务上认领这个名称,他们就能控制你子域名上的内容,而地址栏里显示的是你的域名。从 DNS 服务商处导出子域名列表,检查每个 CNAME 指向哪里:

Terminal
for h in www shop blog staging old mail; do
  t=$(dig +short CNAME "$h.yourdomain.com")
  [ -n "$t" ] && echo "$h -> $t ($(dig +short "$t" | head -n1))"
done

括号为空表示目标已无法解析:查明它原来是什么,然后删除这条记录。即使目标仍能解析,如果背后的账户已经关闭,也可能是悬空记录,所以请逐个打开子域名,确认显示的是你预期的内容。在取消某项服务之前,先删除指向它的 DNS 记录。

7. 保护同一域名下的邮件

发布 SPF 和 DMARC,让别人无法发送看起来像来自你的邮件,并为每个代你发信的服务添加 DKIM 密钥。参见小企业的 SPF、DKIM 和 DMARC 指南。从不发送邮件的域名应发布 v=spf1 -all 和 reject 级别的 DMARC 策略。

HackGrade 会检查什么

免费扫描会检查 HTTPS、你的证书,以及域名的 SPF 和 DMARC 记录。它不检查注册商设置、CAA、DNSSEC 或悬空记录,所以这些请使用本清单,并在每次新增或停用服务时重新检查。

常见问题

小企业网站需要 DNSSEC 吗?

建议启用。在大多数现代 DNS 服务商处,只需一项设置,再在注册商处添加一条 DS 记录。主要风险是在更换 DNS 服务商时导致解析中断,所以请按迁移步骤操作。

如果 CAA 记录里写错了 CA 会怎样?

未列出的 CA 签发和续期证书都会失败,网站最终可能使用过期证书。发布 CAA 之前,请先确认你的主机商或 CDN 使用哪家 CA。

什么是子域名接管?

当 DNS 记录仍指向一个已删除的外部服务时,别人可能认领该资源,并在你的子域名上发布内容。删除这条记录即可消除风险。

只靠转移锁足以保护我的域名吗?

它能阻止悄无声息地转移到其他注册商,但挡不住登录你注册商账户的人。该账户的两步验证登录才是最重要的。

参考资料

相关指南

免费 · 即时 · 无需注册

抢在别人之前了解你的评级。

被动扫描。未经你的许可,不会进行任何攻击性检测。

免费开始。Pro 每月 29 美元起(按年付费约合每月 24 美元),或 29 美元购买一次性完整报告。 查看价格