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