Ubuntu:了解 iptables 規則以允許域名查找
我目前正在我的網路伺服器(Ubuntu 18.04)上設置 iptables 規則。幾乎一切都按我的預期工作,但適用於 DN 查找查詢的規則。以下是我的理解:
- DN 查詢請求被發送到 DN 伺服器的 53 埠(預設)
- DN 查找請求可以通過 TCP 和 UDP 協議發生
因此,我制定了以下規則:
iptables -A INPUT -p tcp --sport 53 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT
換句話說,接受來自埠 53 的任何傳入連接(假設它們是我的伺服器將發送到埠 53 的 DN 查詢的響應)。但是,這不起作用。nslookup ubuntuforums.org命令超時。這是我沒有得到的部分:如果我在下面添加 iptables 規則,那麼它可以工作
iptables -A INPUT -p tcp --dport 53 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT
如果我正確閱讀了上述內容,則意味著我正在接受發送到伺服器埠 53 的傳入連接。我不明白為什麼需要這樣做。當我執行nslookup ubuntuforums.org時,我使用 tcpdump 查看發生了什麼,但我看不到任何發送到我機器埠 53 的連接。顯然我錯過了一些東西,但我不知道是什麼……有人知道嗎?提前致謝。
ubuntuforums.org 上的原始文章:https ://ubuntuforums.org/showthread.php?t=2409812
我假設您的伺服器至少有 2 個介面:本地環回和乙太網介面。
您應用規則的方式,它們適用於兩個介面。
當一個人進行 DNS 查詢時,很長一段時間,它直接通過乙太網介面(或用於到達 DNS 伺服器的路由所使用的任何東西)。
但這只是通過
OUTPUT
鏈條,而不是INPUT
(以及其他一些與此無關的)。最近,發行版開始提供本地 DNS 記憶體系統(
dnsmasq
,systemd-resolved
, …)。使用 Ubuntu 18.04,您將擁有最新的 systemd 功能。因此,我懷疑您
systemd-resolved
使用環回介面來提供 DNS 記憶體。當您使用nslookup
時,它不會直接進入您指定的伺服器/etc/resolv.conf
,而是systemd-resolved
先通過。為了允許這一點,您需要添加防火牆規則,允許環回介面的埠 53 上的 INPUT 流量。
我的建議是使用
iptables -I INPUT 1 -i lo -j ACCEPT
.