记录学习成长的历程......

xinetd超级守护进程
关于超级守护进程的介绍已经在进程那一章最后的补充中讲解过了,这里就不在赘述了。
守护进程有两种启动方式,一种是sysv方式启动,一种是xinetd方式启动。

1、      sys v:独立启动,一开机运行就会进入内存,一直处于listen状态,即使该守护进程不运行也会一直占用系统资源,但是其最大的优点就是,它一直启动,当有请求时会立即响应,响应速度快,比如http服务。

2、      xinetd(super daemon):超级守护进程,管理众多的进程,比如telnet服务。xinetd自己是一个sys v,它就像老板一样,自己常驻于内存,管理其它的进程,其它进程就相当于它的员工,在其它进程没有用时会睡眠,并不占用系统资源,当有工作时候老板xinetd会通知它的员工,唤醒某个进程来执行作业。这种方式适合于那些不是经常被人使用,不需要常驻内存的程序,但是此方式响应时间长,但是节省系统资源,方便管理。

这里以telnet服务为例讲解一下xinetd超级守护进程。
/etc/xinetd.conf:超级进程全局配置文件,如图:

RHCE笔记—xinetd超级守护进程与TCP Wrappers_TCP Wrappers

 
系统默认是没有安装telnet服务器端的,需要手动安装telnet服务:
#yum –y install telnet-server
#vim /etc/xinetd.d/telnet            //修改配置文件,如图:
 

RHCE笔记—xinetd超级守护进程与TCP Wrappers_RHCE_02

说明:

socket_type = stream                   //使用tcp包常用联机类型

              wait = no                                   //可以允许多台计算机同时连接而不需要等待,但是在输入完用户名和密码后会有个连接等待的过程,反之亦然

              user = root                                  //启动该程序的用户身份

              server = /usr/sbin/in.telnetd          //服务启动的程序

              log_on_failure += USERID              //登录失败后记录主机名并且加一个ID

              access_times = 9:00—18:00          //只有9点到18点能访问

              当flags = SENSOR deny_time = 2/NEVER no_access = 192.168.0.1时,表示,当192.168.0.1硬要强行访问时,所有由xinetd管理的服务在2分钟内或永远不能访问,知道重启xinetd服务

              only_from = 192.168.0.0/24         //只允许192.168.0.0/24网段的主机使用telnet服务访问我

注:当/etc/xinetd.conf全局配置文件和/etc//xinetd.d/telnet子配置文件发生冲突时以子配置文件为准,当子配置文件没有配置时会继承主配置文件,以主配置文件为主。
#netstat –tulnp |grep --color=auto 23               //查看监听端口,发现并没有telnet,如图:

RHCE笔记—xinetd超级守护进程与TCP Wrappers_xinetd超级守护进程_03

#service xinetd restart  
当启动超级守护进程并且有人通过telnet访问时,telnet服务就会被唤醒,并且监听在23号端口,如图:

RHCE笔记—xinetd超级守护进程与TCP Wrappers_TCP Wrappers_04

这就说明了telnet服务是由超级守护进程xinetd管理的,修改配置文件后启动xinetd进程就可以了。
如果想直接启动telnet服务可使用chkconfig命令来启动,这里的chkcnfig命令颠覆了传统,用来启动telnet服务。
注:所有由xinetd管理的进程都没有运行级别。
# chkconfig telnet off                  //关闭telnet服务
#chkconfig telnet on                      //打开telnet服务
这两个命令直接修改文件的同时也改变了当前状态,不用重启xinetd服务了,xinetd可以基于主机和时间控制访问。
TCP  Wrappers
系统中有的服务端口是随机的,这样的话你该怎么封住它呢?iptables只能针对端口,这个时候就要用到TCP Wrappers了,它可以基于服务来控制访问,linux系统的过滤顺序是这样的:iptables———>TCP Wrappers———>服务本身。
libwrap.so是一个动态链接库文件,也称为tcp_wrappers,它为各种网络服务提供了基于主机的访问控制列表,库,可执行文件以及文档在tcp_wrappers-version.rpm中分发,只要支持这个模块的服务都被TCP Wrapper支持,所有受xinetd控制的进程都将自动使用libwrap.so,保护这些服务不在需要tcpd封装器,怎么看支不支持我们将在后面为大家讲解!
TCP Wrappers配置文件:
#/etc/hosts.allow
#/etc/hosts.deny
如果允许中有则允许,没有则看拒绝,拒绝有的话则拒绝,当允许和拒绝里都没有的话则允许。当允许后则不再查找拒绝文件!
默认里面是没有规则的,这里举例比如sshd服务只允许192.168.0.1访问则编辑hosts.allow文件,添加规则,格式为,服务: 允许或拒绝访问的IP、域、主机名,如图:

RHCE笔记—xinetd超级守护进程与TCP Wrappers_RHCE_05

 
举 例:
如果是多个服务,拒绝不同网段的计算机该怎么写呢?如图:

RHCE笔记—xinetd超级守护进程与TCP Wrappers_休闲_06

 
 
# vim /etc/hoots.deny
ALL:ALL                                               //拒绝所有
sshd:example    .example.com               //拒绝example这台主机和example.com域中的所有主机
sshd:192.168.1.                                    //表示C类网络192.168.1.0网段中多有的主机
sshd:@mynetwork             // /etc/netgroup或NIS中的网络组名称,不与用户名一起工作
注:如果是拒绝一个网段的话,一定要写子网掩码,不可以写成这种格式192.168.0.0/24,这里不同于iptables防火墙!
 
宏  义
宏定义:具有某一特定特性的计算机
LOCAL:所有主机的名称中不包含“.”的主机,比如,localhost,就是指本机;
ALL:始终与所有主机所有服务匹配;
KNOWN:所有主机名都可在DNS中解析到的主机;
UNKNOWN:所有在DNS中都无法解析的主机;
PARANOID:所有在DNS中正向与反向解析都不匹配的主机(可防止垃圾邮件用);
EXCEPT:操作符可用于后台程序和客户端列表,以便从您的匹配中排除某个主机或IP地址,也就是方向排除选择,可将其嵌套,例如在hosts.deny中写:
sshd:ALL EXCEPT server1.example.com     //拒绝所有,但是除了server1.example.com
sshd:UNKNOWN              //拒绝所有在DNS中无法解析到的主机
sshd:PARANOID               //拒绝所有在DNS中正向与反向解析不匹配的主机
注:ALL可用在服务中也可用在宏里面,EXCEPT嵌套时,前一个要大于后一个的范围,也就是前一个包含后一个。
Option扩展选项
spawn可用于启动其它shell命令,可用于特殊扩展(如%c、%s等)
spawn选项是当规则匹配时,该选项将在子进程中执行命令(执行%扩展之后)
常用的替换包括:
%c:客户端信息(user@host)
%s:服务器信息(server@host)
%h:客户端的主机名(如果名称不可用则为IP地址)
%p:服务器PID

例:hosts.deny中sshd:192.168.0.254:spawn echo “login attempt” from %c to %s >>/var/log/sshd.log //192.168.0.254用ssh连接我时,匹配该规则后,把echo后面的信息以及来源主机和登录服务器记录下来追加到/etc/log/sshd.log中。

hosts.deny中:vsftpd:192.168.0.254:twist echo “”550 connection error

当192.168.0.254访问我时回复它一条消息,这条消息会显示在客户端的屏幕上。
注:发消息只能在拒绝的时候用,允许就没必要写这个了!
 
前面提到过不是所有服务都被TCP Wrapper支持,只要支持libwrap.so模块的服务都被TCP Wrapper支持,那么怎么查看一个服务支不支持这个模块呢?
ldd /usr/sbin/sshd                  //查看这个服务调用了多少动态链接库
ldd `which vsftpd` |grep libwrap.so      //查看这个服务支不支持libwrap.so模块
前面也提到过只要xinetd支持libwrap.so,那么它所管理的所有服务都支持!
strings /sbin/portmap |grep hosts
只要过滤出来的内容包含/etc/hosts.allow和/etc/hosts.deny字符串也被TCP Wrapper支持!

总结:1、服务自身支持 2、xinetd支持 3、包含hosts.allow,hosts.deny字符串等都被TCP Wrappers支持!