了解Linux的网络守护神xinetd
Linux之家
如果你使用了Linux,那么有一个程序你必须了解,因为它能帮你更好,更安全地使用电脑。它就是xinetd(Extended Internet Services Daemon)。
xinetd的功能
1.用于TCP、UDP和RPC服务的访问控制。
2.基于时间的访问限制。
3.对成功或不成功连接的扩展登记功能。
4.服务可绑定在特定接口上。
5.提供许多机制以阻止DOS攻击。
a.限制可以同时运行的给定类型的进程数。
b.限制xinetd分流的过程总数。
c.限制登记文件的大小。
xinetd负责接受来自Internet客户端的请求,将客户端的请求及网络服务数据文件(/etc/services)传送至正确的服务器程序,xinetd本身并没有执行该服务。这种工作模式的优点是避免了系统资源的浪费。服务程序因为有xinetd帮助监听来自客户端的请求,所以它们不需要在每次启动时就加载大量的程序。
认识xinetd配置
xinetd的配置文件(/etc/xinetd.conf)中的每一项具有下列形式:
service service_name
{
attribute operator value value ...
}
1.service(服务)是必需的关键字,且属性表必须用大括号括起来。
2.service_name(服务名)是任意的,但通常按标准网络服务选择。
3.有许多attribute(属性)可用,比如:
a.socket_type(使用的TCP/IP socket类型。可接受值是stream(TCP)、dgram(UDP)、raw和seqpacket(可靠的有序数据))
b.protocol(指定该服务使用的协议。必须是/etc/protocols中的一项。如果不指定,使用该项服务的缺省协议)
c.access_time(设置服务可用时的时间间隔。格式是hh:mm-hh:mm;如08:00-20:00意味着从上午8点到晚上8点可使用这项服务)
4.操作符可以是=、+=或-=。所有的属性可以使用=,其作用是分配一个或多个值。某些属性可以使用+=或-=,其作用分别是将其值增加到某个现存的值表中,或将其值从现存值表中删除。
5.value是为给定属性设置的参数。
实战xinetd配置
例1:一个基本的服务echo,它是xinetd固有的服务。
service echo
{
socket_type = stream
protocol = tcp
wait = no
user = root
type = INTERNAL
id = echo-stream
}
echo作为root运行,是一个TCP流,并在内部处理。echo-stream指示符将出现在日志中。
例2:/etc/xinetd.conf中defaults项的配置:
defaults
{
instances = 25
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
defaults项是为配置文件中的所有服务指定缺省值,这些缺省值可被每个服务项废除或修改。defaults项不是一项服务,且不需要前置service关键字。
上面的设置项目说明如下:
1.instances:指单一服务在同一时间内提供连接的上限,若是设置为“Unlimited”则表示没有连接限制,因此适当地设置此值有助于抵挡DOS(拒绝服务)的攻击。
2. log_type:此项目可用来设置日志记录文件输出的位置,“syslog”表示通过“syslog”服务来将日志记录输出到系统日志文件,而“authpriv”表示日志记录的等级。
3.log_on_success:表示连接成功时记录的信息,“HOST PID”是指记录远程主机信息和程序的PID。
4.log_on_failure:表示连接失败时记录的信息,“HOST”是指仅记录远程主机信息。
5.cps:表示限制外部至内部网络的连接速度,它包含了两个参数:第1个参数是指每秒可处理的连接数目,如果连接至内部网络的数目高于这个值,则此服务会暂时停止;第2个参数是指服务暂时停止后,系统等待重新启动服务的秒数。
6.includedir:指定使用xinetd服务的个别Daemon设置文件所在的目录位置。其实可将全部设置都写在/etc/xinetd.conf的文件中,但是以不同的文件来设置不同的Daemon,可提高管理上的效率,以及避免错误的发生。
重启xinetd:在每次修改xinetd或是任何一个Daemon的服务设置后,需要重新启动xinetd才可使设置生效。启动的命令如下:
/etc/rc.d/init.d/xinetd restart
客户端集中管理
除了可以将来自客户端的要求转送至指定的服务程序外,xinetd还具备另一种功能,那就是可以集中式地管理客户端连接,这主要是凭借/etc/hosts.allow和/etc/hosts.deny两个文件。如果希望某些计算机可以访问服务器中由/usr/sbin/tcpd提供的Internet服务,则可在/etc/hosts.allow文件中宣布允许访问的计算机。反之,应该在/etc/hosts.deny文件中定义拒绝访问的计算机。
xinetd在接受来自客户端的服务要求后,会先检查/etc/hosts.allow文件中是否允许此客户端的访问,若是允许则会将此要求转送至指定的服务程序,同时忽略/etc/hosts.deny的检查。
如果在/etc/hosts.allow文件中没有此客户端被允许的记录,xinetd会继续检查/etc/hosts.deny文件的内容,如果该客户端的数据出现在此文件中,则此要求会被拒绝。但如果没有出现,则此客户端的要求仍会被转送至指定的服务程序。
xinetd在审核客户端的连接要求时,只要找到符合的记录就不再往下检查。所以通常会将需要提供服务的客户端记录在/etc/hosts.allow中,而在/etc/hosts.deny中只写入简单的一行(ALL:ALL)。