使用DNS over TLS
現(xiàn)代計(jì)算機(jī)用來(lái)在互聯(lián)網(wǎng)種查找資源的 域名系統(tǒng)(DNS) 是在 35 年前設(shè)計(jì)的,沒有考慮用戶隱私。它會(huì)面臨安全風(fēng)險(xiǎn)和攻擊,例如 DNS 劫持。它還能讓 ISP 攔截查詢。
幸運(yùn)的是,現(xiàn)在有 DNS over TLS 和 DNSSEC 兩種技術(shù)。DNS over TLS 和 DNSSEC 允許創(chuàng)建從計(jì)算機(jī)到它配置的 DNS 服務(wù)器之間的安全且加密的端到端隧道。在 Fedora 上,部署這些技術(shù)的步驟很容易,并且所有必要的工具也很容易獲得。
本指南將演示如何使用 systemd-resolved
在 Fedora 上配置 DNS over TLS。有關(guān) systemd-resolved
服務(wù)的更多信息,請(qǐng)參見文檔。
步驟 1:設(shè)置 systemd-resolved
類似于下面所示修改 /etc/systemd/resolved.conf
。確保啟用 DNS over TLS 并配置要使用的 DNS 服務(wù)器的 IP 地址。
$ cat /etc/systemd/resolved.conf
[Resolve]
DNS=1.1.1.1 9.9.9.9
DNSOverTLS=yes
DNSSEC=yes
FallbackDNS=8.8.8.8 1.0.0.1 8.8.4.4
#Domains=~.
#LLMNR=yes
#MulticastDNS=yes
#Cache=yes
#DNSStubListener=yes
#ReadEtcHosts=yes
關(guān)于選項(xiàng)的簡(jiǎn)要說(shuō)明:
DNS
:以空格分隔的 IPv4 和 IPv6 地址列表,用作系統(tǒng) DNS 服務(wù)器。FallbackDNS
:以空格分隔的 IPv4 和 IPv6 地址列表,用作后備 DNS 服務(wù)器。Domains
:在解析單標(biāo)簽主機(jī)名時(shí),這些域名用于搜索后綴。~.
代表對(duì)于所有域名,優(yōu)先使用DNS=
定義的系統(tǒng) DNS 服務(wù)器。DNSOverTLS
:如果啟用,那么將加密與服務(wù)器的所有連接。請(qǐng)注意,此模式要求 DNS 服務(wù)器支持 DNS-over-TLS,并具有其 IP 的有效證書。
注意:上面示例中列出的 DNS 服務(wù)器是我個(gè)人的選擇。你要確定要使用的 DNS 服務(wù)器。要注意你要向誰(shuí)請(qǐng)求 IP。
步驟 2:告訴 NetworkManager 將信息推給 systemd-resolved
在 /etc/NetworkManager/conf.d
中創(chuàng)建一個(gè)名為 10-dns-systemd-resolved.conf
的文件。
$ cat /etc/NetworkManager/conf.d/10-dns-systemd-resolved.conf
[main]
dns=systemd-resolved
上面的設(shè)置(dns=systemd-resolved
)讓 NetworkManager
將從 DHCP 獲得的 DNS 信息推送到 systemd-resolved
服務(wù)。這將覆蓋步驟 1 中配置的 DNS 設(shè)置。這在受信任的網(wǎng)絡(luò)中沒問(wèn)題,但是也可以設(shè)置為 dns=none
從而使用 /etc/systemd/resolved.conf
中配置的 DNS 服務(wù)器。
步驟 3: 啟動(dòng)和重啟服務(wù)
若要使上述步驟中的配置生效,請(qǐng)啟動(dòng)并啟用 systemd-resolved
服務(wù)。然后重啟 NetworkManager
服務(wù)。
注意:在 NetworkManager
重啟時(shí),連接會(huì)中斷幾秒鐘。
$ sudo systemctl start systemd-resolved
$ sudo systemctl enable systemd-resolved
$ sudo systemctl restart NetworkManager
注意:目前,systemd-resolved 服務(wù)默認(rèn)處于禁用狀態(tài),是可選使用的。[有計(jì)劃][33]在 Fedora 33 中默認(rèn)啟用systemd-resolved。
步驟 4:檢查是否一切正常
現(xiàn)在,你應(yīng)該在使用 DNS over TLS。檢查 DNS 解析狀態(tài)來(lái)確認(rèn)這一點(diǎn):
$ resolvectl status
MulticastDNS setting: yes
DNSOverTLS setting: yes
DNSSEC setting: yes
DNSSEC supported: yes
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1
9.9.9.9
Fallback DNS Servers: 8.8.8.8
1.0.0.1
8.8.4.4
/etc/resolv.conf
應(yīng)該指向 127.0.0.53
。
$ cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 127.0.0.53
若要查看 systemd-resolved
發(fā)送和接收安全查詢的地址和端口,請(qǐng)運(yùn)行:
$ sudo ss -lntp | grep '\(State\|:53 \)'
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=10410,fd=18))
若要進(jìn)行安全查詢,請(qǐng)運(yùn)行:
$ resolvectl query fedoraproject.org
fedoraproject.org: 8.43.85.67 -- link: wlp58s0
8.43.85.73 -- link: wlp58s0
[..]
-- Information acquired via protocol DNS in 36.3ms.
-- Data is authenticated: yes
額外步驟 5:使用 Wireshark 驗(yàn)證配置
首先,安裝并運(yùn)行 Wireshark:
$ sudo dnf install wireshark
$ sudo wireshark
它會(huì)詢問(wèn)你在哪個(gè)設(shè)備上捕獲數(shù)據(jù)包。在我這里,因?yàn)槲沂褂脽o(wú)線接口,我用的是 wlp58s0
。在 Wireshark 中設(shè)置篩選器,tcp.port == 853
(853 是 DNS over TLS 協(xié)議端口)。在捕獲 DNS 查詢之前,你需要刷新本地 DNS 緩存:
$ sudo resolvectl flush-caches
現(xiàn)在運(yùn)行:
$ nslookup fedoramagazine.org
你應(yīng)該會(huì)看到你的計(jì)算機(jī)和配置的 DNS 服務(wù)器之間的 TLS 加密交換: