如何關閉開放的DNS解析器?
譯文開放的DNS解析器并不過濾任何入站請求,可以接受來自任何源IP地址的查詢。因此,開放的解析器可能很容易成為攻擊者下手的目標。比如說,攻擊者可以對開放的DNS服務器發動拒絕服務(DoS)攻擊;或者更嚴重的是,發動分布式拒絕服務(DDoS)攻擊。這些攻擊還可能結合IP欺詐手法,即所有應答數據包都將被引導到受害者被欺詐的IP地址。在另一種名為DNS放大攻擊的攻擊場景下,開放的DNS服務器可能積極參與攻擊。
據openresolverproject.org網站聲稱,除非確有必要,否則不建議運行開放的解析器。大多數公司只允許客戶訪問其DNS服務器。本教程將主要介紹如何配置一臺DNS服務器,以便它不再是開放的DNS解析器,只應答有效的客戶。
調整防火墻
由于DNS在UDP端口53上運行,系統管理員們可能試圖允許端口53僅用于客戶機IP地址訪問,阻止互聯網的其他機器訪問該端口。雖然這一招很管用,但還是會有一些問題。由于根服務器與DNS服務器之間的通信也使用端口53,我們不得不確保:在防火墻中還允許根服務器的IP地址可以使用UDP端口53。
下面提供了一個示例性的防火墻腳本。如果是生產環境下的服務器,就要確保規則符合你的需求,而且還要遵守貴公司的安全政策。
# vim firewall-script
## 現有的規則被清除,以便由一組新的規則開始 ## 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
## 讓規則具有持久性 ## service iptables save
讓腳本成為可執行腳本,并運行它。
# chmod +x firewall-script
# ./firewall-script
阻止遞歸查詢
DNS查詢可以主要分為兩類:遞歸查詢和迭代查詢。如果是遞歸查詢,服務器使用應答或錯誤信息回應客戶機。如果服務器緩存中沒有該應答,服務器就與根服務器進行聯系,以獲得授權域名服務器。服務器不斷查詢,直到它獲得應答,或者直到查詢超時。另一方面,如果是迭代查詢,服務器只是將客戶機轉到能夠處理的另一臺服務器,因而導致在該服務器上面的處理工作量比較少。
我們可以控制允許遞歸查詢的IP地址。我們只要改動配置文件/etc/named.conf,并添加/修改下列參數。
# vim /etc/named.conf
## 我們定義訪問控制列表(ACL),以指定一個或多個源地址
##
acl customer-a{ A.A.A.A/X; };
acl customer-b { B.B.B.B/Y; C.C.C.C/Z; };## 我們根據選項指令調用ACL ##
options {
directory "/var/named";
allow-recursion { customer-a; customer-b; }
;
};
針對開放的解析器調整防火墻
如果你非得運行開放的解析器,那么我們建議你合理調整防火墻,以便服務器無法被不法分子鉆空子。Smurfmonitor規則庫(https://github.com/smurfmonitor/dns-iptables-rules)提供了一組功能強大的iptables規則,這些規則可以用在開放的解析器中,比如阻止對參與DNS放大攻擊的域提出查詢請求。該規則庫定期更新,我們強烈建議DNS服務器管理員們使用它。
總而言之,針對開放的DNS解析器的攻擊很常見,對沒有采用合理安全措施的DNS服務器而言更是如此。本教程演示了如何禁用開放的DNS服務器。我們還看到了iptables如何可以用來為開放的DNS服務器增添另一層安全機制。
原文地址:http://xmodulo.com/2014/04/close-open-dns-resolver.html