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