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 当前最大的缺点是对 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_cpuCPU 每秒最多处理的进程数

Xinetd 安装

  • CentOS 安装 Xinetd
1
2
# 安装
sudo yum -y install xinetd
  • Xinetd 服务管理
1
2
3
4
5
6
7
8
# 启动
sudo service xinetd start

# 停止
sudo service xinetd stop

# 重启
sudo service xinetd restart

参考资料