Xiaopei's DokuWiki

These are the good times in your life,
so put on a smile and it'll be alright

User Tools

Site Tools


it:xinetd

xinetd

如果要写网络(而非 Web)程序, 可注意 The Intelligent Transport Layer - zeromq

Examples

默认配置

/etc/xinetd.conf
defaults
{
# 服务启动成功或失败,以及相关登陆行为的记录文件
        log_type        = SYSLOG daemon info  <==登录文件的记录服务类型
        log_on_failure  = HOST   <==发生错误时需要记录的信息为主机 (HOST)
        log_on_success  = PID HOST DURATION EXIT <==成功启动或登陆时的记录信息
# 允许或限制联机的默认值
        cps         = 50 10 <==同一秒内的最大联机数为 50 个,若超过则暂停 10 秒
        instances   = 50    <==同一服务的最大同时联机数
        per_source  = 10    <==同一来源的客户端的最大联机数
# 网络 (network) 相关的默认值
        v6only          = no <==是否仅允许 IPv6 ?可以先暂时不启动 IPv6 支持!
# 环境参数的配置
        groups          = yes
        umask           = 002
}
 
includedir /etc/xinetd.d <==更多的配置值在 /etc/xinetd.d 那个目录内

一个 rsync 的例子

  • 对内部 127.0.0.1 网域1)开放较多权限的部分:
    1. 这里的配置值需绑在 127.0.0.1 这个接口上;
    2. 对 127.0.0.0/8 开放登陆权限;
    3. 不进行任何联机的限制,包括总联机数量与时间;
    4. 但是 127.0.0.100 及 127.0.0.200 不允许登陆 rsync 服务。
  • 对外部 192.168.1.100 网域较多限制的配置:
    1. 对外配置绑住 192.168.1.100 这个接口;
    2. 这个接口仅开放 140.116.0.0/16 这个 B 等级的网域及 .edu.tw 网域可以登陆;
    3. 开放的时间为早上 1-9 点以及晚上 20-24 点两个时段;
    4. 最多允许 10 条同时联机的限制。
/etc/xinetd.d/rsync
# 先针对对内的较为松散的限制来配置:
service rsync
{
        disable = no                        <==要启动才行啊!
        bind            = 127.0.0.1         <==服务绑在这个接口上!
        only_from       = 127.0.0.0/8       <==只开放这个网域的来源登陆
        no_access       = 127.0.0.{100,200} <==限制这两个不可登陆
        instances       = UNLIMITED         <==取代 /etc/xinetd.conf 的配置值
        socket_type     = stream            <==使用 TCP 的联机机制之故
        wait            = no                <==可以同时进行大量联机功能
        user            = root              <==启动服务为 root 这个身份
        server          = /usr/bin/rsync    <==就是这支程序启动 rsync 的服务啰
        server_args     = --daemon          <==这是必要的选项啊!
        log_on_failure  += USERID           <==登陆错误时,额外记录用户 ID
}
 
# 再针对外部的联机来进行限制呢!
service rsync
{
        disable = no
        bind            = 192.168.1.100
        only_from       = 140.116.0.0/16
        only_from      += .edu.tw           <==因为累加,所以利用 += 配置
        access_times    = 01:00-9:00 20:00-23:59 <==时间有两时段,有空格隔开
        instances       = 10                <==只有 10 条联机
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

一个 xinetd 脚本的例子

xinetd 会将 socket 转为 STDIN/STDOUT

continuous_check.php
#!/usr/bin/env php
<?php
$some_cmd = chr(0xAA) . chr(0xBB) . chr(0xCC);
 
while (1) {
 
	log_command($some_cmd);
	$ret = @fwrite(STDOUT, $some_cmd);
	if ($ret === FALSE) {
		error_log('lost connection');
	}
 
	sleep(1);	// wait for recv
 
	$raw = @fread(STDIN, 1048576);
	log_command($raw, TRUE);
 
	sleep(10);	// wait for next check
}
 
function log_command( $data, $recv = FALSE ) {
	if ($recv) {
		$log_mode = "RECV <== ";
	}
	else {
		$log_mode = "SEND ==> ";
	}
 
	$hex = '';
	for($i=0; $i<strlen($data); $i++) {
		$hex .= sprintf("%02X ", ord($data[$i]));
	}
 
	error_log($log_mode . ' ' . $hex);
}

参数

attribute (功能)说明与范例
一般配置项目:服务的识别、启动与程序
disable
(启动与否)
  • 配置值:[yes|no],默认 disable = yes
disable 为取消的意思,此值可配置该服务是否要启动。默认所有的 super daemon 管理的服务都不启动的。 若要启动就得要配置为『 disable = no 』
id
(服务识别)
  • 配置值:[服务的名称]
虽然服务在配置文件开头『 service 服务名称』已经指定了,不过有时后会有重复的配置值,此时可以用 id 来取代服务名称。 你可以参考一下 /etc/xinetd.d/time-stream 来思考一下原理。
server
(程序文件名)
  • 配置值:[program 的完整檔名]
这个就是指出这个服务的启动程序!例如 /usr/bin/rsync 为启动 rsync 服务的命令,所以这个配置值就会成为: 『 server = /usr/bin/rsync 』
server_args
(程序参数)
  • 配置值:[程序相关的参数]
这里应该输入的就是你的 server 那里需要输入的一些参数啦!例如 rsync 需要加入 --daemon , 所以这里就配置:『 server_args = --daemon 』。与上面 server 搭配,最终启动服务的方式『/usr/bin/rsync --daemon』
user
(服务所属UID)
  • 配置值:[使用者账号]
如果 xinetd 是以 root 的身份启动来管理的,那么这个项目可以配置为其他用户。此时这个 daemon 将会以此配置值指定的身份来启动该服务的程序喔!举例来说,你启动 rsync 时会以这个配置值作为该程序的 UID。
group 跟 user 的意思相同!此项目填入组名即可。
一般配置项目:联机方式与联机封包协议
socket_type
(封包类型)
  • 配置值:[stream|dgram|raw],与封包有关
stream 为联机机制较为可靠的 TCP 封包,若为 UDP 封包则使用 dgram 机制。raw 代表 server 需要与 IP 直接对谈!举例来说 rsync 使用 TCP ,故配置为『socket_type = stream 』
protocol
(封包类型)
  • 配置值:[tcp|udp],通常使用 socket_type 取代此配置
使用的网络协议,需参考 /etc/protocols 内的通讯协议,一般使用 tcp 或 udp。由于与 socket_type 重复, 因此这个项目可以不指定。
wait
(联机机制)
  • 配置值:[yes(single)|no(multi)],默认 wait = no
这就是我们刚刚提到的 Multi-threadedsingle-threaded !一般来说,我们希望大家的要求都可以同时被激活,所以可以配置『 wait = no 』 此外,一般 udp 配置为 yes 而 tcp 配置为 no。
instances
(最大联机数)
  • 配置值:[数字或 UNLIMITED]
这个服务可接受的最大联机数量。如果你只想要开放 30 个人联机 rsync 时,可在配置文件内加入:『 instances = 30 』
per_source
(单一用户来源)
  • 配置值:[一个数字或 UNLIMITED]
如果想要控制每个来源 IP 仅能有一个最大的同时联机数,就指定这个项目吧!例如同一个 IP 最多只能连 10 条联机『 per_source = 10 』
cps
(新联机限制)
  • 配置值:[两个数字]
为了避免短时间内大量的联机要求导致系统出现忙碌的状态而有这个 cps 的配置值。第一个数字为一秒内能够接受的最多新联机要求, 第二个数字则为,若超过第一个数字那暂时关闭该服务的秒数。
一般配置项目:登录文件的记录
log_type
(登录档类型)
  • 配置值:[登录项目 等级]
当数据记录时,以什么登录项目记载?且需要记载的等级为何(默认为 info 等级)。这两个配置值得要看过下一章登录档后才会知道哩!这边你先有印象即可。
log_on_success
log_on_failure
(登录状态)
  • 配置值:[PID,HOST,USERID,EXIT,DURATION]
在『成功登陆』或『失败登陆』之后,需要记录的项目:PID 为纪录该 server 启动时候的 process ID , HOST 为远程主机的 IP、USERID 为登陆者的账号、EXIT 为离开的时候记录的项目、DURATION 为该用户使用此服务多久?
进阶配置项目:环境、网络端口口与联机机制等
env
(额外变量配置)
  • 配置值:[变量名称=变量内容]
这一个项目可以让你配置环境变量,环境变量的配置守则可以参考第十一章
port
(非正规埠号)
  • 配置值:[一组数字(小于 65534)]
这里可以配置不同的服务与对应的 port ,但是请记住你的 port 与服务名称必须与 /etc/services 内记载的相同才行!不过,若服务名称是你自定义的,那么这个 port 就可以随你指定
redirect
(服务转址)
  • 配置值:[IP port]
将 client 端对我们 server 的要求,转到另一部主机上去!呵呵!这个好玩呦! 例如当有人要使用你的 ftp 时,你可以将他转到另一部机器上面去!那个 IP_Address 就代表另一部远程主机的 IP 啰!
includedir
(呼叫外部配置)
  • 配置值:[目录名称]
表示将某个目录底下的所有文件都给他塞进来 xinetd.conf 这个配置里头!这东西有用多了, 如此一来我们可以一个一个配置不同的项目!而不需要将所有的服务都写在 xinetd.conf 当中!你可以在 /etc/xinetd.conf 发现这个配置呦!
安全控管项目:
bind
(服务接口锁定)
  • 配置值:[IP]
这个是配置『允许使用此一服务的适配卡』的意思!举个例子来说,你的 Linux 主机上面有两个 IP ,而你只想要让 IP1 可以使用此一服务,但 IP2 不能使用此服务,这里就可以将 IP1 写入即可!那么 IP2 就不可以使用此一 server 啰
interface
  • 配置值:[IP]
与 bind 相同
only_from
(防火墙机制)
  • 配置值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]
这东西用在安全机制上面,也就是管制『只有这里面规定的 IP 或者是主机名可以登陆!』如果是 0.0.0.0 表示所有的 PC 皆可登陆,如果是 192.168.1.0/24 则表示为 C class 的网域!亦即由 192.168.1.1 ~ 192.168.1.255 皆可登陆!另外,也可以选择 domain name ,例如 .dic.ksu.edu.tw 就可以允许昆山资传系网域的 IP 登陆你的主机使用该 server !
no_access
(防火墙机制)
  • 配置值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]
跟 only_from 差不多啦!就是用来管理可否进入你的 Linux 主机激活你的 server 服务的管理项目! no_access 表示『不可登陆』的 PC 啰!
access_times
(时间控管)
  • 配置值:[00:00-12:00, HH:MM-HH:MM]
这个项目在配置『该服务 server 启动的时间』,使用的是 24 小时的配置!例如你的 ftp 要在 8 点到 16 点开放的话,就是: 08:00-16:00。
umask
  • 配置值:[000, 777, 022]
还记得在第七章提到的 umask 这个东西吗?呵呵!没错! 就是那个鬼玩意儿啰!可以配置用户创建目录或者是文件时候的属性!系统建议值是 022 。

REFS

1)
127.0.0.1 是内部循环测试用的 IP ,用他来设计网络是没有意义的。 这里仅是作一个设计的介绍
it/xinetd.txt · Last modified: 2013/08/19 07:22 (external edit)