摘要:安裝 DNS 網域名稱服務 - named、bind 指令步驟 - CentOS
上次寫了一篇「安裝 DNS 服務 bind (named)」,該篇拖了很久一直沒詳細的寫完,只寫了初步的安裝,『如果你是要自己 make,並且不放在預設目錄』,那麼你可能會遭遇一些問題,底下就用安裝的過程指令來說明。
前言:使用關鍵字「named、安裝、centos...等」來搜尋就可以找到一大堆的說明文章,而且眾網友也都說明的很詳細,故在此我僅以簡略的說明安裝過程,及其遭遇到的問題處理。
如果:你是使用套件安裝 yum、rpm 等,你可以不需要看下去。
************************************************
BIND 的官網:https://www.isc.org/software/bind
安裝步驟 指令+說明
-
sudo yum install -y openssl openssl-devel
//安裝 openssl 套件 -
sudo yum install -y gcc
//安裝 gcc 套件 - wget http://ftp.isc.org/isc/bind9/9.9.2-P2/bind-9.9.2-P2.tar.gz //下載新版的 9.9.2 bind Source
-
tar zxvf bind-9.9.2-P2.tar.gz
//解壓縮、解包裝 -
cd bind-9.9.2-P2
//進入剛剛解開的目錄 -
./configure --prefix=/var --sysconfdir=/etc/ --localstatedir=/var --enable-threads --with-openssl=yes CFLAGS="-DDIG_SIGCHASE"
//對 Bind 的安裝環境、路徑做設定
// 分別是 bind安裝路徑、named.conf放的路徑、狀態路徑、啟用thread執行緒、啟用openssl、啟用DNSSEC的 validation 功能 -
make
//編譯 compiler BIND 的原始檔 -
make -n install
//測試安裝 -
sudo make install
//安裝BIND到系統去,他會依你 configure 所指的路徑去放 -
ls -al /dev/urandom
//觀看 urandom 檔案是否存在 -
sudo /var/sbin/rndc-confgen -r /dev/urandom -a
//利用rndc-congen 以hmac-md5 產出secret 的 hash key,放在 --sysconfdir 所指定的路徑 -
sudo mkdir /var/named
//建立 BIND 設定 zone file 的路徑目錄 -
wget -O named.root ftp://ftp.internic.net/domain/named.root
//取得 DNS ROOT 的資料 -
sudo mv named.root /etc/
//搬到 /etc 目錄下 -
wget http://ftp.isc.org/isc/bind9/keys/9.8/bind.keys.v9_8
//抓取新版BIND的KEY -
more /etc/bind.keys
//然後跟現有的KEY做個比對,相同的話就不需要更換了 -
sudo vi /etc/named.conf
//開始編修你的 named.conf ,這個檔案最重要但卻沒樣版的 example,因為
『 Isn't "make install" supposed to generate a default named.conf?Short Answer: No.
如果真不知道怎麼開始可以參考: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 所要放的路徑跟名稱,所以下面三個動作,請依你自己的環境修改 -
sudo mkdir /var/named/domain
-
sudo mkdir /var/named/reverse
-
sudo mkdir /var/named/slaves
-
sudo useradd named
//步驟21,22 是為了將 named 的執行身份以特殊帳號 named 來執行,避免直接使用 root 身份,以免 BIND 漏洞造成系統整個權限淪陷,後面執行 named 也會以 /var/sbin/named -u named 來執行。 -
sudo groupadd named
//新增 named 群組 -
sudo chown named:named -R /var/named
//變更 /var/named 目錄的權限給 named 帳號,這樣做 zone transfer 時才有辦法寫入 -
sudo /var/sbin/named -u named
//以 named 身份來執行 -
sudo tail -500 /var/log/messages
//觀看系統LOG是否有什麼錯誤訊息 -
ps -elf | grep name
//觀察 named 是否有執行,當 named.conf 或 /etc/init.d/named 有誤時,不見得畫面上會出現錯誤訊息,建議要多觀察 log 與觀看 process 是否有執行 -
---↑↑↑ 上面是安裝 BIND 所需要的步驟---
---↓↓↓ 下面是自動執行 named 所需要的設定 --- -
chkconfig
//先觀察 named 是否有在清單中 -
chkconfig named on
//觀察後,你可以以這種方式讓 named 在 system level 2,3,4,5 都會執行,當然你也可以單獨指定只有那個(些) level 再執行 -
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 的方式執行,但這畢竟是不好的。) -
sudo vi /etc/init.d/named
// 那麼就依造你的環境來去修改這個檔案吧!! -
service named start
// 改好了,就可以以輕鬆的管理方式來啟用、停止 named 這項服務了。 -
sudo tail -100 /var/log/messages
// 最後也再看一下 LOG 看是否還有錯誤存在。 -
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;
};
};
註: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
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