bind9(named)編譯安裝;bind-chroot


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 版本時使用的某些編譯標志。

表 3-3  BIND 編譯標志

標志名稱
功能
with-openssl
使生成的 BIND 提供加密和安全套接字層 (Secure Sockets Layer, SSL) 支持,這是 DNSSEC 所必需的
enable-threads
啟用多線程
enable-devpoll
使用  /dev/poll 驅動程序以快速輪詢許多文件描述符
disable-openssl-version-check
禁用 OpenSSL 版本檢查,因為 OpenSSL 是由一個單獨的動態庫提供的
enable-fixed-rrset
啟用固定的資源記錄集排序,這是實現向后兼容性所必需的
with-pkcs11
啟用 OpenSSL 加密硬件支持

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM