Linux 的 Xinetd 服务介绍
Xinetd 简介
Xinetd 是新一代的网络守护进程服务程序,又叫超级 Internet 服务器,经常用来管理保护多种轻量级 Internet 服务。它在 Linux 的安全中有着举足轻重的地位,它管理的服务都是一些不是很常用,但是系统中偶尔也会用到的小服务或者该服务没什么好的安全机制,比如:Ftp、Rsync、Telnet、SSH 等。它并不是一真正意义上的服务,Xinetd 相当于 Rync、SSH 等服务的代理人,比如代理了 sshd
,那就可以关闭 SSH 服务,22 端口就由 Xinetd 服务代理了。它的作用大致可以分为以下几个:访问控制、防止 DOS 攻击、服务转发、用户交互式体验等。
概念介绍
超级守护进程
:多个服务统一由一个进程管理,该进程可以管理多个服务。独立启动的守护进程
:每个特定服务都有单独的守护进程(stand-alone),这个保证单一服务始终存活的进程就是独立启动的守护进程。
优点介绍
强大的存取控制功能
- 设置特定的连接时间;
- 内置对恶意用户和善意用户的差别待遇设定;
- 使用
libwrap
支持,其效能更甚于tcpd
; - 可以限制连接的等级,基于主机的连接数和基于服务的连接数;
- 将某个服务设置到特定的主机以提供服务。
有效防止 DoS 攻击
- 可以限制连接的等级;
- 可以限制一个主机的最大连接数,从而防止某个主机独占某个服务;
- 可以限制日志文件的大小,防止磁盘空间被填满。
强大的日志功能
- 可以为每一个服务
syslog
设定日志等级; - 如果不使用
syslog
,也可以为每个服务建立日志文件; - 可以记录请求的起止时间以决定对方的访问时间;
- 可以记录试图非法访问的请求。
- 可以为每一个服务
转向功能
- 可以将客户端的请求转发到另一台主机去处理。
支持 IPv6
- Xinetd 从
2.1.8.8 pre*
版本开始就支持 IPv6,另外 IPv4 仍然被支持。
- Xinetd 从
与客户端的交互功能
- 无论客户端请求是否成功,Xinetd 都会有提示告知连接状态。
缺点介绍
Xinetd 当前最大的缺点是对 RPC 支持的不稳定,但是可以启用 protmap
,使它与 Xinetd 共存来解决这个问题。
Xinetd 使用
原则上任何系统服务都可以使用 Xinetd,然而最适合的应该是那些常见的网络服务,并且这些服务的请求数目和频繁程度不会太高。像 DNS 和 Apache 就不适合采用 Xinetd 进行管理,而像 FTP、Telnet、SSH 等就适合使用 Xinetd 进行管理。
- 系统默认使用 Xinetd 的服务可以分为如下几类
- ① 标准 Internet 服务:telnet、ftp。
- ② 信息服务:finger、netstat、systat。
- ③ 邮件服务:imap、imaps、pop2、pop3、pops。
- ④ RPC 服务:rquotad、rstatd、rusersd、sprayd、walld。
- ⑤ BSD 服务:comsat、exec、login、ntalk、shell、talk。
- ⑥ 内部服务:chargen、daytime、echo、servers、services、time。
- ⑦ 安全服务:irc。
- ⑧ 其他服务:name、tftp、uucp。
具体可以使用 Xinetd 进行管理的服务都在 /etc/services
配置文件中定义,该配置文件记录了网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由 4 个字段组成,中间用 Tab 键或空格键分隔,分别表示 服务名称
、使用端口
、协议名称
及 别名
。在一般情况下,不要修改该配置文件的内容,因为这些设置都是 Internet 标准的设置。一旦修改,可能会造成系统冲突,使用户无法正常访问资源。Linux 系统的端口号范围为 0 ~ 65535,不同范围的端口号有不同的意义:
0
:不使用。1 ~ 1023
:系统保留,只能由root
用户使用。1024 ~ 4999
:由客户端程序自由分配。5000 ~ 65535
:由服务器程序自由分配。
Xinetd 配置
Xinetd 的配置文件是 /etc/xinetd.conf
,但是它只包括默认值,并包含 /etc/xinetd.d
目录中的配置文件。如果要启用或禁用某项 Xinetd 服务,可以编辑位于 /etc/xinetd.d
目录中的配置文件。例如,disable
属性被设为 yes
,表示该项服务已禁用;disable
属性被设为 no
,表示该项服务已启用。参数和值之间的操作符可以是 =
、+=
或 -=
。所有属性可以使用 =
,其作用是分配一个或多个值。某些属性可以使用 +=
或 -=
,其作用分别是将其值增加到某个现存的值表中,或将其值从现存值表中删除。详细的配置参数说明如下:
配置参数 | 说明 |
---|---|
enabled | 是否启用该服务或服务列表 |
disabled | 是否停用该服务或服务列表 |
server | 启动脚本的位置 |
server_args | |
socket_type | 服务的数据包类型 |
log_type | 包括:日志类型、路径、报警最大容量、停止服务的最大容量 |
log_on_success | 成功后要将哪些值记录到日志中 |
log_on_failure | 失败后要将哪些值记录到日志中 |
only_from | 只有指定 IP 可以访问 |
no_access | 指定 IP 不可以访问 |
access_times | 允许连接的时间 |
user | 运行此服务进程的用户 |
wait | 服务将以多线程的方式运行 |
max_load | 系统最大负载系数 |
cps m n | 限制每秒 m 个入站连接,如果超过 m,则等待 n 秒,主要用于对付服务攻击 |
port | 连接的端口 |
nice | |
protocol | 连接使用的协议 |
instances | 最大连接进程数 |
per_source | 限制每个主机的最大连接数 |
bind | |
mdns | |
v6only | |
passenv | |
groups | |
umask | |
banner | |
banner_fail | |
banner_success | |
rlimit_as | 最多可用内存 |
rlimit_cpu | CPU 每秒最多处理的进程数 |
Xinetd 安装
- CentOS 安装 Xinetd
1 | # 安装 |
- Xinetd 服务管理
1 | # 启动 |