以非专业身份,我负责管理大约 18 个域名的 DNS:大部分是直系亲属的个人/虚荣域名。整个工作外包给一家廉价的托管服务提供商,他们有一个 Web 界面,我可以通过该界面管理区域。
这些域名并不重要,因此针对它们的攻击似乎比对我的提供商系统的全面入侵更不可能,因为在这种情况下,他们所有客户的记录都可能被更改以误导流量(可能具有极长的 TTL)。DNSSEC 可以缓解此类攻击,但前提是区域的私钥不由托管提供商持有。
因此,我想知道:如何才能使 DNSSEC 私钥保持离线状态但仍将签名的区域转移到外包 DNS 主机?
最明显的答案(至少对我来说)是运行自己的影子/隐藏主机(提供商可以从中作为从属),然后根据需要将离线签名的区域文件复制到主机。
问题是我(想要*)控制的唯一机器是我的个人笔记本电脑,它通常通过典型的家用 ADSL 连接(即通过动态分配的 IP 地址在 NAT 后面)。让它们从那里进行从属(例如,在Expiry
我的笔记本电脑离线/不可用时,在区域上停留很长时间)不仅需要一个动态 DNS 记录,它们可以从那里进行从属(如果它们确实可以从命名主机而不是显式 IP 地址进行从属),而且还需要我在笔记本电脑上运行 DNS 服务器,并将其和我的家庭网络都开放以接收传入的区域传输请求:这并不理想。
我会更喜欢一种更加推送导向的设计,由我的笔记本电脑启动将离线签名的区域文件/更新传输给提供商。
我研究了它是否nsupdate
符合要求:文档有点粗略,但我的测试(使用 BIND 9.7)表明它确实可以更新 DNSSEC 区域,但仅限于服务器持有执行区域签名的密钥的区域;我还没有找到让它进行包括相关 RRSIG/NSEC/等记录的更新并让服务器接受它们的方法。这是一个受支持的用例吗?
如果没有,我怀疑唯一能满足要求的解决方案将涉及非基于 DNS 的区域更新传输,并欢迎托管服务提供商(希望是便宜的)支持的建议:SFTP/SCP?rsync?RDBMS 复制?专有 API?
最后,这种设置的实际意义是什么?密钥轮换对我来说是一个明显的困难,特别是当我的笔记本电脑长时间离线时。但这些区域非常稳定,所以也许我可以使用长寿命的 ZSK ** ...?
* 虽然我可以在外包的 VPS 上运行影子/隐藏主控,但我不喜欢必须保护/管理/监控/维护另一个系统的开销;更不用说这样做的额外财务成本。
** 好的,这将使坚定的攻击者能够重放过期的记录 - 但在这些域的情况下,这种风险和影响都是可以容忍的。
答案1
您的问题不是密钥轮换,而是RRSIG
密钥过期。
钥匙的使用寿命通常为 6 个月到 3 年,而且越来越多的人认为你根本不应该更换钥匙。
但是为了避免重放攻击,您需要定期重新签署所有记录,有效期RRSIG
通常为 1 到 2 周。
如果你自己签署了区域并将其转移到主机,则需要在每个 RRSIG 到期事件之前执行此操作,同时考虑 TTL 到期等(请参阅草案-ietf-dnsop-dnssec-密钥定时和RFC 4641)。
如果你的 DNS 提供商运行正常,他们应该有一个(非常)长寿命的密钥签名密钥它应该保存在硬件安全模块中,并且只在需要时才上线,这样才应该是有效不可渗透的。
只有区域签名密钥则需要保持在线。