我打算用 DNSSEC 签署我的 DNS 区域。我的区域、注册商和我的 DNS 服务器 (BIND9) 都支持 DNSSEC。唯一不支持 DNSSEC 的是我的二级域名服务器提供商(即buddyns.com)。
在他们的网站上,他们对 DNSSEC 进行了说明:
BuddyNS 不支持 DNSSEC,因为它暴露了一些不适合大容量 DNS 服务的漏洞。
好吧,我认为 DNSSEC 的使用目前在某种程度上是有问题的,因为大多数解析器不检查记录是否正确签名。我不知道的是 - 根据他们的声明 - 似乎提供它会暴露某种安全漏洞。
这些“漏洞”是什么?
大约一周前,我在我的主域上启用了 DNSSEC。它不是一个主要网站或任何东西——只是我用于电子邮件等的个人域名(TLD:com;DNSSEC 算法 13;权威 DNS 提供商:Cloudflare)。
在过去 24 小时内,该域已收到 15,605 个查询。作为回应,它发出了 15,601 个NOERROR响应代码,总共 4 个NXDOMAIN响应代码。
NXDOMAIN 响应如何仍然可能?什么可能产生它们?
就我个人而言,无论我尝试什么查询都无法触发查询,并且我的理解是 DNSSEC 至少在理论上应该完全消除此响应代码。
我错了吗?
我有两台运行 OpenBSD v6.9 的机器。让我们原创一下,将它们称为客户端和服务器。
我使用以下命令在服务器上生成了 SSHFP 记录:
ssh-keygen -r host.domain.tld
Run Code Online (Sandbox Code Playgroud)
在 DNS 区域中,我使用以下行添加了 SSHFP 记录:
host IN SSHFP 1 2 02323a6fb8a12eba9288930ce2513fc94970e5575996ebede1ee352bd039c531
host IN SSHFP 4 2 3eef5929fe85038b2e2a7de70897175e7b0d68328b41ef6466a2fa06f9a8bb49
Run Code Online (Sandbox Code Playgroud)
sshd 配置为仅使用 Ed25519 主机密钥,但我也保留 RSA 主机密钥以备将来需要。
DNS 区域使用 DNSSEC 进行签名,所有内容均通过“https://dnsviz.net/”和“https://dnssec-debugger.verisignlabs.com/”进行验证。
在客户端,有一个带有 DNSSEC 验证器的 Unbound 解析器:
dig host.domain.tld -t SSHFP
; <<>> dig 9.10.8-P1 <<>> host.domain.tld -t SSHFP
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9525
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: …Run Code Online (Sandbox Code Playgroud) 我在我的机器上设置了 Opendkim milter 来与 postfix 一起使用。现在电子邮件已正确签名和验证,即电子邮件源代码显示DKIM-Signature标题。
TXT权威 dns 上的记录设置如下:
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 # \xe2\x94\x82 root > server > ~\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x98\n \xe2\x94\x94\xe2\x94\x80> delv -t txt dkim-domain._domainkey.domain.eu\n...\n...\ndkim-domain._domainkey.domain.eu. 1780 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8drA4hH8gJaVpLaHhtQonhpOeanMo/oPmrAVehP3lBYAjsoxifCIclLqJo7kk0maelqu9SIN9ttQ0boCzEiQBMO1" "c1P+Sj/PxphZB71c8VNhqMJ32VG6Ky3ZD4Tds39Vye/wsWdi+842MUT3Z2dJnxS2AAG4pSkjaytFPCs0J94OUQC0tDErbnsMZh+gg+7IsYgND8FR/cRDzpXjD0qFJk4Cnc1q27WorPAGAiRsRfLt9u" "gkYgQRwapnofmKJ3hk/L8096YR7gan60L4+RGojsx5ppTdIEhYasyK9MokefmVeNyGwVXTJchqG8vhcg9uGjGy9mPiPg4B2TQgEBPwyQIDAQAB"\n...\n...\nRun Code Online (Sandbox Code Playgroud)\n因此,乍一看一切正常,但当我在机器上运行诊断程序时,它会显示以下内容:
\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 # \xe2\x94\x82 root > server > ~\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x98\n \xe2\x94\x94\xe2\x94\x80> opendkim-testkey -d domain.eu -s dkim-domain -vvv\n\nopendkim-testkey: using default configfile /etc/opendkim.conf\nopendkim-testkey: checking key \'dkim-pistam._domainkey.pistam.eu\'\nopendkim-testkey: key not secure\nopendkim-testkey: key OK\nRun Code Online (Sandbox Code Playgroud)\n注意key not secure答案。我从这个答案中读到存在警告,因为未启用 DNSSEC。但我的域的 DNSSECdomain.eu已启用。根据DNSViz。
我已经用 dnssec 设置了一些域。我生成了密钥并使用来自 dnssec-tools 的 zonesigner 对区域进行了签名。我知道我必须在 30 天内辞职。但是我存放在域名提供商处的密钥怎么办?我也需要更新密钥吗?如果是,如何?在网站上找不到有关此的任何信息。
我的 dns 服务器设置有问题。我的绑定服务器主要是一个缓存服务器,但也为一些内部域提供服务。它只在我的专用网络上侦听,并且只提供来自那里的请求。
今天我想启用绑定来验证 DNSSEC 但不知何故它没有正确执行。如果我在绑定 linux 机器上解析主机名,那么无效的 DNSSEC 就会完美地显示出来。但是,如果我尝试在网络中的另一台机器上再次使用相同的 dig 命令解析相同的域,DNSSEC 检查不会失败并且域得到很好的解析。我想要它做的是将正确的 SERVFAIL 发送到网络中的其他 DNS 客户端。
以下是您可能需要的所有信息(绑定版本、配置等)。我将附加我在最后所做的挖掘。
操作系统版本
root@thor:/etc/bind# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.5 (jessie)
Release: 8.5
Codename: jessie
root@thor:/etc/bind# uname -a
Linux thor.home.intranet 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
绑定版本
BIND 9.9.5-9+deb8u6-Debian (Extended Support Version)
Run Code Online (Sandbox Code Playgroud)
命名文件
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
Run Code Online (Sandbox Code Playgroud)
命名.conf.options
options {
directory "/var/cache/bind";
forwarders {
208.67.222.222; # resolver1.opendns.com
208.67.220.220; # resolver2.opendns.com
# 8.8.8.8; …Run Code Online (Sandbox Code Playgroud) 组织为其域提供 DNSSEC 支持。他们有一个 BIND9 作为运行的权威名称服务器,它也管理密钥。但是决定删除 DNSSEC。删除其中的密钥材料/var/lib/bind/pri并重新启动服务器是否就足够了,或者是否应该执行一些步骤来删除它?
我的任务是研究在我们的名称服务器上实施 DNSSEC。虽然这方面的技术方面(生成密钥、标志区域、准备翻转)相对简单,但我遇到了后勤问题。
从我一直在阅读的文档来看,1024 位对于区域签名密钥来说是一个很好的大小,正确的程序是每个区域一个 ZSK,大约一个月的滚动
然而,在一台具有良好熵的相当快的计算机上最多需要 10 分钟来生成一个 1024 位的密钥......而我为超过三千个区域的主机工作的 ISP。除非我以某种方式使流程从头到尾自动化,否则这是行不通的——即使我这样做了,到流程完成时,几乎是开始 NEXT 翻转的时候了。
简而言之,这是不可行的。现在,我将 DNSSEC 限制为明确要求的客户,但这充其量只是权宜之计。
我的问题:
编辑:添加了我用来生成密钥的确切命令:
caleburn: ~/Projects/Systemec/DNS-magic/DNSSEC/keys/ >time dnssec-keygen -r/dev/random -a RSASHA256 -f KSK -b 1280 -n ZONE example.com
Generating key pair.............................+++++ ...+++++
Kexample.com.+008+10282
real 9m46.094s
user 0m0.092s
sys 0m0.140s
caleburn: ~/Projects/Systemec/DNS-magic/DNSSEC/keys/ >time dnssec-keygen -r/dev/random -a RSASHA256 -b 1280 -n ZONE example.com
Generating key pair.........................+++++ .........+++++
Kexample.com.+008+22173
real 12m47.739s
user 0m0.124s
sys 0m0.076s
Run Code Online (Sandbox Code Playgroud) 我需要注册一些具有国家/地区代码域扩展名的域,但注意到这些 TLD 不正式支持 (A) IPv6 或 (B) DNSSEC...因此我应该会遇到哪些限制或陷阱?
(A) TLD 不支持 IPv6
我知道这意味着我将无法向域添加 AAAA 记录,但这对于其他支持 IPv6 的 DNS 服务器的可达性/兼容性/可见性意味着什么?
(B) 没有对 TLD 的 DNSSEC 支持
我知道 DNSSEC 在某种程度上对于验证 DNS 解析很重要,但不知道它的实施(或缺乏实施)是否/如何影响我作为应用程序开发人员在安全方面的影响。
注意:请原谅一个被宠坏的 LAMP、MEAN、前端和原生移动开发人员提出的这个潜在的基本问题,他们很少需要围绕上述问题做出网络架构决策。提前致谢!