如何關閉一個開放的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
相關文章
- 開啟、關閉防火牆或者開放埠防火牆
- 如何實現一個Java Class解析器Java
- 開放世界如何做關卡設計? 一個全景式的觀察
- centos7開放、關閉及檢視埠CentOS
- 設計模式之開閉原則:對修改關閉,對擴充套件開放設計模式套件
- 開放世界如何做關卡設計?一個全景式的觀察(下)
- 從零開始寫一個Javascript解析器JavaScript
- ubuntu下如何關閉某個埠?Ubuntu
- 手寫一個解析器
- [轉]如何關閉一個不活動的或者空閒的 SSH 會話會話
- 用Rust替代Java重寫DNS解析器RustJavaDNS
- 網路的開放和封閉的思考
- 如何開啟/關閉 GitLab 的版本檢查功能?Gitlab
- 如何開啟關閉Edge滑鼠手勢
- win10如何關閉開啟的埠_win10怎麼關閉系統埠Win10
- 一個有意思且有用的手法——關閉ping
- fragment返回鍵關閉fragment以及最後一個fragment的時候關閉activity的簡便方法Fragment
- [Android]關閉所有Activity,開啟某個ActivityAndroid
- win10怎麼關閉開機聲音 如何關閉win10開機聲音Win10
- win10如何關閉所有程式_win10怎麼一鍵關閉程式Win10
- win10如何關閉superfetch_win10關閉superfetch的方法Win10
- weex 如何關閉aslint
- 《短途旅行》設計師分享:如何打造一個小小的開放世界
- 嘻哈說:開放封閉原則
- 【FAQ】HarmonyOS SDK 閉源開放能力 —ArkUIUI
- nodejs實現一個word文件解析器NodeJS
- 用 Go 構建一個 SQL 解析器GoSQL
- Mac技巧12:MacBook Pro如何開啟、關閉SIP?Mac
- 開放式MES與封閉式MES的區別
- 如何關閉python文件字串Python字串
- win10如何關閉建議_win10關閉建議的方法Win10
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Map Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —IAP Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Push Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Share Kit
- 【FAQ】HarmonyOS SDK 閉源開放能力 —Vision Kit
- 如何優雅的關閉Go Channel「譯」Go
- 如何關閉win10自帶的安全防護_win10如何關閉安全防護Win10