域名与 DNS 安全:实用清单
简短回答:谁控制了你的域名,谁就控制了你的网站、你的邮件,以及谁能以你的名义获取证书。用两步验证保护注册商账户,开启自动续费和转移锁,发布指明你所用证书颁发机构的 CAA 记录,如果 DNS 服务商支持就启用 DNSSEC,并删除指向不再使用的服务的 DNS 记录。
快速步骤
- 保护注册商账户. 两步验证登录、使用其他域名的恢复邮箱,以及共享的所有者账户。
- 绝不让域名过期. 开启自动续费,并保持付款卡有效。
- 锁定转移. 确认域名状态显示 clientTransferProhibited。
- 添加 CAA 记录. 只允许你实际使用的证书颁发机构。
- 启用 DNSSEC. 在 DNS 服务商处签名区域,并在注册商处发布 DS 记录。
- 删除悬空记录. 删除指向不再使用的服务的 CNAME 和其他记录。
代码和配置保持英文。
为什么域名是你最重要的账户
如果有人接管了你的注册商账户或 DNS,他们就能把你的网站指向自己的服务器,读取你收到的邮件,并通过证书颁发机构使用的域名验证,让浏览器在他们的仿冒网站上显示有效的锁形图标。DNS 一旦失守,任何服务器加固都无济于事。大部分防护只是几项一次性设置。
1. 保护注册商和 DNS 账户
- 在注册商和 DNS 服务商(通常是同一家公司,或 Cloudflare)处开启双因素认证。
- 使用另一个域名下的恢复邮箱。如果恢复邮箱就在该域名上,而域名停止工作,你将收不到重置邮件。
- 以公司名义注册域名,使用共享的职能邮箱,而不是前员工或建站代理公司的名义。
- 记录谁拥有访问权限,并移除已离开的人。
2. 绝不让域名过期
过期的域名有时几天内就会被别人买走,连同仍在流入的流量和邮件。开启自动续费,保持银行卡有效,并检查到期日期和状态码:
whois yourdomain.com | grep -iE 'expir|status'3. 开启转移锁
在上面的状态行中,你应该看到 clientTransferProhibited。这表示在你自己解锁之前,域名无法转移到其他注册商。大多数注册商称之为“registrar lock”或“转移锁”。对于高价值域名,可以咨询你的域名后缀是否提供 registry lock 服务(注册局级别的锁定,只有经过人工验证才能更改)。
4. 发布 CAA 记录
CAA 记录列出了允许为你的域名签发证书的证书颁发机构;每个公共 CA 在签发前都必须检查它。先弄清楚你的主机商或 CDN 使用哪家 CA,然后发布类似下面的记录(此示例只允许 Let’s Encrypt,并禁止通配符证书):
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"dig +short CAA yourdomain.com注意:如果你的 CDN 或主机商通过另一家未列出的 CA 签发证书,它们的续期将会失败。很多 CDN 都在文档中说明了需要添加哪些 CAA 值,有些还会替你添加。
5. 启用 DNSSEC
DNSSEC 会对你的 DNS 应答进行签名,让进行验证的解析器能够识别伪造的应答。在 DNS 服务商处开启它,然后在注册商处添加服务商提供的 DS 记录(如果注册商同时托管你的 DNS,很多会自动完成)。确认 DS 记录存在,并且验证型解析器会设置 ad(已认证数据)标志:
dig +short DS yourdomain.com
dig @1.1.1.1 +dnssec yourdomain.com A | grep -E 'flags:'一个提醒:把 DNS 迁移到其他服务商时,先删除 DS 记录(或按照新服务商的 DNSSEC 迁移步骤操作),否则验证型解析器将完全无法解析你的域名。
6. 删除悬空记录(子域名接管)
“悬空”记录指向一个你已不再使用的服务:已删除的云存储桶、旧的落地页工具、已关闭的主机账户。如果别人能在同一服务上认领这个名称,他们就能控制你子域名上的内容,而地址栏里显示的是你的域名。从 DNS 服务商处导出子域名列表,检查每个 CNAME 指向哪里:
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 记录仍指向一个已删除的外部服务时,别人可能认领该资源,并在你的子域名上发布内容。删除这条记录即可消除风险。
只靠转移锁足以保护我的域名吗?
它能阻止悄无声息地转移到其他注册商,但挡不住登录你注册商账户的人。该账户的两步验证登录才是最重要的。