Ubuntu

Ubuntu:了解 iptables 規則以允許域名查找

  • January 10, 2019

我目前正在我的網路伺服器(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.

引用自:https://serverfault.com/questions/948050