使用DNS over TLS

現代計算機用來在互聯網種查找資源的 域名系統(DNS) 是在 35 年前設計的,沒有考慮用戶隱私。它會面臨安全風險和***,例如 DNS 劫持。它還能讓 ISP 攔截查詢。
做者:Thomas Bianchi來源:Linux中國|2020-08-04 10:10
收藏
分享
使用DNS over TLS
現代計算機用來在互聯網種查找資源的 域名系統(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 加密交換:
使用DNS over TLS


【編輯推薦】

  1. 大衆點評高可用性系統運維經驗分享
  2. Linux系統運維之修煉祕法【責任編輯:龐桂玉 TEL:(010)68476606】
相關文章
相關標籤/搜索