現代計算機用來在互聯網種查找資源的 域名系統(DNS) 是在 35 年前設計的,沒有考慮用戶隱私。它會面臨安全風險和***,例如 DNS 劫持。它還能讓 ISP 攔截查詢。
做者:Thomas Bianchi來源:Linux中國|2020-08-04 10:10
收藏
分享
現代計算機用來在互聯網種查找資源的 域名系統(DNS) 是在 35 年前設計的,沒有考慮用戶隱私。它會面臨安全風險和***,例如 DNS 劫持。它還能讓 ISP 攔截查詢。
幸運的是,如今有 DNS over TLS 和 DNSSEC 兩種技術。DNS over TLS 和 DNSSEC 容許建立從計算機到它配置的 DNS 服務器之間的安全且加密的端到端隧道。在 Fedora 上,部署這些技術的步驟很容易,而且全部必要的工具也很容易得到。
本指南將演示如何使用 systemd-resolved 在 Fedora 上配置 DNS over TLS。有關 systemd-resolved 服務的更多信息,請參見文檔。
步驟 1:設置 systemd-resolved
相似於下面所示修改 /etc/systemd/resolved.conf。確保啓用 DNS over TLS 並配置要使用的 DNS 服務器的 IP 地址。緩存
1. $ cat /etc/systemd/resolved.conf 2. [Resolve] 3. DNS=1.1.1.1 9.9.9.9 4. DNSOverTLS=yes 5. DNSSEC=yes 6. FallbackDNS=8.8.8.8 1.0.0.1 8.8.4.4 7. #Domains=~. 8. #LLMNR=yes 9. #MulticastDNS=yes 10. #Cache=yes 11. #DNSStubListener=yes 12. #ReadEtcHosts=yes
關於選項的簡要說明:
• DNS:以空格分隔的 IPv4 和 IPv6 地址列表,用做系統 DNS 服務器。
• FallbackDNS:以空格分隔的 IPv4 和 IPv6 地址列表,用做後備 DNS 服務器。
• Domains:在解析單標籤主機名時,這些域名用於搜索後綴。 ~. 表明對於全部域名,優先使用 DNS= 定義的系統 DNS 服務器。
• DNSOverTLS:若是啓用,那麼將加密與服務器的全部鏈接。請注意,此模式要求 DNS 服務器支持 DNS-over-TLS,並具備其 IP 的有效證書。
注意:上面示例中列出的 DNS 服務器是我我的的選擇。你要肯定要使用的 DNS 服務器。要注意你要向誰請求 IP。
步驟 2:告訴 NetworkManager 將信息推給 systemd-resolved
在 /etc/NetworkManager/conf.d 中建立一個名爲 10-dns-systemd-resolved.conf 的文件。安全
1. $ cat /etc/NetworkManager/conf.d/10-dns-systemd-resolved.conf 2. [main] 3. dns=systemd-resolved
上面的設置(dns=systemd-resolved)讓 NetworkManager 將從 DHCP 得到的 DNS 信息推送到 systemd-resolved 服務。這將覆蓋步驟 1 中配置的 DNS 設置。這在受信任的網絡中沒問題,可是也能夠設置爲 dns=none 從而使用 /etc/systemd/resolved.conf 中配置的 DNS 服務器。
步驟 3: 啓動和重啓服務
若要使上述步驟中的配置生效,請啓動並啓用 systemd-resolved 服務。而後重啓 NetworkManager 服務。
注意:在 NetworkManager 重啓時,鏈接會中斷幾秒鐘。服務器
1. $ sudo systemctl start systemd-resolved 2. $ sudo systemctl enable systemd-resolved 3. $ sudo systemctl restart NetworkManager
注意:目前,systemd-resolved 服務默認處於禁用狀態,是可選使用的。[有計劃][33]在 Fedora 33 中默認啓用systemd-resolved。
步驟 4:檢查是否一切正常
如今,你應該在使用 DNS over TLS。檢查 DNS 解析狀態來確認這一點:網絡
1. $ resolvectl status 2. MulticastDNS setting: yes 3. DNSOverTLS setting: yes 4. DNSSEC setting: yes 5. DNSSEC supported: yes 6. Current DNS Server: 1.1.1.1 7. DNS Servers: 1.1.1.1 8. 9.9.9.9 9. Fallback DNS Servers: 8.8.8.8 10. 1.0.0.1 11. 8.8.4.4
/etc/resolv.conf 應該指向 127.0.0.53。運維
1. $ cat /etc/resolv.conf 2. # Generated by NetworkManager 3. search lan 4. nameserver 127.0.0.53
若要查看 systemd-resolved 發送和接收安全查詢的地址和端口,請運行:tcp
1. $ sudo ss -lntp | grep '\(State\|:53 \)' 2. State Recv-Q Send-Q Local Address:Port Peer Address:Port Process 3. LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=10410,fd=18))
若要進行安全查詢,請運行:ide
1. $ resolvectl query fedoraproject.org 2. fedoraproject.org: 8.43.85.67 -- link: wlp58s0 3. 8.43.85.73 -- link: wlp58s0 4. 5. [..] 6. 7. -- Information acquired via protocol DNS in 36.3ms. 8. -- Data is authenticated: yes
額外步驟 5:使用 Wireshark 驗證配置
首先,安裝並運行 Wireshark:工具
1. $ sudo dnf install wireshark 2. $ sudo wireshark
它會詢問你在哪一個設備上捕獲數據包。在我這裏,由於我使用無線接口,我用的是 wlp58s0。在 Wireshark 中設置篩選器,tcp.port == 853(853 是 DNS over TLS 協議端口)。在捕獲 DNS 查詢以前,你須要刷新本地 DNS 緩存:ui
1. $ sudo resolvectl flush-caches
如今運行:加密
1. $ nslookup fedoramagazine.org
你應該會看到你的計算機和配置的 DNS 服務器之間的 TLS 加密交換:
【編輯推薦】