http://doc.slitaz.org/cn:handbook:chroot
http://doorgods.blog.163.com/blog/static/7854785720141116113130969/
當BIND包安裝完后,會在/usr/sbin目錄下出現bind-chroot-admin文件,這是一個與chroot有關的命令文件,利用它,可以禁用或啟用chroot功能,也可以使虛擬根目錄下的named配置文件與實際根目錄下的named配置文件進行同步。其命令格式如下所示。
# bind-chroot-admin Usage: -e | --enable: enable the bind-chroot environment -d | --disable: disable the bind-chroot environment -s | --sync: sync files between the bind chroot and / environments, so they are correct for the current state of the bind-chroot (enabled / disabled) $BIND_CHROOT_PREFIX, default /var/named/chroot, is the location of the chroot. $BIND_DIR, default /var/named, is the default un-chrooted bind directory.
在bind-chroot-admin命令后加-e選項可以啟用chroot功能,加-d選項禁用chroot功能,加-s選項同步配置文件。在實際工作中,最好要啟用chroot功能,可以使服務器的安全性能得到提高,但在本章中,為了講解和實驗的方便,以及減少出錯的可能性,禁用了chroot功能。
也可以更改/etc/sysconfig/named
將
ROOTDIR=/var/named/chroot
注釋
==================================
[1]編譯安裝openssl
檢查zlib支持http://zlib.net/
# rpm -aq|grep zlib
zlib-devel-1.2.3-3
zlib-1.2.3-3
zlib-1.2.3-3
zlib-devel-1.2.3-3
wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
tar -zvxf openssl-1.0.1j.tar.gz
cd openssl-1.0.1j/
./config --prefix=/usr/local/webserver/openssl --openssldir=/usr/local/webserver/openssl/ssl
make && make install
./config shared --prefix=/usr/local/webserver/openssl --openssldir=/usr/local/webserver/openssl/ssl
make clean
make && make install
參數 : shared 是生成動態連接庫, –prefix 為安裝目錄,openssldir 是配置文件目錄。
[2]
編譯安裝bind
tar -xvzf bind-9.10.1-P1.tar.gz
./configure --prefix=/usr/local/webserver/bind --sysconfdir=/var/named --enable-threads --enable-largefile --enable-epoll --disable-ipv6 --with-dlz-mysql=/usr/local/mysql --with-openssl=/usr/local/webserver/openssl
./configure --prefix=/usr/local/webserver/bind --sysconfdir=/etc/named --enable-threads --enable-largefile --enable-epoll --disable-ipv6 --with-openssl=/usr/local/webserver/openssl
make
make -n install
make install
========================================================================
Configuration summary:
------------------------------------------------------------------------
Optional features enabled:
Multiprocessing support (--enable-threads)
GSS-API (--with-gssapi)
GOST algorithm support (encoding: raw) (--with-gost)
ECDSA algorithm support (--with-ecdsa)
Print backtrace on crash (--enable-backtrace)
Use symbol table for backtrace, named only (--enable-symtable)
Dynamically loadable zone (DLZ) drivers:
MySQL (--with-dlz-mysql)
Features disabled or unavailable on this platform:
IPv6 support (--enable-ipv6)
Large-system tuning (--with-tuning)
GeoIP access control (--with-geoip)
Source Identity Token support (--enable-sit)
Allow 'fixed' rrset-order (--enable-fixed-rrset)
PKCS#11/Cryptoki support (--with-pkcs11)
Native PKCS#11/Cryptoki support (--enable-native-pkcs11)
Use libseccomp system call filtering (--enable-seccomp)
Use GNU libtool (--with-libtool)
Automated Testing Framework (--with-atf)
Python tools (--with-python)
JSON statistics (--with-libjson)
========================================================================
http://blog.chinaunix.net/uid-20639775-id-3331598.html
BIND最新漏洞和升級解決辦法
現在有非常多的公司的都有自己的DNS服務器,也有非常多的公司使用BIND搭建智能DNS服務器。如果bind服務器掛掉那么公司的所有網站都可能會無法訪問,那么BIND的安全就至關重要了,如何能通過技術手段加強bind的安全呢?我們這里要介紹的是通過定期查看權威漏洞網站來加固我們的bind服務器,當發現嚴重的漏洞時能及時的將漏洞補上,加強bind服務器的安全和穩定。
在http://sebug.net權威漏洞網站上查看到,服務器目前使用的bind版本9.9.0b2存在幾個比較嚴重的遠程拒絕服務漏洞,這些漏洞包括: CVE-2012-3817、CVE-2012-3868、CVE-2012-1667,這兩個漏洞的等級都為高。以下是對幾個漏洞的介紹:
CVE-2012-3817漏洞:
Ø 影響版本:
BIND 9.6-ESV-R1至9.6-ESV-R7-P1、BIND 9.7.1至9.7.6-P1、BIND 9.8.0至9.8.3-P1、BIND 9.9.0至9.9.1-P1版本
Ø 漏洞描述:
攻擊者可利用此漏洞造成指定進程中的斷言失敗,拒絕服務合法用戶,也可能泄露某些內存信息到客戶端。
Ø 漏洞解決辦法:
升級版本至9.6-ESV-R7-P2、9.7.6-P2、9.8.3-P2、9.9.1-P2。
CVE-2012-3868漏洞
Ø 影響版本:
BIND 9.9.0到9.9.1-P1版本
Ø 漏洞描述:
BIND 9加載大量的TCP查詢存在安全漏洞,允許攻擊者提交大量請求觸發內存泄露,使名字服務程序停止響應,造成拒絕服務攻擊。
Ø 漏洞解決辦法:
將BIND版本升級至9.6-ESV-R7-P1, 9.7.6-P1, 9.8.3-P1, 9.9.1-P1或者9.9.1-P2。
CVE-2012-1667漏洞:
Ø 影響版本:
9.0.x -> 9.6.x, 9.4-ESV->9.4-ESV-R5-P1, 9.6-ESV->9.6-ESV-R7,9.7.0->9.7.6, 9.8.0->9.8.3, 9.9.0->9.9.1
Ø 漏洞描述:
在處理DNS資源記錄時存在錯誤,可被利用通過包含零長度rdata的記錄造成遞歸服務器崩潰或泄漏某些內存到客戶端,導致敏感信息泄漏或拒絕服務。
Ø 漏洞解決辦法:
升級到BIND 9.9.1-P2版本
知道了BIND服務器存在的漏洞,那么我們就可以很好的來避免危險的發生了。接下來我就來詳細介紹如何將BIND版本9.9.0b2升級到 BIND 9.9.1-P2版本。不過有的朋友可能也不清楚自己的bind用的什么什么版本,我們可以采用如下命令來查看:
/usr/local/bind/sbin/named –V
BIND 9.9.0b2 built with '--with-dlz-mysql=/usr/local/mysql/' '--enable-largefile' '--enable-threads=no' '--prefix=/usr/local/bind' '--with-openssl=yes'
using OpenSSL version: OpenSSL 0.9.8e-rhel5 01 Jul 2008
using libxml2 version: 2.6.26
這個命令可以返回bind的版本、編譯參數、openssl版本、libxml2的版本。
升級BIND主要包含如下步驟:
1. 備份bind目前的版本數據
cp -ar /usr/local/bind /data/backup/bind_20120827
2. 下載bind-9.9.1-P2版本
wget http://ftp.isc.org/isc/bind9/cur/9.9/bind-9.9.1-P2.tar.gz
3. 安裝bind-9.9.1-P2版本
tar xzvf bind-9.9.1-P2.tar.gz
cd bind-9.9.1-P2
#編譯的時候的參數最好和老版本的一致
./configure --with-dlz-mysql=/usr/local/mysql/ --enable-largefile --enable-threads=no --prefix=/usr/local/bind --with-openssl=yes
make
make install
4. 重啟bind
#殺掉named進程后啟動新版本bind
kill -9 `ps aux | grep named|grep -v "grep" | awk '{print $2}'`
/usr/local/bind/sbin/named -c /usr/local/bind/etc/named.conf
5. 查看版本情況
/usr/local/bind/sbin/named –V
#此時我們已經可以看到新版本的bind信息了
BIND 9.9.1-P2 built with '--with-dlz-mysql=/usr/local/mysql/' '--enable-largefile' '--enable-threads=no' '--prefix=/usr/local/bind' '--with-openssl=yes'
using OpenSSL version: OpenSSL 0.9.8e-rhel5 01 Jul 2008
using libxml2 version: 2.6.26
6. 測試解析是否正常
dig @119.135.22.32 www.baidu.com
此時如果dns解析正常的話,整個升級過程就完成了。
總結:作為一個系統管理員或者網絡管理員,我們應該定期地去權威的漏洞網站,查看我們線上使用的軟件以及系統是否存在嚴重的安全漏洞,一經發現則要提高安全意識,盡快的將漏洞補上,減少安全事件的發生。sebug.net是一個很好的權威漏洞網站,大家沒事的時候可以多去逛逛。對於以上的幾個bind的安全漏洞也希望廣大的IT技術人員能夠引起注意。
https://docs.oracle.com/cd/E56344_01/html/E53898/dnsref-40.html
在生成 BIND 時使用的編譯標志
您可以使用 named –V 命令查看用於編譯 BIND 的標志。此表顯示了在為 Oracle Solaris 11 發行版生成 BIND 的 ISC 版本時使用的某些編譯標志。
|
http://www.it165.net/admin/html/201304/1100.html
前言:使用關鍵字「named、安裝、centos...等」來搜尋就可以找到一大堆的說明文章,而且眾網友也都說明的很詳細,故在此我僅以簡略的說明安裝過程,及其遭遇到的問題處理。
如果:你是使用套件安裝 yum、rpm 等,你可以不需要看下去。
BIND 的官網:https://www.isc.org/software/bind
安裝步驟 指令+說明
01.
sudo
yum
install
-y openssl openssl-devel
02.
//安裝 openssl 套件
03.
sudo
yum
install
-y gcc
04.
//安裝 gcc 套件
05.
wget http://
ftp
.isc.org/isc/bind9/9.9.2-P2/bind-9.9.2-P2.
tar
.gz //下載新版的 9.9.2 bind Source
06.
tar
zxvf bind-9.9.2-P2.
tar
.gz
07.
//解壓縮、解包裝
08.
cd
bind-9.9.2-P2
09.
//進入剛剛解開的目錄
10.
./configure --prefix=/var --sysconfdir=/etc/ --localstatedir=/var --
enable
-threads --with-openssl=
yes
CFLAGS=
"-DDIG_SIGCHASE"
11.
//對 Bind 的安裝環境、路徑做設定
12.
// 分別是 bind安裝路徑、named.conf放的路徑、狀態路徑、啟用thread執行緒、啟用openssl、啟用DNSSEC的 validation 功能
13.
make
14.
//編譯 compiler BIND 的原始檔
15.
make
-n
install
16.
//測試安裝
17.
sudo
make
install
18.
//安裝BIND到系統去,他會依你 configure 所指的路徑去放
19.
ls
-al /dev/urandom
20.
//觀看 urandom 檔案是否存在
21.
sudo
/var/sbin/rndc-confgen -r /dev/urandom -a
22.
//利用rndc-congen 以hmac-md5 產出secret 的
hash
key,放在 --sysconfdir 所指定的路徑
23.
sudo
mkdir
/var/named
24.
//建立 BIND 設定 zone
file
的路徑目錄
25.
wget -O named.root
ftp
://
ftp
.internic.net/domain/named.root
26.
//取得 DNS ROOT 的資料
27.
sudo
mv
named.root /etc/
28.
//搬到 /etc 目錄下
29.
wget http://
ftp
.isc.org/isc/bind9/keys/9.8/bind.keys.v9_8
30.
//抓取新版BIND的KEY
31.
more
/etc/bind.keys
32.
//然后跟現有的KEY做個比對,相同的話就不需要更換了
33.
sudo
vi
/etc/named.conf
34.
//開始編修你的 named.conf ,這個檔案最重要但卻沒樣版的 example,因為
35.
『 Isn't
"make install"
supposed to generate a default named.conf? Short Answer: No.
36.
There really isn't a default configuration
which
fits any site perfectly.』
37.
如果真不知道怎么開始可以參考:http://ostechnix.<;a href=
"http://www.it165.net/edu/ebg/"
target=
"_blank"
class=
"keylink"
>word</a>press.com/2013/01/25/setup-dns-server-step-by-step-
in
-centos-6-3-rhel-6-3-scientific-linux-6-3-3/
38.
/etc/named.conf 里就要指定每個 zone files 所要放的路徑跟名稱,所以下面三個動作,請依你自己的環境修改
39.
sudo
mkdir
/var/named/domain
40.
41.
sudo
mkdir
/var/named/reverse
42.
43.
sudo
mkdir
/var/named/slaves
44.
45.
sudo
useradd
named
46.
//步驟21,22 是為了將 named 的執行身份以特殊帳號 named 來執行,避免直接使用 root 身份,以免 BIND 漏洞造成系統整個權限淪陷,后面執行 named 也會以 /var/sbin/named -u named 來執行。
47.
sudo
groupadd named
48.
//新增 named 群組
49.
sudo
chown
named:named -R /var/named
50.
//變更 /var/named 目錄的權限給 named 帳號,這樣做 zone transfer 時才有辦法寫入
51.
sudo
/var/sbin/named -u named
52.
//以 named 身份來執行
53.
sudo
tail
-500 /var/log/messages
54.
//觀看系統LOG是否有什么錯誤訊息
55.
ps
-elf |
grep
name
56.
//觀察 named 是否有執行,當 named.conf 或 /etc/init.d/named 有誤時,不見得畫面上會出現錯誤訊息,建議要多觀察 log 與觀看 process 是否有執行
57.
---↑↑↑ 上面是安裝 BIND 所需要的步驟---
58.
---↓↓↓ 下面是自動執行 named 所需要的設定 ---
59.
chkconfig
60.
//先觀察 named 是否有在清單中
61.
chkconfig named on
62.
//觀察后,你可以以這種方式讓 named 在 system level 2,3,4,5 都會執行,當然你也可以單獨指定只有那個(些) level 再執行
63.
service named start
64.
//這一步驟,如果你是用套件方式安裝,你根本不會遇到問題,但是使用自己
make
方式,就會很容易出錯。
65.
//原因在於目錄 /etc/init.d/ 里 沒有預設 named 這個檔案,所以 service 也就不知道怎么讓 named 啟動、停止、重新啟動。你必須給予一段 script 定義這個 service 在這三個動作的時候,各該怎么辦?這里「http://forum.directadmin.com/archive/index.php/t-30796.html」有 named script 的參考內容。
66.
//但是如果你跟我一樣,在 configure 時有去修改「--prefix=/var」,那么一堆執行檔預設會裝在 /usr/sbin 的都會改安裝到 /var/sbin,也就會造成這個例子的 script 無法直接使用
67.
// 另外因為 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 的方式執行,但這畢竟是不好的。)
68.
sudo
vi
/etc/init.d/named
69.
// 那么就依造你的環境來去修改這個檔案吧!!
70.
service named start
71.
// 改好了,就可以以輕松的管理方式來啟用、停止 named 這項服務了。
72.
sudo
tail
-100 /var/log/messages
73.
// 最后也再看一下 LOG 看是否還有錯誤存在。
74.
dig
+dnssec +multiline nctu.edu.tw @127.0.0.1
75.
// 另都完成后,就可以測試網域名稱查詢,跟測試 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來阻擋這一塊。
Step 1: 修改 sudo vi /etc/named.conf 將 logging 的區塊改成
01.
logging {
02.
channel security_file {
03.
file
"/var/log/named/security.log"
versions 3 size 30m;
04.
severity dynamic;
05.
print-
time
yes
;
06.
};
07.
category security {
08.
security_file;
09.
};
10.
};
重新啟動 sudo service named restart
注:versions 3 size 30m 意思為保留三份,每份 30MB www.it165.net
Step 2:修改 sudo vi /etc/fail2ban/jail.conf 然后修改底下標紅色字的地方
01.
[named-refused-udp]
02.
enabled =
true
03.
filter = named-refused
04.
action = iptables-multiport[name=Named, port=
"domain,953"
, protocol=udp] sendmail-whois[name=Named, dest=you@example.com]
05.
logpath = /var/log/named/security.log
06.
ignoreip = 168.192.0.1
07.
08.
# This jail blocks TCP traffic for DNS requests.
09.
[named-refused-tcp]
10.
enabled =
true
11.
filter = named-refused
12.
action = iptables-multiport[name=Named, port=
"domain,953"
, protocol=tcp] sendmail-whois[name=Named, dest=you@example.com]
13.
logpath = /var/log/named/security.log
14.
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