如何關閉一個開放的DNS解析器

贊 回覆發表於2014-05-05

我們在之前的教程中建立的DNS伺服器是一個開放DNS解析器。開放解析器不會過濾任何來源請求,並會接受來自所有IP的查詢。

不幸的是,開放解析器很容易成為一個攻擊目標。比如,攻擊者可以對開放DNS伺服器發起一個拒絕服務攻擊(DoS)或者更糟的分散式拒絕服務攻擊(DDoS)。這些也可與IP欺騙結合,將應答包指向受害者被欺騙的IP地址。在另外的場合下稱作DNS放大攻擊,開放的DNS伺服器很容易就會成為攻擊的物件。

根據openresolverproject.org,除非有必要,執行一個開放解析器是不明智的。大多數公司要讓它們的DNS伺服器僅對他們的客戶開放。本篇教程會只要集中於如何配置一個DNS伺服器來使它停止開放解析且僅對有效的客戶響應。

調整防火牆

由於DNS執行在UDP的53埠上,系統管理可能試圖僅允許來自53埠的客戶端IP地址,並阻止剩餘的因特網埠。雖然這可以工作,但是也會有一些問題。既然根伺服器與DNS伺服器的通訊也用53埠,我們不得不在防火牆內也確保UDP 53埠被允許。

一個防火牆示例如下所示。對於生產伺服器,確保你的規則匹配你的要求並遵守與公司安全制度。

# vim firewall-script 

## existing rules are flushed to start with a new set of rules ##
iptables -F

iptables -A INPUT -s A.A.A.A/X -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s B.B.B.B/Y -p udp --dport 53 -j ACCEPT
iptables -A INPUT -s C.C.C.C/Z -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p udp --dport 53 -j DROP

## making the rules persistent ##
service iptables save

讓指令碼可執行並執行它。

# chmod +x firewall-script
# ./firewall-script 

阻止遞迴查詢

DNS查詢主要可以分為遞迴查詢和迭代查詢。對於遞迴查詢,伺服器會響應客戶端應答或者錯誤資訊。如果應答不在伺服器的快取中,伺服器會與根伺服器通訊並獲得授權域名伺服器。伺服器會不停查詢知道獲得結果,或者請求超時。對於迭代查詢,另一個方面講,伺服器會將客戶端指向另外一個可能可以處理的伺服器上,那麼就會減少伺服器自身的處理。

我們可以控制執行遞迴查詢的IP地址。我們修改位於/etc/named.conf的配置檔案並增加/修改下面的引數。

# vim /etc/named.conf

## we define ACLs to specify the source address/es ##
acl customer-a{ A.A.A.A/X; };
acl customer-b { B.B.B.B/Y; C.C.C.C/Z; };

## we call the ACLs under options directive ##
options {
        directory "/var/named";
        allow-recursion { customer-a; customer-b; };
};

調整用於開放解析器的防火牆

如果你必須執行一個開放解析器,建議你適當調節一下你的伺服器,這樣就不會被利用了。smurfmonitor 倉庫提供了強大的一組可以用於開放解析器的iptables規則,比如阻止來自DNS放大攻擊的域名解析請求。這個倉庫會定期地更新,強烈建議DNS伺服器管理員使用它。

總的來說,對於開放DNS解析器的攻擊是很常見的,特別是對於沒有適當安全防護的DNS伺服器而言。這個教程延時瞭如何禁止一個開放DNS伺服器。我們同樣看到了如何使用iptables在一個開放DNS伺服器上加上一層安全防護。

希望這對你有用。


via: http://xmodulo.com/2014/04/close-open-dns-resolver.html

譯者:geekpi 校對:校對者ID

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

相關文章