中国移动DNS服务器安全配置手册doc.docx
- 文档编号:10568840
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:23
- 大小:139.57KB
中国移动DNS服务器安全配置手册doc.docx
《中国移动DNS服务器安全配置手册doc.docx》由会员分享,可在线阅读,更多相关《中国移动DNS服务器安全配置手册doc.docx(23页珍藏版)》请在冰点文库上搜索。
中国移动DNS服务器安全配置手册doc
密级:
文档编号:
项目代号:
中国移动
DNS服务器
安全配置手册
Version1.0
中国移动通信有限公司
二零零四年十一月
拟制:
审核:
批准:
会签:
标准化:
版本控制
版本号
日期
参与人员
更新说明
分发控制
编号
读者
文档权限
与文档的主要关系
1
创建、修改、读取
负责编制、修改、审核
2
批准
负责本文档的批准程序
3
标准化审核
作为本项目的标准化负责人,负责对本文档进行标准化审核
4
读取
5
读取
1常见的DNS攻击
目前DNS受到的网络攻击大致有这么几种:
区域传输、版本发现、DoS、高速缓存破坏、缓冲区溢出等。
1.1区域传输
进行区域传输攻击DNS的方法是执行无限制的区域传输或捏造许可证,造成的后果是主管的域名信息泄露。
区域传输一般用于主DNS服务器和辅DNS服务器之间的数据同步,DNS服务器可以从主服务器获取最新区数据文件的副本,也就可以获得整个授权区域内的所有主机信息。
一旦这些信息泄漏,攻击者就可以根据它轻松地推测主服务器的网络结构,并从这些信息中判断其功能或发现那些防范措施较弱的机器。
1.2版本发现
发现软件版本有助于攻击者探测服务器。
利用版本发现攻击DNS的方法是查询版本文件,造成的后果是软件版本泄密。
软件版本信息很少被用到,应该被改变或清空。
BIND(BerkeleyInternetNameDomain)DNS守护进程会响应许多dig版本查询,允许远程攻击者识别它的版本。
1.3DoS攻击
Dos是DenialofService的缩写,意为拒绝服务。
DoS攻击是网络上一种简单但很有效的破坏性攻击手段,其中SYNFlood攻击是最为常见的DoS攻击方式。
SYNFlood攻击就是攻击者利用伪造的IP地址,连续向被攻击的服务器发送大量的SYN包。
被攻击的服务器收到这些SYN包后,连续向那些虚假的客户机(伪造的IP地址指向的客户机)发送ACK确认包。
很显然,服务器是不会收到ACK确认包的,于是服务器就只能等待了。
当服务器因超时而丢弃这个包后,攻击者虚假的SYN包又源源不断地补充过来。
在这个过程中,由于服务器不停顿地处理攻击者的SYN包,从而正常用户发送的SYN包会被丢弃,得不到处理,从而造成了服务器的拒绝服务。
1.4缓存破坏(cachepoisoning)
这是DNS面临的一种很普遍的攻击.它利用了DNS的缓存机制使某个名字服务器在缓存中存入错误的数据。
当某名字服务器A收到递归查询请求,而A的数据库内没有相应的资源记录,那么它就会转发给名字服务器B,B做出应答,把回答放在报文的回答区中,同时又会在附加区中填充一些和查询不太相关的数据,A接收这条应答报文,而且对附加区中的数据不做任何检查,直接放在缓存中。
这样使得攻击者可以通过在B中存放一些错误的数据,让A把这些错误的数据存放在缓存中。
在这些数据的生存期TTL内,A又可能会把它们发送给别的服务器,导致更多的服务器缓存中毒。
虽然缩短缓存数据的TTL能减小受害面,但这种方法会给服务器的性能带来负面影响。
1.5缓冲区溢出
和任何其他应用程序一样,DNS也容易出现内存溢出。
授权DNS服务器可以和Internet的任何系统交互,所以DNS已经成为缓冲区溢出漏洞最普遍的受害者。
1.6其他攻击技术
如果攻击者可以嗅探网络流量,后果将是不可预料的。
欺骗区域传输、欺骗查询应答和中间人攻击都很容易进行。
网络泄密是较高风险的漏洞。
对于一次恶意攻击来说,攻击一台DNS就像逆向工作。
通过中间人进行的DNS查询欺骗完全可以被攻击者控制。
查询流量通常是由UDP完成的,并且只交换公开信息。
2现有的DNS攻击防范措施
DNS服务器最常见的安全措施就是限制谁能访问它:
服务器只需要和有限的终端客户端通信。
限制访问可以阻止未授权用户使用服务器,从而有可能阻止查看漏洞级别的行为。
为了尽量减少暴露的漏洞,除了打开有数据进出的授权服务器的UDP端口53外,所有的端口都应该禁止Internet访问。
在一些特殊情况下,TCP端口53也需要打开,但应该尽可能将其关闭。
2.1限制区域传输
可以禁用区域传输,而使用rsync软件(http:
//rsync.samba.org)进行安全的文件同步。
在DNS守护进程外部,通过加密通道进行区域文件同步,可以很好地分离守护进程操作和数据同步操作。
如果区域传输被禁止,攻击者将接收到传输失败的消息。
2.2限制版本欺骗
通过相应的设置限制版本欺骗。
2.3减轻DoS所造成的损失
许多操作系统特性可以遏制SYN包攻击,并且许多类似的网络设备可以验证包和丢掉欺骗包。
防御DoS攻击的最好方法是采用事故反应计划和IDS传感器数据。
2.4防御缓存破坏
缓存破坏很容易防御。
所有DNS守护进程都可以选择关闭缓存。
如果缓存不能用,对服务器所做出的虚假回应就没有意义。
大多数最新的守护进程已经有了针对缓存破坏的补丁。
2.5防御缓冲区溢出
许多工具可以防止未授权溢出。
防缓冲区溢出的编辑器如stackguard(http:
//www.immunix.org/products.html#stackguard)应该和最新的DNS守护进程相结合。
但是,虽然在chroot环境中运行守护进程和限制访问可以限制暴露点,真正阻止缓冲区溢出需要一个从底层开始就安全的平台。
一个安全的操作系统和守护进程是减少缓冲区溢出的最好的工具。
2.6应用Bogon过滤
拦截无效和无用的InternetIP地址,可以减少DoS攻击时的网络负担,有助于通知网管关注网络问题。
在网络边界,防火墙和应用程序访问控制列表内部,应用RobThomas的BogonList,可以可靠地清除不需要的网络流量,并防止滥用网络。
BogonList见:
。
2.7SplitDNS
采用SplitDNS技术把DNS系统划分为内部和外部两部分,外部DNS系统位于公共服务区,负责正常对外解析工作:
内部DNS系统则专门负责解析内部网络的主机。
当内部要查询Internet上的域名时。
就把查询任务转发到外部DNS服务器上,然后由外部DNS服务器完成查询任务。
把DNS系统分成内外两个部分的好处在于Internet上其它用户只能看到外部DNS系统中的服务器,而看不见内部的服务器。
而且只有内外DNS服务器之间才交换DNS查询信息,从而保证了系统的安全性。
采用这种技术可以有效地防止信息泄漏。
2.8用路由器和防火墙做DNS的安全防护
采用一些网络及安全设备能更有效的保护DNS的安全。
如果在没有防火墙的情况下,可以直接在路由器上设置ACL访问控制列表,只允许对DNS的TCP和UDP的53端口进行访问,其余访问一律丢弃;
如果采用防火墙来保护则能起到更好效果,同样的对DNS的访问除了TCP和UDP的53端口开放之外,拒绝其他的所有访问。
同时,当前主流的防火墙如CheckPoint和Netcreen等都有防DNS欺骗的功能,即使其他非DNS的访问或攻击行为通过封装成53端口伪造成正常的DNS请求,防火墙也可以对这些虚假请求进行检查,只要是不符合DNS服务的标准,则一律过滤,保证攻击行为无法通过53端口来穿透防火墙。
3BIND安全配置
3.1配置环境:
FreeBSD4.1-RELEASE;
BIND8.2.3。
3.2启动安全选项
named进程启动选项:
-r:
关闭域名服务器的递归查询功能(缺省为打开)。
该选项可在配置文件的options中使用"recursion"选项覆盖。
-u
定义域名服务器运行时所使用的UID和GID。
这用于丢弃启动时所需要的root特权。
-t
指定当服务器进程处理完命令行参数后所要chroot()的目录。
3.3配置文件中的安全选项
Solais、FreeBSD、Linux等系统,Bind的配置文件为:
/etc/named.conf
3.3.1安全日志文件
●操作方法:
假如希望记录安全事件到文件中,但同时还希望保持原有的日志模式,可以添加以下内容:
logging{
channelmy_security_channel{
file"my_security_file.log"versions3size20m;
severityinfo;
};
categorysecurity{
my_security_channel;
default_syslog;default_debug;};}
其中my_security_channel是用户自定义的channel名字,my_security_file.log是安全事件日志文件,可包含全路径(否则是以named进程工作目录为当前目录)。
安全事件日志文件名为my_security_file.log,保存三个最近的备份(my_security_file.log0、my_security_file.log1、my_security_file.log2),日志文件的最大容量为20MB,如果达到或超这一数值,直到该文件被再次打开前,将不再记录任何日志消息。
缺省是没有大小限制的。
●操作结果:
日志记录完整,所有异常问题都会在日志文件记录。
3.3.2隐藏版本信息
●操作方法:
在options节中增加自定义的BIND版本信息,可隐藏BIND服务器的真正版本号。
version"Whoknows?
";//version9.9.9;
●操作结果:
此时如果通过DNS服务查询BIND版本号时,返回的信息就是"Whoknows?
",隐藏了真实的版本号。
3.3.3禁止DNS域名递归查询
●操作方法
要禁止DNS域名递归查询,在options(或特定的zone区域)节中增加:
recursionno;
fetch-glueno;
●操作结果
防止了DNS域名的递归查询。
3.3.4增加出站查询请求的ID值的随机性
●操作方法
在options节中增加:
use-id-poolyes;
●操作结果
服务器将跟踪其出站查询ID值以避免出现重复,并增加随机性。
注意这将会使服务器多占用超过128KB内存,缺省值为no。
3.3.5限制对DNS服务器进行域名查询的主机
●操作方法
在options(或特定的zone区域)节中增加:
allow-query{
address_match_list是允许进行域名查询的主机IP列表,如"1.2.3.4;5.6.7/24;"。
●操作结果
限制对DNS服务器进行域名查询的主机。
3.3.6限制对DNS服务器进行域名递归查询的主机
●操作方法
在options(或特定的zone区域)节中增加:
allow-recursion{
address_match_list是允许进行域名递归查询的主机IP列表,如"1.2.3.4;5.6.7/24;"。
●操作结果
限制了对DNS进行域名递归查询的主机。
3.3.7指定允许哪些主机向本DNS服务器提交动态DNS更新
●操作方法:
在options(或特定的zone区域)节中增加:
allow-update{
address_match_list是允许向本DNS服务器提交动态DNS更新的主机IP列表,如"1.2.3.4;5.6.7/24;"。
●操作结果
缺省时为拒绝所有主机的提交,完成操作后只有指定的主机可以提交动态DNS更新。
3.3.8限制对DNS服务器进行区域记录传输的主机
●操作方法
在options(或特定的zone区域)节中增加:
allow-transfer{
address_match_list是允许进行区域记录传输的主机IP列表,如"1.2.3.4;5.6.7/24;"。
●操作结果
只有特定的主机可以进行区域传输,降低了受区域传输攻击的风险。
3.3.9指定不接受哪些服务器的区域记录传输请求
●操作方法
在options(或特定的zone区域)节中增加:
blackhole{
address_match_list是不接受区域记录传输请求的主机IP列表,如"1.2.3.4;5.6.7/24;"。
●操作结果
不允许特定的主机进行区域传输,降低了受区域传输攻击的风险。
3.3.10一些资源限制选项
●操作方法
coresize
缺省为default。
datasize
缺省为default。
files
缺省为
//unlimited(不限制)。
//(注意,并非所有操作系统都支持这一选项。
)
max-ixfr-log-size
)限制增量区域记录传输时会话日志的大小。
stacksize
缺省为default。
●操作结果
不同用户可根据实际情况灵活设置,但一定要注意不当的设置会损失DNS服务的性能。
3.3.11定义ACL地址名
●操作方法
即用于上面的
注意,如果要使用这里定义的列表名,必须先定义,后使用!
例如:
aclintranet{
192.168/16;};aclpartner{
!
172.16.0.1;
172.16/12;//除172.168.0.1外172.16.0.0/12网络中其它主机};
BIND已内置以下四个ACL:
all//允许所有主机
none//禁止所有主机
localhost//本机的所有网络接口
localnets//本机所在网络
●操作结果
此操作不会对系统产生不良影响。
3.3.12控制管理接口
●操作方法
控制管理接口controls节语法格式:
controls{
[inetip_addr
portip_port
allow{
[unixpath_name
permnumber
ownernumber
groupnumber;]
};
controls节提供管理接口。
如果使用第一种(inet),则在指定IP(接口)和端口上监听,但只允许在allow中限定允许与其连接的IP地址列表。
如果使用第二种(unix),则产生一个FIFO的控制管道,权限、属主和用户组都由其参数限定。
●操作结果
上述操作建议在正确配置时不会对系统造成不良影响,但建议谨慎使用。
3.4通过TSIG对区域记录传输进行认证和校验
对区域传输进行认证和校验可以降低DNS服务器遭受区域传输攻击的风险。
在BIND8.2+中,能够使用事务签名(TransactionSignatures,即TSIG)来对区域记录数据进行验证和校验。
它要求在主域名服务器和辅助域名服务器上配置好加密密钥,并通知服务器使用该密钥与其它域名服务器通讯。
注意,TSIG的使用要求域名服务器必须进行时钟同步。
3.4.1用TSIG签名来进行安全的DNS数据库手工更新
如果需要用TSIG签名来进行安全的DNS数据库手工更新,具体操作步骤很简单:
3.4.1.1使用BIND自带的dnskeygen工具生成TSIG密钥。
#dnskeygen-H128-h-ntsig-key.
则会生成两个文件。
'Ktsig-key.+157+00000.key'内容如下:
tsig-key.INKEY5133157awwLOtRfpGE+rRKF2+DEiw==;
'Kvip-key.+157+00000.private'内容如下:
Private-key-format:
v1.2Algorithm:
157(HMAC)Key:
awwLOtRfpGE+rRKF2+DEiw==。
注意这些密钥都已经过BASE64编码了。
3.4.1.2主域名服务器配置文件的相关内容
将它们放到本地域名服务器的配置文件中。
例如:
keytsig-key.{algorithmhmac-md5;secret"awwLOtRfpGE+rRKF2+DEiw==";};
zone""{
...
...
allow-update{keytsig-key.;};}
重启named守护进程。
然后将这两个密钥文件复制到客户端系统(或辅助域名服务器),例如为/var/named/tsig目录。
最后运行如下命令即可:
nsupdate-k/var/named/tsig:
tsig-key.
3.4.2对区域记录传输(自动或手工)进行TSIG签名
如果需要对区域记录传输(自动或手工)进行TSIG签名,则:
3.4.2.1用dnskeygen生成TSIG密钥
方法同4.1.1。
3.4.2.2主域名服务器配置文件的相关内容
//定义认证的方法和共享密钥
keymaster-slave{
algorithmhmac-md5;
secret"mZiMNOUYQPMNwsDzrX2ENw==";};
//定义辅助域名服务器的一些特性
server192.168.8.18{
transfer-formatmany-answers;
keys{master-slave;};};
//区域记录定义
zone""{
typemaster;
file;
allow-transfer{192.168.8.18;};};
3.4.2.3辅助域名服务器配置文件的内容(节选)
//定义认证的方法和共享密钥
keymaster-slave{
algorithmhmac-md5;
secret"mZiMNOUYQPMNwsDzrX2ENw==";};
//定义与主域名服务器通讯时的一些特性
server192.168.8.19{
transfer-formatmany-answers;
keys{master-slave;};};
//区域记录定义
zone""{
typeslave;
file"";
masters{192.168.8.19;};
allow-transfer{none;};};
3.5实现BIND的chroot
3.5.1chroot虚拟根环境
CHROOT虚拟根环境
CHROOT就是ChangeRoot,即虚拟根环境,也就是改变程序执行时所参考的根目录位置。
chroot基本上重定义了一个程序的运行环境。
更确切地说,它重定义了一个程序(或登录会话)的“ROOT”目录或“/”。
也就是说,对于chroot了的程序或shell来说,chroot环境之外的目录是不存在的。
一般的目录结构是:
一般的目录结构
/
/bin
/sbin
/usr/bin
/home
CHROOT的目录结构:
Chroot的目录结构
/bind/
/bind/bin
/bind/usr/bin
/bind/home
CHROOT的优点
限制使用者所能执行的程序,如setuid程序。
防止使用者存取某些特定文件,如/etc/passwd。
防止入侵者运行/bin/rm-rf/。
提供Guest服务以及处罚破坏者。
增强系统的安全
3.5.2操作方法
以FreeBSD系统平台为例:
步骤一:
BIND-8的最新源代码版本获取和安装
请到ISCFTP站点下载BIND的最新版本。
BIND8:
http:
//www.isc.org/products/BIND/bind8.html
BIND9:
http:
//www.isc.org/products/BIND/bind9.html
步骤二:
构造静态(static)的named和named-xfer二进制文件
在编译和安装后,你需要构造可执行文件的静态链接版本。
只要对%BIND%/src/port/freebsd目录下的Makefile.set文件稍加修改后即可。
修改文件内容:
'CDEBUG=-O2-g'
替换为:
'CDEBUG=-O2-static'
切换到BIND的源代码路径,执行"makeclean"和"make"命令。
在下面的步骤中将会把这些文件复制到chroot()目录下。
#cd/tmp/bind/src
#makeclean;make
本步骤构造的静态链接执行文件在运行时无需装载动态链接库。
在chroot()环境中,这种“独立”可执行文件可避免出现缺少链接库文件问题。
它在chroot()环境中无需任何静态链接库,可使服务配置简单化。
其它所有的网络守护进程也可以编译和使用这种静态链接版本。
步骤三:
构造BIND目录
为chroot()环境构造BIND目录。
这个目录将在chroot()环境中被BIND当作系统根目录。
在这里我使用/chroot/bind作为chroot后的根目录。
#cd/chroot/bind
#mkdir/chroot
#mkdir/chroot/dev
#mkdir/chroot/etc
#mkdir/chroot/etc/namedb
#mkdir/chroot/usr
#mkdir/chroot/usr/sbin
#mkdir/chroot/var
#mkdir/chroot/var/run
需要复制以下文件到其下的相应子目录中,和进行一些必要的处理:
#cp/etc/namedb/named.conf/chroot/bind/etc/
#cp/etc/localtime/chroot/bind/e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国移动 DNS 服务器 安全 配置 手册 doc