第一节 概述
RedHat 7.2 的系统服务存取控制机制主要有两种:一种是以ipchains或iptables为具体实现的firewall机制,另一种是以TCP Wrapper为具体实现的xinetd机制。本文档主要论述后一种机制的具体实现。
1 关于TCP Wrapper
象Telnet、SSH、FTP、POP和SMTP等很多网络服务都会用到TCP Wrapper,它被设计为一个介于外来服务请求和系统服务回应的中间处理软件。它的基本过程是这样的:当系统接收到一个外来服务请求的时候,先由TCP Wrapper处理这个请求,TCP Wrapper根据这个请求所请求的服务和针对这个服务所定制的存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP Wrapper将该请求按照配置文件定义的规则转交给相应的守护进程去处理同时记录这个请求动作,然后自己就等待下一个请求的处理。
TCP Wrapper机制的主要目的在于,来自客户端的请求只被允许同一个独立的守护进程(xinetd)直接通信,而它请求的目标服务被TCP Wrapper包裹起来,这样就提高了系统的安全性和系统管理的方便性。
一方面,TCP Wrapper 提高了系统的安全性。系统安全性的具体体现主要有两点,一个是获取访问权限前的控制,一个是获取访问后的处理。获取权限前,它会根据/etc/hosts.allow和/etc/hosts.deny定制的规则来判断对方是否有权限;获取权限后,通过bind、redirect等属性的设置,可能已经由另一台主机或者另一个服务在处理了对方的请求,而对方并不会感知中间经过了这样的处理。
另一方面,TCP Wrapper更加方便了系统管理。一方面可以抽取系统所有服务共有的属性放到/etc/xinetd.conf中,另一方面,将每一个服务具体的配置放到/etc/inetd.d目录下,而每个配置文件都遵循同样的语法和规则。
TCP Wrapper的功能来自于libwrap.a,它是一个网络服务库,象xinetd、sshd和portmap等许多系统服务编译时都依赖于它,其他的网路服务程序甚至你自己编写的网络服务程序都可以加上这个编译选项来提供TCP Wrapper的功能。
2 关于xinetd
然而,TCP Wrapper机制并不是仅仅有了libwrap.a库就起作用,只有当libwrap.a库和xinetd服务结合使用的时候才能发挥出TCP Wrapper机制的作用。xinetd是RedHat 7.x的超级守护进程,它提供诸如访问控制、请求记录、地址绑定、重定向和资源利用控制等服务。
RedHat Linux 7.x版本中的很多系统服务都用到了xinetd,象FTP, IMAP, POP, 和 telnet.等。/etc/services中所有的服务通过他们的端口来访问服务器的时候,先由xinetd来处理,在唤起对方请求的服务之前,xinetd先检验请求者是否满足配置文件中指定的访问控制规则,当前的访问是否超多了指定的同时访问数目,还有配置文件中指定的其他规则等,检查通过,xinetd将这个请求交付到相应的服务去处理,自己就进入sleep状态,等待下一个请求的处理。
Rredhat 7.x开始更加注重系统安全,最大的特征就是用xinetd.conf代替原来的inetd.conf
并且7.x中默认安装没有开ftp,telnet等熟悉的服务,而是更安全的ssh,7.x还加入firewall等服务增强了系统的安全性。xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。它能提供以下特色:
1、 强大的存取控制功能:
内置对恶意用户和善意用户的差别待遇设定;
使用libwrap支持,其效能更甚于tcpd
可以限制连接等级,基于主机的连接数和基于服务的连接数
设置特定的连接时间
将某个服务设置到特定的主机提供服务
2、 有效防止DOS攻击
可以限制连接的等级
可以限制一个主机的最大连接数,从而防止某个主机独占某个服务
可以限制日志文件的大小,防止磁盘空间被填满
3、 强大的日志功能
可以为每一个服务就syslog设定日志等级
如果不使用syslog,也可以为每个服务建立日志文件
可以记录请求的起止时间以决定对方的访问时间
可以记录试图非法访问的请求
4、 转向功能
可以将客户端的请求转发到另一台主机去处理
5、 支持IPv6
xinetd 自 xinetd 2.1.8.8pre* 起的版本支持 IPv6
6、与客户端的交互功能
无论客户端请求是否成功,xinetd都会有提示告知连接状态
当前,它最大的缺点是对RPC支持的不稳定性,但是可以启动protmap与xinetd共存来解决这个问题。
何时使用xinetd?
原则上任何系统服务都可以使用xinetd,然而,我认为,最适合应该是哪些常用的internet服务,同时,这个服务的请求数目和频繁程度不会太高。象DNS和Apache就不适合采用这种方式,而象Ftp、telnet、 SSH等就很适合使用xinetd方式,至于pop、imap等邮件服务是否适合使用这种方式,我自己也很难下结论,系统默认使用xinetd,很多人也是这样做的,但我没有这方面的测试。
系统默认使用xinetd的服务可以分为如下几类:
1、标准internet服务:telnet ftp
2、信息服务:finger netstat systat
3、邮件服务:imap imaps pop2 pop3 pops
4、RPC服务:rquotad rstatd rusersd sprayd walld
5、BSD服务:comsat exec login ntalk shell talk
6、内部服务:chargen daytime echo servers services time
7、安全服务:irc
8、其他服务:name tftp uucp
第二节 获取、编译与安装
xinetd在RedHat 7.2是默认安装的,所以一般说来,你无需自己去安装。然而,如果你在低版本的RedHat上,你可能需要下面的安装步骤。
1 软件的获取
Xinetd当前最新的版本是2.3.5,发布于May.28.2002。你可以从下面的地址获取它的源代码包:http://www.xinetd.org/xinetd-2.3.5.tar.gz
2 编译安装
现在假设你将该软件下载到/home/src目录,安装步骤如下:
cd /home/src
tar xvzf xinetd*
cd xinetd*
./configure -prefix=/etc -with-libwrap -with-loadavg -with-inet6
make
make install
cp xinetd/sample.conf /etc/xinetd.conf
如果你在旧版本的RedHat上安装,你可能会用到下面的指令,这个perl脚本可以将inetd.conf转换为xinetd.conf:
xinetd/xconv.pl /tmp/xinetd.conf
下面是编译参数说明:
--prefix 指定安装目录
--with-libwrap 加载libwrap.a库,使之可以使用TCP Wrapper功能
--with-loadavg 使之具有限定连接数的功能,避免DOS攻击
--with-inet6 使之支持ipv6
说明:
如果您使用的是RedHat 7.x版本,建议你无需自己安装,这一点跟别的服务不同,如果你自行安装,可能会出现意想不到的麻烦。