xinetd 服务的用户们可以选择使用 TCP Wrappers 主机访问规则,也可以通过 xinetd 配置文件提供访问控制,或二者混合使用。请参阅 第 3.2.2 节 “TCP Wrappers 配置文件” 来获取关于 TCP Wrappers 主机访问控制文件的更多信息。
这一部分讨论如何使用 xinetd 来控制对各种服务的访问。
与 TCP Wrappers 不同的是,对访问控制作出的配置改变只有在 xinetd 管理员重新启动 xinetd 服务后才起作用。
与 TCP Wrappers 不同的还有,通过 xinetd 实现的访问控制只影响由 xinetd 控制下的各项服务。
xinetd 主机访问控制与 TCP Wrappers 使用的方法不同。TCP Wrappers 把所有访问配置设定放在两个文件里,即 /etc/hosts.allow 和 /etc/hosts.deny。而 xinetd 的访问控制设定是一项服务一个配置文件,这些文件位于 /etc/xinetd.d/ 目录下。
下面是一些 xinetd 支持的主机访问控制选项:
only_from — 只允许特别指定的主机使用这项服务。
no_access — 阻断列出的主机使用这项服务。
access_times — 指定某一特定服务可能需要的时间段。该时间段的表达必须用 24-小时的符号格式,即:HH:MM-HH:MM。
only_from 和 no_access 选项可以使用很多 IP 地址或主机名,或者可以指定整个网络。与 TCP Wrappers 类似, 将 xinetd 访问控制与增强的日志记录配置相结合可以提高安全性,这样可以阻断被禁止主机的请求同时又详细记录每一次的连接尝试。
例如,下面的 /etc/xinetd.d/telnet 文件可以用来阻断来自某特定网络群体的 Telnet 访问,也用来限制允许用户们登录的总体时间段:
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/kerberos/sbin/telnetd
log_on_failure += USERID
no_access = 172.16.45.0/24
log_on_success += PID HOST EXIT
access_times = 09:45-16:15
}
在这个例子中,当一个来自 10.0.1.0/24 网络的用户系统,比如I 10.0.1.2,试图访问 Telnet 服务时,会收到下面的讯息:
连接由外连主机关闭。
另外,他们的登录试图会记录在 /var/log/messages 中,如下:
Sep 7 14:58:33 localhost xinetd[5285]: FAIL: telnet address from=172.16.45.107 Sep 7 14:58:33 localhost xinetd[5283]: START: telnet pid=5285 from=172.16.45.107 Sep 7 14:58:33 localhost xinetd[5283]: EXIT: telnet status=0 pid=5285 duration=0(sec)
当 TCP Wrappers 和 xinetd 连用来进行访问控制时,了解这两种访问控制机制之间的关系是很重要的。
当一个客户请求连接时, xinetd 控制下的事件发生顺序如下:
xinetd 守护进程通过使用 libwrap.a 库呼叫来访问 TCP Wrappers 主机访问规则。如果一个拒绝规则匹配这个客户,那么连接就被放弃。如果一个允许规则匹配这个客户的话,该连接就被传递给 xinetd。
xinetd 守护进程检查其本身的访问控制规则,这种检查既为 xinetd 服务,也为被请求的服务。如果一个拒绝规则匹配这个客户,那么连接就被放弃。否则,xinetd 就启动这项被请求的服务,并让连接连到那项服务上。
当把 TCP Wrappers 访问控制与 xinetd 访问控制一起用时一定要小心。配置不当可以引起不良后果。