-
2004-08-18
xinetd参数的介绍
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
xinetd 简介 那么 xinetd 是什么?一句话,它就是个程序。处理入站网络连接没什么神奇。可以使用 Perl、Python 或 Java 来处理。Xinetd 是用 C 编写的,而且它和它的前辈 inetd 一样快,如果不是更快的话(例如,TCP 封装器不必为每个入站连接而执行;它们在启动时装入内存)。 xinetd 正在开发中。(您的版本可能过时了,所以请务必到主页上查找最新的版本;请参阅参考资料。)因为它正在开发中,所以 xinetd 的安全漏洞得以迅速弥补,而不象 inetd 那样薄弱,通常要很长时间才能弥补。当然,xinetd 是随源代码一起交付的,所以您可以复查源代码并自己找到可能存在弱点的地方。 如何使用 xinetd 定义服务呢?编写一个服务文件,它除了指定 /etc/xinetd.conf 中所指定的一般参数之外,还指定特定配置。所以,如果 /etc/xinetd.conf 是这样的: 清单 2,样本 xinetd.conf(标准的 Red Hat 7.1) defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = yes } includedir /etc/xinetd.d 您放到 /etc/xinetd.d 中的每个服务文件都会继承这些缺省值,并指定它自己的参数。这里,telnet 服务在顶级定义,而不是在子目录中定义。这太棒了,这种模块性允许复杂的配置。 要使 xinetd 重新读取配置文件,不必重新启动它。只要向它发送 USR2 信号即可。 那些参数表示什么意思?让我们通读整个清单。您也可以在命令行下使用 man xinetd.conf 来查看列表(如果那个帮助页面正确安装的话),但这个概述试图用更简单的术语来解释参数,并不假定您已经知道关于套接字和服务的所有信息。一些参数(rpc_version、rpc_number)被跳过。 常规参数 id 该服务的唯一名称。服务名称在花括号之前指定,但是 ID 使逻辑上相同的服务可能拥有多个协议。这是对于临时用户的受限使用。例如,NFS 服务可以在 UDP 或 TCP 传输协议上运行。在 Red Hat Linux 7.1 上,TCP 版本(在 /etc/xinetd.d/time 中)和 UDP 版本(在 /etc/xinetd.d/time-udp中)中提供了对于 xinetd 来说内部的时间服务。 type 这实际上应该称为“特殊类型”,因为它只适用于特殊服务。它可以是以下几种类型的组合:“RPC”,用于 RPC 服务(由 SUN 引入的远程过程调用,导致了很多安全性问题,最好避免使用);“INTERNAL”,用于构建到 xinetd 内部的服务,譬如时间服务;“UNLISTED”,用于在系统列表(/etc/services 或用于 RPC 服务的 /etc/rpc)中找不到的非标准服务。 flags 这里放置着所有额外标志。列表很长并且技术性很强;我们感兴趣的标志包括 REUSE(用于套接字重用,譬如 telnet)、NAMEINARGS/NOLIBWRAP(如果您希望手工调用 TCP 封装器或者完全地避免使用封装器)、NODELAY/KEEPALIVE(用于调整 TCP 套接字)、DISABLE(覆盖顶级“disable”参数)以及 SENSOR(用于检测和防止某些类型的“拒绝服务(denial-of-service)”网络攻击)。 disable 除非您希望禁用某项服务,否则总是把它设成“no”。Red Hat Linux 的 chkconfig 程序将为您打开或关闭“disable”参数;在 Red Hat 上,用 chkconfig 启用和禁用特定服务可能比手工方式简单些。请注意,chkconfig 预期在 /etc/xinetd.d/SERVICE 中找到服务文件。所以对于上面清单 2 中的示例,chkconfig 将不会在请求时打开或关闭 telnet。可以将它认为是一个错误或特性,取决于您的观点。 socket_type 通常您希望这个参数设置成“stream”,除非使用 UDP 服务,此时设置成“dgram”。该参数也可以设置成“raw”和“seqpacket”,但极少见。 protocol 这是连接所用的协议,通常是“tcp”或“udp”,但是在理论上您可以使用来自 /etc/protocols 的任何值。 wait 如果设置成“no”,xinetd 将为每个连接上的服务启动一个新的处理程序。如果是“yes”,xinetd 预期该处理程序处理所有后续连接直到它死亡。在大多数情况下,这个参数是“no”。 server, server_args 处理程序的程序名,以及它应当获得的参数。处理程序名不应该象在 inetd 环境下那样,出现在参数中。 port 服务的端口。通常不需要,因为端口通过 /etc/services 文件来映射到服务。 redirect 允许 xinetd 将所有服务的流量发送给另一台主机。因此,受防火墙保护的主机可以通过中央 xinetd 转发器接受安全流量,而不必建立与外部网络的连接。在某些工作中,可以采用这个特征来在两台主机间执行故障转移服务。 banner, banner_success, banner_fail 一个将要在“任意/一个成功/一个不成功”连接上打印的来自文件的定制文本块。 enabled 在全局级别上补充“disabled”参数和 DISABLE 标志。 include, includedir 告诉 xinetd 要包含文件或目录。 环境参数 user, group, umask, groups 当启动服务处理程序时,xinetd 应该扮演的 UNIX 属性。这主要用于非安全服务。 nice 确定该服务对于系统有多重要的 UNIX 优先级级别。可以针对您的系统调整它,请查看“nice”的 man 页面。 env 用于服务处理程序的环境变量。 passenv 应该向下传递到服务处理程序的 xinetd 中的环境变量。 资源管理参数 instances 可以同时启动的处理程序数。可以调整这个参数以防止拒绝服务攻击。如果您希望缺省(无限制)行为,将它设置成“UNLIMITED”。 max_load I: ) 如果系统过载,停止接受连接。负载数取决于系统,仅当您确实知道自己在做什么时才能调整它。 rlimit_as, rlmist_cpu, rlimit_data, rlimit_rss, rlimit_stack rlimit 参数指定用于服务处理程序的资源限制(内存、CPU 以及特定内存区域)。 特定于安全性的参数 only_from, no_access 对 TCP 封装器的补充,这是阻挡主机建立与我们的连接的方法之一。请注意,缺省值是允许对任何人的访问,除非 TCP 封装器(其规则通常在 /etc/hosts.allow 中)另有规定。 access_times 一天中服务可用的时间。例如,“6:00-23:00”意味着服务从上午 6 点到晚上 11:01 可用。 log_type, log_on_success, log_on_failure 各种日志记录选项。USERID 标志可能特别麻烦,因为它向连接的主机询问关于与我们连接的用户,这使得处理变慢。尽可能避免使用 USERID。 bind 允许服务特定于接口,通常是出于安全性考虑。例如,在网络内部的 FTP 服务只是 FTP,而外部 FTP 连接将生成入侵者警报。“id”参数在这里很有用。 per_source 指定来自源 IP 的服务的最大实例数。对于处理“单源拒绝服务(single-source denial-of-service)”攻击或出错程序建立的过多连接非常有用。 cps 每秒允许的最大连接数,以及服务再度启用之前的秒数。“30 45”表示“每秒 30 个入站连接,如果超过限制,则等待 45 秒”。主要用于对付拒绝服务攻击。 deny_time 对引发 SENSOR 标志的人拒绝服务的时间。
http://debiannotes.blogbus.com/logs/336367.html
随机文章:
网络路由不正常,小记一下 2004-10-28某个端口现在运行什么监听程序 2004-09-30linux error messages 2004-09-21常见的PAM认证模块简介 2004-09-08Linux下制作及烧录光盘 2004-09-08
收藏到:Del.icio.us







