建立安全的DNS服务器
作者:用户r0t3utxyco | 来源:互联网 | 2017-11-06 18:16
文章标题:建立安全的DNS服务器。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
和其它大型软件一样,BIND(DNS服务器)也因其体积庞大和功能繁杂而存在许多问题。因此针对BIND安全漏洞的系统入侵数量也在大幅度上升,最严重的甚至可获取目标主机的所有远程控制权。由于DNS服务器主机对网络系统有着很大的影响,如何避免这些系统入侵也变得至关重要了。 这篇短文的主旨是讲述如何利用chroot()环境在RedHat Linux(或类似系统)中建立安全的BIND 8.x服务器。本文内容主要来自于Adam Shostack和他在这方面的文章(Solaris版本)。 步骤一:软件获取和安装 请到ISC FTP站点下载BIND的最新版本(本文内容在BIND 8.x版本中经过测试)。 到Obtuse System FTP站点下载本文必需的免费软件:holelogd(及其它有用的工具)。该软件用于在chroot环境中建立/dev/log套接字(socket),从而使syslogd能够记录named进程的日志。OpenBSD系统的syslogd已内建了这一功能("syslogd -a /chroot/dev/log"),但Linux系统尚未实现这一功能。Holelogd软件就是用来模仿OpenBSD的这个功能。 按照软件文档安装holelogd(通常被安装到/usr/local/sbin)。 步骤二:构造静态(static)的named和named-xfer二进制文件 在编译和安装后,你需要构造可执行文件的静态链接版本。只要对%BIND%/src/port/linux目录下的Makefile.set文件稍加修改后即可。 修改文件内容: 'CDEBUG= -O2 -g' 替换为: 'CDEBUG= -O2 -static' 切换到BIND的源代码路径,执行"make clean"和"make"命令。在下面的步骤中将会把这些文件复制到chroot()目录下。 本步骤构造的静态链接执行文件在运行时无需装载动态链接库。在chroot()环境中,这种“独立”可执行文件可避免出现缺少链接库文件问题。它在chroot()环境中无需任何静态链接库,可使服务配置简单化。其它所有的网络守护进程也可以编译和使用这种静态链接版本。 步骤三:构造BIND目录 为chroot()环境构造BIND目录。这个目录将在chroot()环境中被BIND当作系统根目录。 /dev /etc /namedb /usr /sbin /var /run 需要复制以下文件到其下的相应子目录中,和进行一些必要的处理: / 无 /etc 复制系统/etc目录下的named.conf文件 复制系统/etc目录下的localtime文件(为syslog提供正确的named日志记录时间) 创建仅包含named GID的/etc/group文件 /etc/namedb 复制系统/etc/namedb目录下的所有“区(zone)”数据库和文件 /dev mknod ./null c 1 3; chmod 666 null(请参阅相应版本的mknod命令) /usr/sbin 复制系统%BIND%/src/bin/named目录和系统%BIND%/src/bin/named-xfer目录下的named和named-xfer二进制文件(静态链接版本) /var/run 无 另外还可根据需要指定日志记录目录(如/var/log)。 步骤四:添加named用户和组 在/etc/passwd和/etc/group文件中添加named用户和组。它们是DNS服务器运行时的UID/GID。 此时,你可以到chroot环境中执行"chown -R named.named /etc/namedb"命令。这样当你向系统发送中断信号(kill -INT )时,named进程能够保存服务器缓存和统计信息。如果该目录为root所有则named进程无法将输出写到目录中,但不会影响named服务器功能。另一个选择是仅改变目录权限(使named用户具有写权限),而属主仍然是root。这种方法也是可行的,但必须小心设置,确保其它用户不会修改named记录! *** 重要警告*** 不要用一个已存在的UID/GID(如"nobody")运行named。记住,以chroot环境中使用任何已存在的UID/GID都可能会影响到服务的安全性。必须养成在chroot环境中为每一个守护进程提供独立的UID/GID的习惯。 步骤五:编辑启动脚本 Linux使用SYS V风格的init文件,所以有几个地方都可以放置运行named的命令。(大多数情况下)最好将named初始化脚本放置到/etc/rc.d/init.d/named中。在其中你会找到有关named启动的那一节内容。我们需要添加和修改其中的某些行。 1、在运行named前插入一行以启动holelogd。需要向holelogd提供远程套接字 位置的参数,它应该是在上面步骤中创建的chroot named dev目录。命令行 内容如下: # Start daemons. echo -n "Staring holelogd: " daemon /usr/local/sbin/holelogd /chroot/named/dev/log echo echo -n "Starting named: " daemon named echo touch /var/lock/subsys/named ;; 2、另外还需要修改BIND的启动参数。BIND 8.x版本允许指定运行用户ID和组ID, 它也应该是在上面步骤中特别创建的UID/GID: # Start daemons. echo -n "Staring holelogd: " daemon /usr/local/sbin/holelogd /chroot/named/dev/log echo echo -n "Starting named: " daemon /chroot/named/usr/sbin/named -u named -g named -t /chroot/named echo touch /var/lock/subsys/named ;; 3、named附带的"ndc"脚本可用于控制named的工作。需要编辑这个文件以将PID 文件位置从/var/run/named.pid修改为/chroot/named/var/run/named.pid。 步骤六:服务器测试 输入如下命令启动holelogd进程 /usr/local/sbin/holelogd /chroot/named/dev/log 进入/chroot/named/dev/目录并输入ls -al。应该得到与下面类似的输出: srw-rw-rw- 1 root wheel 0 Jan 01 12:00 log 设定的"s"位指示这是一个套接字(socket)文件。chroot()环境中的named进程将通过该套接字与syslog通讯。 现在输入: /chroot/named/usr/sbin/named -u named -g named -t /chroot/named 如果一切正常,named进程将启动,日志文件将记录named服务器"Ready to answer queries."。 进行适当的DNS测试以确保服务器能正确工作,然后重新启动系统并检验所有配置。BIND正常启动后会报告其chroot()目录和运行UID/GID。你可以使用lsof之类的程序列出主机中所有网络套接字进行检查。 当一切工作正常后,建议将/etc/namedb改名为/etc/namedb.orig或其它名字,同时chmod 000 /usr/sbin/named,这样可以确保这些旧版本的named不会因偶然的失误而使用。 <<完>> 资料来源: ISC (Internet Software Consortium) Steinar Haug Bernhard Weisshuhn Marc Heuse Jan Gruber Adam Shostack Psionic
推荐阅读
在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ...
[详细]
蜡笔小新 2024-12-26 16:16:06
本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ...
[详细]
蜡笔小新 2024-12-25 13:17:38
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ...
[详细]
蜡笔小新 2024-12-27 13:47:38
本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ...
[详细]
蜡笔小新 2024-12-26 19:47:05
本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ...
[详细]
蜡笔小新 2024-12-26 19:14:29
网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ...
[详细]
蜡笔小新 2024-12-26 14:35:04
在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ...
[详细]
蜡笔小新 2024-12-28 08:20:07
本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ...
[详细]
蜡笔小新 2024-12-28 05:52:22
本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ...
[详细]
蜡笔小新 2024-12-27 20:13:35
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ...
[详细]
蜡笔小新 2024-12-26 13:30:37
本文介绍如何通过SSH协议使用Xshell远程连接到Ubuntu系统。为了实现这一目标,需要确保Ubuntu系统已安装并配置好SSH服务器,并保证网络连通性。 ...
[详细]
蜡笔小新 2024-12-25 16:29:11
本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ...
[详细]
蜡笔小新 2024-12-25 16:00:21
本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ...
[详细]
蜡笔小新 2024-12-25 11:31:48
用户r0t3utxyco
这个家伙很懒,什么也没留下!