当前位置: 首页 > 科技观察

在TLS上使用DNS

时间:2023-03-14 20:11:00 科技观察

现代计算机用来在Internet上查找资源的域名系统(DNS)是35年前设计的,没有考虑用户隐私。存在DNS劫持等安全风险和攻击。它还使ISP能够拦截查询。幸运的是,有两种技术,DNSoverTLS和DNSSEC。DNSoverTLS和DNSSEC允许创建从计算机到其配置的DNS服务器的安全和加密的端到端隧道。在Fedora上,部署这些技术的步骤很简单,而且所有必要的工具都很容易获得。本指南将演示如何使用systemd-resolved在Fedora上通过TLS配置DNS。有关systemd解析服务的更多信息,请参阅文档。第1步:设置systemd-resolved修改/etc/systemd/resolved.conf与下图类似。确保启用DNSoverTLS并配置要使用的DNS服务器的IP地址。$cat/etc/systemd/resolved.conf[Resolve]DNS=1.1.1.19.9.9.9DNSOverTLS=yesDNSSEC=yesFallbackDNS=8.8.8.81.0.0.18.8.4.4#Domains=~.#LLMNR=yes#MulticastDNS=yes#Cache=yes#DNSStubListener=yes#ReadEtcHosts=yes选项的简要说明:DNS:用作系统DNS服务器的IPv4和IPv6地址的空格分隔列表。FallbackDNS:用作后备DNS服务器的IPv4和IPv6地址的空格分隔列表。域:这些域名用于在解析单标签主机名时搜索后缀。~。表示对于所有域名,首选由DNS=定义的系统DNS服务器。DNSOverTLS:如果启用,所有与服务器的连接都将被加密。请注意,此模式要求DNS服务器支持DNS-over-TLS并具有其IP的有效证书。注意:上面示例中列出的DNS服务器是我个人的选择。您需要确定要使用的DNS服务器。请注意您向谁请求IP。第2步:告诉NetworkManager将信息推送到systemd-resolved在/etc/NetworkManager/conf.d中创建一个名为10-dns-systemd-resolved.conf的文件。$cat/etc/NetworkManager/conf.d/10-dns-systemd-resolved.conf[main]dns=systemd-resolved上面的设置(dns=systemd-resolved)让NetworkManager将从DHCP获取的DNS信息推送到systemd——解决服务。这将覆盖在步骤1中配置的DNS设置。这在受信任的网络上工作正常,但也可以设置为dns=none以使用在/etc/systemd/resolved.conf中配置的DNS服务器。第三步:启动并重启服务为使上述步骤中的配置生效,需要启动并启用systemd-resolved服务。然后重新启动NetworkManager服务。注意:当NetworkManager重新启动时,连接会丢失几秒钟。$sudosystemctlstartsystemd-resolved$sudosystemctlenablesystemd-resolved$sudosystemctlrestartNetworkManager注意:目前systemd-resolved服务默认是禁用的,是可选的。[有计划][33]在Fedora33中默认启用systemd-resolved。第4步:检查一切是否正常您现在应该使用基于TLS的DNS。检查DNS解析状态以确认:$resolvectlstatusMulticastDNS设置:是DNSOverTLS设置:是DNSSEC设置:是DNSSEC支持:是当前DNS服务器:1.1.1.1DNS服务器:1.1.1.19.9.9.9回退DNS服务器:8.8.8.81.0.0.18.8.4.4/etc/resolv.conf应该指向127.0.0.53。$cat/etc/resolv.conf#由NetworkManagersearchlannameserver127.0.0.53生成要查看systemd-resolved发送和接收安全查询的地址和端口,请运行:$sudoss-lntp|grep'\(State\|:53\)'StateRecv-QSend-QLocalAddress:PortPeerAddress:PortProcessLISTEN04096127.0.0.53%lo:530.0.0.0:*users:(("systemd-resolve",pid=10410,fd=18))对于安全查询,运行:$resolvectlqueryfedoraproject.orgfedoraproject.org:8.43.85.67--link:wlp58s08.43.85.73--link:wlp58s0[..]--Information通过DNS协议在36.3毫秒内获取。--数据已通过身份验证:是额外步骤5:使用Wireshark验证配置首先,安装并运行Wireshark:$sudodnfinstallwireshark$sudowireshark它会询问您要在哪个设备上捕获数据包。就我而言,因为我使用无线接口,所以我使用wlp58s0。在Wireshark中设置过滤器,tcp.port==853(853是DNSoverTLS协议端口)。在捕获DNS查询之前,您需要刷新本地DNS缓存:$sudoresolvectlflush-caches现在运行:$nslookupfedoramazine.org您应该会看到计算机和配置的DNS服务器之间的TLS加密交换: