基于RedHat配置一个安全的DNS—chrootBIND9
作者:2012开始飞翔 | 来源:互联网 | 2017-06-25 13:16
文章标题:基于RedHat配置一个安全的DNS—chrootBIND9。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类
由于天缘最近使用的比较多的是Red Hat 操作系统,而且自己也是在一台Red Hat 9 下面配置好Bind 9的,因此在下面的例子中就以Red Hat AS3为配置平台进行介绍。天缘所在单位的服务DNS是solaris操作系统,因此写shell的时候,我争取做到对Solaris也通用。由于各种因素,我没能亲自在Solaris上进行测试。下面的安装过程对Red Hat和其他unix操作系统都没问题,最后附上的自动安装的shell脚本我只在Red Hat下测试成功,对Solaris大概也基本上顾及到了,如果大家在实际使用那个脚本的时候发现在Solaris下使用存在问题,请及时反馈到此文的留言中,以使我及时更正,方便其他读者朋友。 首先,在开始以前,让我们解释一下标题中出现的chroot 和 bind这两个词。 先是chroot,事实上,在很多英文文章中,称它为”jail”( 监牢, 拘留所, 监狱)。那么什么是”Jail”呢?简单来说,就是把一个事物限制到某个范围。大家都知道,有时候由于一个应用程序的bug、漏洞等问题,会导致该程序被攻击者控制,取得相应用户的权限,进而取得系统管理员级别的权限。例如Windows用户对一些iis漏洞导致系统最高权限落入攻击者之手的事情肯定时有耳闻。不管什么程序,都可能有bug/漏洞,为了防止这样系统中某程序的漏洞导致系统最高权限被攻击者窃取的事件发生,就需要限制该程序的权限。 所谓的限制,并不是不让该程序运行,而是对程序运行时候可以使用的系统资源、用户权限、所在目录进行严格控制。这样,在该程序被他人非法控制后,能具有的权限也相当有限,对系统也不会造成更大的危害。举个形象的例子,架过ftp 服务器的朋友都知道,用户凭借自己的用户名/密码可以进入到自己的空间内进行上传/下载/添加删除目录等操作权限,而对其他用户的目录和系统的其他目录无法进行任何操作(当然,这些权限是管理者合法授权的),这个就可以看做是一个Jail,把ftp用户限制在自己的目录里。在计算机界术语中,我们把这种对程序的Jail,特称为”chroot”。因此题目中的chroot bind,大家可以理解成“权限受严格限制的bind”。 值得一提的是,chroot的程序并不能说是程序本身更安全了,它跟没有chroot的程序比较,依然有着同样多的bug/漏洞,依然会被攻击者利用这些bug/漏洞进行攻击并得逞。那么我们辛苦chroot是为了什么呢?是为了把损失降低到最小。打个比方,购买人生保险并不能保你一生平安,但是可以在你遇到麻烦的时候让损失少一些。我们的chroot程序也是同样的道理,当攻击者取得了该程序的权限的时候,由于程序本身的权限被严格限制了,因此攻击者无法造成更大的破坏,也无法夺取操作系统的最高权限。DNS 服务器由于是作域名解析之用,需要应付来自各地的很多访问,且一般不限制来访ip,因此安全隐患和被攻击的可能性相当大。做一个DNS服务器的资料网络上到处可寻,而作为网络管理员,我们需要的除了域名解析,还有“安全”(天缘在以前的网管笔记中提到过,“安全是一种意识”,在做任何事情的时候都提醒自己注意安全,是一个称职的网络管理者所应该具备的)! 好了,接下来是第二个名词“Bind”。Bind 是ISC 公司的软件,而它也是目前世界上使用最普遍、最通用的DNS软件,如果说Apache和IIS是两分Web Server天下的话,那么Bind 不折不扣是DNS Server事实上的标准了。 接下来开始步入正题,开始我们的Bind安装之旅。chroot方式安装软件,事实上是把一个软件整体限制到根目录下的一个子目录中。即该软件只在此目录内具有权限,而一旦跳出该目录就无任何权限了。在Bind 8的时候,想要把Bind的全部文件放到一个目录下是一件很麻烦的事,而到了Bind 9开发公司ISC终于顺应民心,不光让Bind 软件能方便地安装到同一目录下进行权限限制作业,而且连远程控制软件也加上了,真是超值奉送 1、安装Bind 9 虽然我所用的Red Hat AS3 中有rpm包,但是为了方便其他操作系统的朋友,我们还是从源代码包方式安装。首先从ISC公司的主页(http://www.isc.org/products/BIND/)下Bind 9 软件包。 wget ftp://ftp.isc.org/isc/bind9/9.2.3/bind-9.2.3.tar.gz 接着开始解压缩(为描述简单,以下操作如无特殊声明,都是以root权限进行) tar vzxf bind-9.2.3.tar.gz 卸载Red Hat 中原有的Bind,一共有三个rpm包 rpm -e bind bind-utils caching-nameserver 进入该目录开始编译安装 ./configure --prefix=/usr/local --disable-ipv6 --disable-threads #因为ipv6和线程方式我用不到就去掉了,把Bind 9安装到/usr/local下 make;make install 到此Bind 9已经安装完成了,普通的 DNS Server 到此就安装结束了,而对我们的chroot 而言才刚开始呢。 2、构建chroot 目录环境 a.创建Bind 工作目录/chroot/named及下属工作目录 rm -rf /chroot/named #删除原来的旧目录,之所以加这句是我写shell的时候调试方便 mkdir -p /chroot/named cd /chroot/named mkdir dev (虚拟/dev) mkdir etc (虚拟/etc) mkdir logs (存放日志) mkdir -p var/run (将来会在这下面放一个named.pid文件) b.建立Bind的组和用户named groupadd named useradd -g named -d /chroot/named -s /bin/true named pASswd -l named #-l ,Lock,表示锁定用户 c.创建虚拟设备(dev),日志记录的时候有的选项可能用到它们。在默认情况下,是使用/dev目录下的文件,但是由于我们需要把DNS限制到一个目录,所以必须完全把/dev下用到的文件(或者说设备)模拟过来才可以。 ls -lL /dev/zero /dev/null /dev/random 看到类似 crw-rw-rw- 1 root root 1, 3 2003-09-15 /dev/null crw-r--r-- 1 root root 1, 8 2003-09-15 /dev/random crw-rw-rw- 1 root root 1, 5 2003-09-15 /dev/zero 这样的,将其中的1,3这样的数字记录下来,这表示主设备号和次设备号(一般来说主设备号用来区分设备的种类;次设备号则是为了作唯一性区分,标明不同属性——注意,在unix系统中是把设备也当作文件来对待的),在redhat 9下,ls加不加-L参数都无所谓,但是在Solaris下则一定要加上才可以显示。 mknod dev/null c 1 3 mknod dev/zero c 1 5 mknod dev/random c 1 8 d.复制时钟文件到我们chroot的etc下,Linux 的时钟设置文件为:/etc/localtime ,实际上这个文件是 /usr/share/zoneinfo 目录下对应文件的符号连接。(假设我们所处的地区位于上海,那么只要运行以下的命令就可以设置时区了。 ln -sf /usr/share/zoneinfo/ASia/Shanghai /etc/localtime;注意在天缘用的solaris 2.6中并没有此文件,而是该用/usr/share/lib/zoneinfo/GB) cp /etc/localtime etc/ 3、创建和设置BIND 9配置文件 默认情形下,bind以/etc/named.conf文件为配置文件。但由于我们这里是要做chroot的DNS,因此需要把named.conf放到/chroot/named/conf下去,然后再做一个符号连接到/etc/named.conf。首先创建并编辑named.conf文件(由于介绍DNS的文章大多对named.conf的配置解释得相当详细,因此我就不一句句解释了,大家结合注释,参考其他文章看看,很容易理解的) vi /chroot/named/etc/named.conf,输入以下内容(由于每个人的配置都不同,所以天缘在这里只列出一个做cache only的DNS的设置) options { //注意,由于是chroot方式,所以以下的/conf、/var并不是系统中真正的/conf和/var目录,而是指/chroot/named下的同名目录,此配置文件中所有地方都如此 directory "/conf"; //配置文件所在目录 pid-file "/var/run/named.pid"; //进程守护文件 statistics-file "/var/run/named.stats"; //状态输出文件;在rndc中用到 dump-file "/var/run/named.db"; //输出数据库文件,在rndc中用到 //隐藏真实版本号,我这里写个4.0作刻意误导 version "[4.0]"; logging { //日志记录 channel LAMER_log { file "/logs/DNS-lamer.log" versions 3 size 10m; severity info; print-severity yes; print-time yes; }; channel SEC_log { file "/logs/DNS-sec.log" versions 3 size 10m; severity info; print-severity yes; print-time yes; }; channel STAT_log { file "/logs/DNS-stat.log" versions 3 size 10m; severity info; print-severity yes; print-time yes; }; category cname { null; }; category lame-servers { LAMER_log; }; category security { SEC_log; }; category statistics { STAT_log; }; }; //根解析 zone "." { type hint; file "named.root"; }; // localhost 解析 zone "localhost" { type mASter; file
推荐阅读
本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ...
[详细]
蜡笔小新 2023-12-12 11:59:08
本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ...
[详细]
蜡笔小新 2023-12-13 13:23:48
本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ...
[详细]
蜡笔小新 2023-12-14 19:05:47
本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ...
[详细]
蜡笔小新 2023-12-14 18:16:27
这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ...
[详细]
蜡笔小新 2023-12-14 16:19:10
本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ...
[详细]
蜡笔小新 2023-12-14 14:01:06
本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ...
[详细]
蜡笔小新 2023-12-14 13:59:45
本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ...
[详细]
蜡笔小新 2023-12-14 11:26:56
本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ...
[详细]
蜡笔小新 2023-12-13 20:24:11
本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ...
[详细]
蜡笔小新 2023-12-12 18:14:32
本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ...
[详细]
蜡笔小新 2023-12-12 10:56:24
本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ...
[详细]
蜡笔小新 2023-12-11 18:38:37
VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ...
[详细]
蜡笔小新 2023-12-14 12:55:15
本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ...
[详细]
蜡笔小新 2023-12-14 12:43:39
本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ...
[详细]
蜡笔小新 2023-12-13 21:47:39