如何關閉一個開放的DNS解析器
我們在之前的教程中建立的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
相關文章
- 開啟、關閉防火牆或者開放埠防火牆
- 如何關閉移動web頁面縮放功能Web
- 如何實現一個Java Class解析器Java
- centos7開放、關閉及檢視埠CentOS
- 設計模式之開閉原則:對修改關閉,對擴充套件開放設計模式套件
- 從零開始寫一個Javascript解析器JavaScript
- ubuntu下如何關閉某個埠?Ubuntu
- 如何實現一個Java Class位元組解析器Java
- 手寫一個解析器
- 網路的開放和封閉的思考
- 用Rust替代Java重寫DNS解析器RustJavaDNS
- 教你如何開啟/關閉ubuntu防火牆Ubuntu防火牆
- 請教:如何透過一個Java程式關閉或者啟動另一個Java程式?Java
- 一個開放平臺架構的思考架構
- win10如何關閉開啟的埠_win10怎麼關閉系統埠Win10
- win10怎麼關閉開機聲音 如何關閉win10開機聲音Win10
- 《短途旅行》設計師分享:如何打造一個小小的開放世界
- fragment返回鍵關閉fragment以及最後一個fragment的時候關閉activity的簡便方法Fragment
- 嘻哈說:開放封閉原則
- win10如何關閉所有程式_win10怎麼一鍵關閉程式Win10
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- Mac技巧12:MacBook Pro如何開啟、關閉SIP?Mac
- 一個關於資料庫關閉很有意思的現象資料庫
- 開放式MES與封閉式MES的區別
- iOS 程式碼設計中的開放與封閉iOS
- 用 Go 構建一個 SQL 解析器GoSQL
- 一個開源專案維護者的筆記:為什麼我關閉 PR筆記
- 一個正執行的程式如何啟動另一新程式並關閉現執行程式行程
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Push Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Map Kit
- 關閉某個網路卡
- 關閉應用程式時如何關閉子執行緒執行緒
- SElinux的開啟和關閉Linux
- Java程式設計思想中關於閉包的一個例子Java程式設計
- 如何開啟和關閉MySQL 間隙鎖(gap lock)MySql
- 如何關閉win10系統開蓋自動開機_關閉筆記本win10電腦開蓋自動開機的方法Win10筆記
- win10如何關閉superfetch_win10關閉superfetch的方法Win10