xinetd的概述:
要理解xinetd首先得明白进程可以分为standalone(独立守护进程)和transient(非独立守护进程) ;standalone是独立的工作在某一套接字上的可以自我启动和关闭,启动后便一直运行的,而transient则需要xinetd来代为管理,如:telnet服务就是由xinetd来管理的,若某用户请求连接telnet,它必须有xinetd来将其启动然后将请求转交给telnet若用户请求完了也有xinetd来将其关闭.
standalone的优点是:响应用户请求快,适合请求量多的
transient的优点是:节约资源,适合请求量少的
xinetd可管理多个非独立守护进程,它们是在/etc/xinetd.d/目录下的对应文件中定义的并且此目录下的所有文件被加载到xinetd中的主配置文件/etc/xinetd.conf中 ,总之,xinetd只是用来管理非独立守护进程的并将它管理的服务提供给用户
xinetd配置文件文件:
#man xinetd.conf可以查阅配置文件中指令的说明
1、/etc/xinetd.conf
定义全局配置的即所有服务的默认配置
defaults {
.......
}
2、/etc/xinetd.d/下的所有服务配置文件
server service_name {
attribution assin_op value
.......
}
只要是这两个配置文件被修改了要生效就得重新将xinetd服务重新载入或重启
即# service xinetd reload 或 # service xinetd restart
记录日志的类型有:SYSLOG和FILE
SYSLOG是专门用于记录日志的服务,它启动后会有两个进程运行即syslogd(用于记录系统日志的)和klogd(用于记录内核日志的)
日志级别由低到高:debug info notice warning error crit alert emerg
日志的级别越低就越降低系统性能因为要进行大量的I/O操作所以不能使用过低的日志级别
SYSLOG 格式:syslog facility [syslog level]
FILE 格式:FILE file [soft limit [hard limit]]
如:logtype FILE /var/log/xinetd.log
以下以/etc/xinetd.d/telnet为例说明:
注意:文件里定义的服务名一般与/etc/xinetd.d/下的某服务的文件名一致
server telnet
{
disable =no
此值为no表示启用telnet服务,相反为yes表示关闭此服务
对于非独立守护进程chkconfig .. on |off就是修改disable为no|off的,并且要注意的是对于非独立守护进程是没有启动级别的即在用chkconfig时不能加—list选项的只有xinetd有启动级别即只要xinetd在某级别下启动了它管理的进程也就可在此级别下启动了
如:#chkconfig telnet on 实质就是将disable=no的而#chkconfig telnet off实质就是将disable=yes的
flags =REUSE
对任意服务几乎都要有的
socket_type
=stream
套接字类型(即此服务所基于的协议):tcp,udp,rpc
wait
=no
多个用户请求时是否要等待前面的用户处理完再响应用户请求,对于udp的此值一直为no即永不等待
user =root
以哪一用户的身份去运行此服务
server =/usr/sbin/in.telnetd
哪个二进制文件是启动此服务的
log_on_failture
+=USERID
log_type
=FILE /var/log/telnet.log
定义将日志记录在哪一目录下
}
配置文件中实现访问控制:
基于主机的:
only_from=
表示仅允许访问的
no_access=
表示不允许访问的
可为它赋予指定IP;某网段;主机名;某个域的域名
如:在/etc/xinetd.d/telnet中写入:
only_from
=172.16.0.0/16表示仅允许此网段访问
表示仅允许172.16.0.0/16除
no_access
=172.16.100.200表示拒绝此IP访问
172.16.100.200的
基于时间的:
access_times=hh:mm-hh:mm
hh:0-23
mm:0-59
如:在/etc/xinetd.d/telnet中写入:
access_times
=10:00-14:00表示允许在10:00-14:00访问
监听的地址(提供服务的地址):当某主机有多个地址时限制本机的某个地址可以提供服务
bind = ip
或
inter>
如:在/etc/xinetd.d/telnet中写入:
bind =172.16.10.4 表示只有本机的172.16.10.4提供telnet服务
服务所能接入的连接数,最多允许多少用户连入,超出了指定用户的处理办法
cps(connection per second) = 可防dos攻击,控制每秒入站连接的个数
两个参数:第一个为每秒入站连接数的最大值
第二个为临时禁用时长,单位:秒
per_source= 表示某一特定IP最多允许多少请求的
如:在/etc/xinetd.d/telnet中写入:
per_source=1
cps
=25 30
表示每个主机只可连入一次,但在一秒内可以同时连进25个若超出25个telnet服务就暂停30s
instances = 用于定义某服务最多允许多少用户同时连进来
向启动的server(某服务的二进制文件)传递参数:
server-args=
banner= file
定义的是当用户进入时显示的欢迎标语
如:banner=/etc/telnet.banner
#echo “welcome to linux .....” > /etc/telnet.banner
大多远程连接都会显示如下两文件中的内容
#cat /etc/issuse 通过本地访问显示的banner信息
#cat /etc/issuse.net 通过网络访问显示的banner信息
port = 定义端口的
所以若要对服务如telnet进行访问控制可以采用iptables, tcp wrapper, xinetd
Example:
设定本机的rsync服务(非独立守护进程)仅监听在本地的172.16.10.1的地址上;仅允许172.16.0.0/16网络内的主机访问,但不允许172.16.10.1访问;仅允许同时运行最多3个实例,而且每个IP最多只允许发送两个连接请求
#vim /etc/xinetd.d/rsync
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
bind
=172.16.10.1
only_from
=172.16.0.0/16
no_access
=172.16.10.1
instrances
=3
per_source
=2
}