安裝 DNS 網域名稱服務 - named、bind 指令步驟 - CentOS

  • 6422
  • 0

摘要:安裝 DNS 網域名稱服務 - named、bind 指令步驟 - CentOS

 

上次寫了一篇「安裝 DNS 服務 bind (named)」,該篇拖了很久一直沒詳細的寫完,只寫了初步的安裝,『如果你是要自己 make,並且不放在預設目錄』,那麼你可能會遭遇一些問題,底下就用安裝的過程指令來說明。

前言:使用關鍵字「named、安裝、centos...等」來搜尋就可以找到一大堆的說明文章,而且眾網友也都說明的很詳細,故在此我僅以簡略的說明安裝過程,及其遭遇到的問題處理。

如果:你是使用套件安裝 yum、rpm 等,你可以不需要看下去。

************************************************

BIND 的官網:https://www.isc.org/software/bind

安裝步驟  指令+說明

  1. sudo yum install -y openssl openssl-devel    
    //安裝 openssl 套件
  2. sudo yum install -y gcc    
    //安裝 gcc 套件
  3. wget http://ftp.isc.org/isc/bind9/9.9.2-P2/bind-9.9.2-P2.tar.gz //下載新版的 9.9.2 bind Source
  4. tar zxvf bind-9.9.2-P2.tar.gz      
    //解壓縮、解包裝
  5. cd bind-9.9.2-P2                           
    //進入剛剛解開的目錄
  6. ./configure --prefix=/var --sysconfdir=/etc/ --localstatedir=/var --enable-threads --with-openssl=yes CFLAGS="-DDIG_SIGCHASE"
    //對 Bind
     的安裝環境、路徑做設定
    // 分別是 bind安裝路徑、named.conf放的路徑、狀態路徑、啟用thread執行緒、啟用openssl、啟用DNSSEC的 validation 功能 
  7. make
    //編譯 compiler BIND 的原始檔 
  8. make -n install
    //測試安裝 
  9. sudo make install
    //安裝BIND到系統去,他會依你 configure 所指的路徑去放 
  10. ls -al /dev/urandom
    //觀看 urandom 檔案是否存在 
  11. sudo /var/sbin/rndc-confgen -r /dev/urandom -a
    //利用rndc-congen 以hmac-md5 產出secret 的 hash key,放在 --sysconfdir 所指定的路徑
  12. sudo mkdir /var/named
    //建立 BIND 設定 zone file 的路徑目錄 
  13. wget -O named.root ftp://ftp.internic.net/domain/named.root
    //取得 DNS ROOT 的資料 
  14. sudo mv named.root /etc/
    //搬到 /etc 目錄下 
  15. wget http://ftp.isc.org/isc/bind9/keys/9.8/bind.keys.v9_8
    //抓取新版BIND的KEY 
  16. more /etc/bind.keys
    //然後跟現有的KEY做個比對,相同的話就不需要更換了 
  17. sudo vi /etc/named.conf
    //開始編修你的 named.conf 
    ,這個檔案最重要但卻沒樣版的 example,因為
    『 Isn't "make install" supposed to generate a default named.conf? 
     

    Short Answer: No. 

    There really isn't a default configuration which fits any site perfectly.
    如果真不知道怎麼開始可以參考:http://ostechnix.wordpress.com/2013/01/25/setup-dns-server-step-by-step-in-centos-6-3-rhel-6-3-scientific-linux-6-3-3/
    /etc/named.conf 裡就要指定每個 zone files 所要放的路徑跟名稱,所以下面三個動作,請依你自己的環境修改 
  18. sudo mkdir /var/named/domain

  19. sudo mkdir /var/named/reverse

  20. sudo mkdir /var/named/slaves

      
  21. sudo useradd named
    //步驟21,22 是為了將 named 的執行身份以特殊帳號 named 來執行,避免直接使用 root 身份,以免 BIND 漏洞造成系統整個權限淪陷,後面執行 named 也會以 /var/sbin/named -u named 來執行。
  22. sudo groupadd named
    //新增 named 群組
  23. sudo chown named:named -R /var/named
    //變更 /var/named 目錄的權限給 named 帳號,這樣做 zone transfer 時才有辦法寫入
  24. sudo /var/sbin/named -u named
    //以 named 身份來執行
  25. sudo tail -500 /var/log/messages
    //觀看系統LOG是否有什麼錯誤訊息
  26. ps -elf | grep name
    //觀察 named 是否有執行,當 named.conf 或 /etc/init.d/named 有誤時,不見得畫面上會出現錯誤訊息,建議要多觀察 log 與觀看 process 是否有執行
  27. ---↑↑↑ 上面是安裝 BIND 所需要的步驟---
    ---↓↓↓ 下面是自動執行 named 所需要的設定 ---
  28. chkconfig
    //先觀察 named 是否有在清單中
  29. chkconfig named on 
    //觀察後,你可以以這種方式讓 named 在 system level 2,3,4,5 都會執行,當然你也可以單獨指定只有那個(些) level 再執行
  30. service named start
    //這一步驟,如果你是用套件方式安裝,你根本不會遇到問題,但是使用自己 make 方式,就會很容易出錯。

    //原因在於目錄 /etc/init.d/ 裡 沒有預設 named 這個檔案,所以 service 也就不知道怎麼讓 named 啟動、停止、重新啟動。你必須給予一段 script 定義這個 service 在這三個動作的時候,各該怎麼辦?這裡「http://forum.directadmin.com/archive/index.php/t-30796.html」有 named script 的參考內容。
     //但是如果你跟我一樣,在 configure 時有去修改「--prefix=/var」,那麼一堆執行檔預設會裝在 /usr/sbin 的都會改安裝到 /var/sbin,也就會造成這個例子的 script 無法直接使用
    // 另外因為 named 的版本不同,這版 9.9.2 的 named 並沒有 -D (Enable dynamic management of the forwarding table with D-BUS messages.) 的參數用法,你也必須將 OPTIONS 做一些修改,不然你就無法以 service 的方式執行。(當然你還是可以用 rc.local 裡寫 /var/sbin/named -u named  的方式執行,但這畢竟是不好的。) 
  31. sudo vi /etc/init.d/named 
    // 那麼就依造你的環境來去修改這個檔案吧!!
  32. service named start
    // 改好了,就可以以輕鬆的管理方式來啟用、停止 named 這項服務了。
  33. sudo tail -100 /var/log/messages
    // 最後也再看一下 LOG 看是否還有錯誤存在。
  34. dig +dnssec +multiline nctu.edu.tw @127.0.0.1 
    // 另都完成後,就可以測試網域名稱查詢,跟測試 DNSSEC 的簽章了。

 

列出了上面三十幾點,唉阿~還是沒辦法很清楚的交代整個處理的過程,有些小細節都藏在 vi 編輯檔案裡頭,而每個人的環境又不完全一樣,即使我全列出來也沒用,就提供這個自己 make 過程給大家參考囉~

 

MEMO:

  • bind make 跟 安裝很簡單,問題在於寫自己需要的 /etc/named.conf 跟 zone files
  • 自己 make 服務的一些設定要自己來,所以 /etc/init.d/named 必須自己加上去,並依照環境做出些改。
  • 建議使用獨立帳號來執行 named 服務(使用套件安裝會自動做這一塊)
  • 前面沒寫~當你的DNS要提供對外服務時,記得開 53 port 的 tcp 跟 udp 唷!
    -A Firewall-Rule -p tcp --dport 53 -j ACCEPT
    -A Firewall-Rule -p udp --dport 53 -j ACCEPT
  • 在我的環境下常常/每天 都有人在 try DNS 的服務(denied query),建議安裝 fail2ban來阻擋這一塊。
  •  
  •  

----fail2ban DNS 的設定 ------------------------------------------------------

Step 1: 修改 sudo vi /etc/named.conf 將 logging 的區塊改成

 

 logging {
     channel security_file {
         file "/var/log/named/security.log" versions 3 size 30m;
         severity dynamic;
         print-time yes;
     };
     category security {
         security_file;
     };
 };

 

重新啟動  sudo service named restart

 

註:versions 3 size 30m 意思為保留三份,每份 30MB

 

Step 2:修改 sudo vi  /etc/fail2ban/jail.conf 然後修改底下標紅色字的地方

 

[named-refused-udp]
enabled  = true
filter   = named-refused
action   = iptables-multiport[name=Named, port="domain,953", protocol=udp]           sendmail-whois[name=Named, dest=you@example.com]
logpath  = /var/log/named/security.log
ignoreip = 168.192.0.1

# This jail blocks TCP traffic for DNS requests.
[named-refused-tcp]
enabled  = true
filter   = named-refused
action   = iptables-multiport[name=Named, port="domain,953", protocol=tcp]           sendmail-whois[name=Named, dest=you@example.com]
logpath  = /var/log/named/security.log
ignoreip = 168.192.0.1

 

重新啟動 sudo service fail2ban restart

 

 

Step 3:觀察 sudo /sbin/iptables -L -n 防火牆的阻擋情形,例如

 

Chain fail2ban-NAMED (2 references)
target     prot opt source               destination
DROP       all  --  1.160.182.131        0.0.0.0/0
DROP       all  --  221.130.199.67       0.0.0.0/0
....... 

 

 

 

-----------------------------------------------------------

~End