<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:黑体; panose-1:2 1 6 9 6 1 1 1 1 1; mso-font-alt:SimHei; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-2147482945 953122042 22 0 262145 0;} @font-face {font-family:"/@黑体"; panose-1:2 1 6 9 6 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-2147482945 953122042 22 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->
xinetd 和tcpd的服务控制规则
这里首先说点介绍点新知识:
我们系统中的进程分为超级守护进程和依赖以超级守护进程的进程,我们分别又可以称之为独立进程和非独立进程
独立进程是一些系统必须的或者是我们平时要经常要用到的进程,他们监听一个端口,但是一直在监听,而xinetd 是非独立守护进程的管理者,Xinetd 代为管理一些我们平时我们不经常用的进程,监听所有自己监控的端口,只有当client 请求时,xinetd 才唤醒对应的服务,这样可以大量较少对系统资源的消耗。
tcpd 是代为检查服务的规则。系统中凡是连接到libwarp.so 库的超级守护进程,都受tcpd 规则的限制,在这其中包含了xinetd ,所以,由xinetd 管理的的非独立进程也间接的受到tcpd 的管理 。
查看服务依赖的库文件:#ldd /usr/Kerberos/bin/telnet
注意这里不是服务的文件的名字,而是服务对应的demon process
默认情况下系统在接受到client 请求时先查看tcpd 规则中是否允许
这些规则定义在/etc/hosts.allow /etc/hosts.deny ,默认情况下按allow deny 的顺序来读,当两个都不填是默认是允许
其中文件的demon process 可以用which 名令来查找文件的全路径,以上命令可以用#ldd `which telnet` 替换
设置服务可以在在哪些启动级别下启动,使用chkconfig 命令
--add 增加所指 定的系统服务,让chkconfig 指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
--del 删除所 指定的系统服务,不再由chkconfig 指令管理,并同时在系统叙述文件内删除相关数据。
--level< 等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕
--list 列出系统服务的级别
以前经典小知识回顾
1 当我们想要开机运行或者禁用掉哪些进程是我们可以在/etc/rc.d/rc[0-9].d 中编辑以k 或者s 开头的文件即可,需要注意的是,这里的文件全部都是连接文件,而且全部都是以K 或者S 开头的,而真实文件在/etc/rc.d/init.d 中。这也是我们可以在/etc/rc.d/rc[0-9].d 中添加以K 或者S 文件来实现我们开机运行的目的
2 当我们要在用户登录的同时显示东西或者运行脚本是,我们可以在~/bash_profile 文件中添加我们要运行的命令
Xinetd 配置文件中的的参数含义
#Vim /etc/xinetd.conf
Log_on_failure log_on_success =HOST|USERID|ATTEMPT 当登录失败/ 成功是记录client 的HOST|USERID|ATTEMPT
Only_from IP 只允许$IP 登录
No_access IP 黑名单,不允许$IP 登录
Only_fonm 和no_access 两者均为空时,只鱼讯anyone 访问,这里需要注意下,好好理解下这里的匹配原则就很好理解了
Bind 当自己服务器有多块网卡时,指定从那块网卡进出数据
Cps N N 指定单位时间内最大的链接数,第一个N 指最大的链接数,第二个N 指当超过最大限制时,服务暂时停顿N 秒
Per_source 定义一个ip 的最大并发链接数
Instaces 定义某个服务最大的链接数
Wait yes |no 为yes 时这里意思是当xinetd 唤醒A 服务后,一直等到服务停止,这期间一直由xinetd 来负责,否则,即为no 时,则xinetd 只负责唤醒,其他是事情转交给service 自己来负责。
access —times 格式为hours :min-hour:min 这里需要注意的是,不能隔着子夜来定义时间段,可以定义为两段。
在/etc/hosts.allow 和/etc/hosts.deny 文件中有这样几个参数可以用
DENY
ALLOW 可以在hosts.allow 和hosts.deny 同时运用
EXCEPT 顾名思义 ,除了....
spawn 定义指定的命令
banners 输出
twist
ALL
KNOWN 能解析出主机名的
UNKNOWN 不能解析出主机名的
PERANOID 正向反向解析主机名不一致的
不同个服务进程之间用“ ,” 分割,同一条规则不同段之间用“ :” 分割
下面我们一telnet 为例来深入理解
首先我们要确保系统已经安装好了xinetd 和telnet 的包
#Yum list all xinetd
#Yum list all telnet-server |telnet
没装的使用#yum install servername
#vim /etc/xinetd.d/telnet
# default: on
# description: The telnet server serves telnet sessions; it uses /
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
per_source =2
}
~
~ 在重启 xinetd 服务后 , 我们在用客户端去 telnet 是 , 同一个 ip 最多只能链接两次 , 这里 per_source 受到 instances 的限制
~
~
"/etc/xinetd.d/telnet" 14L, 317C
这里我们需要注意的是,我们在/etc/xinetc.conf 中定义的对所有xinetd 控制的服务均生效,相当于“umask” 的效果,这里大家好好理解下。当我们再在xinetd 管理的服务配置文件中来配置设置时,有这样的几个选项需要注意下,= += = 这里都是相当于在xinetd 配置文件中的设置来说的,就好比说telnet log_on_failure += USERID 是在/etc/xinetd.conf log_on_failure =HOST 来说的 telnet log_on_faliure 实际=USERID HOST, 这里需要注意,同时这个文件下的服务规则编辑后无需重启立即生效。
下面我们以telnet 为例来看看tcpd 的具体规是怎样实现的是怎样实现的
如图所示:
in.telnetd : 192.168.0. :spawn /bin/echo "your log is " %c %d |mail -s "loghin in " root
in.tftpd : 192.168.0. :spawn /bin/echo "your log is " %c %d |mail -s "loghin in " root
in.tftpd : 192.168.0. :spawn /bin/echo "your log is " %c %d |mail -s "loghin in " root
in.tftpd : 192.168.0. :twist /bin/echo "you log is " %c %d
in.tftpd : 192.168.0. :banners /var/log/mylog.txt
格式为
Service demon name :IP: commend
第一行命令当client 登录时,系统会会一封邮件给root用户
第二行命令式client 登录时,系统会给其发一条信息,并阻止其登录
第三行命令当client 登录时,系统会同时给他发一条信息,但不阻止他登录
第四行和第五行是一条规则,这里原来的本意是想定义192.168.1.0 网段中除了192.168.1.10 可以访问,其他的都不能访问,但是这里要注意的是,192.168.1.10 也是不能访问的 ,记着我们前面说的,tcpd读取规则是,是逐条读取的,当匹配到192.168.1.0 网段时,192.168.1.10 已经匹配,他就不会继续往下读的。当然了,我们也可以在hosts.deny 中定义,这里我们只是想说ALLOW ,DENY 可以在同一个文件里出现
这里我只写了四条记录但希望可以把这几个容易混淆的知识点说清楚
这里需要补充的是c% d%的含义
%s the server information
%d 服务进程名
%c the daemon process name
H% 反向解析主机名
%% 转义%
%p daemon process id
%a all the available information