tcp wrapper
   被设计为一个基于TCP/IP协议之上的、运行于UNIX/Linux系统、基于访问控制技术的软件,以库文件的形式,某进程是否接受libwrap的控制取决于发起此进程的程序时是否针对libwarp进行编译的

工作过程:
 当系统接收到一个外来服务请求时候,先由TCP Wrapper处理这个请求,TCP wrapper根据这个请求所请求的服务和针对这个服务所定制的
 存取控制规则来判断对方是否有使用这个服务的权限,如果有,TCP wrapper 将该请求按照配置文件定义的规则转交个相应的守护进程去处理同时记录这个请求
 动作,然后自己就等待下一个请求的处理,如果外部还有防火墙,当然要先通过防火墙

通过/etc/hosts.allow /etc/hosts.deny两个文件来控制访问权限,一旦配置立即生效
过滤流程:
检查host.allow文件,如果有匹配的规则,允许;
如果没有匹配就检查host.deny
如果有则拒绝访问;
如果没有匹配,则使用默认法则,默认是允许

文件格式
后台进程列表:客户端列表
后台进程应该是服务的可执行工具名
客户端列表:
IP  具体某个ip地址 
network address 网络
 network/mask :不能使用可变长的掩码书写格式,只能写为形如1.0.0.0/255.0.0.0或者 1.0
 HOSTNAME
   fqdn 
   .magedu.com

sshd:192.168.0.   
如果写入hosts.allow中表示允许192.168网段访问sshd服务,
如果写入hosts.deny中表示拒绝192.168网段访问sshd服务

telnet的可执行工具是in.telnetd  所以应写为:
in.telnetd:192.168.0.0/255.255.0.0
 
vsftpd@192.16.0.186:1.
  表示1.0.0.0网络通过192.168.0.186来访问vsftpd进程是,是否接受tcp wrapper控制

in.telnetd:172.16. :DENY  
如果写入hosts.allow中表示拒绝172.16网段访问telnet
如果写入hosts.deny中表示允许172.16网段访问telnet

在/etc/hosts.allow 和/etc/hosts.deny 也可以执行命令 spawn 和 banners,比如:
in.telnetd:172.16.:spawn echo“`date`,%cLOGIN %c”>>/var/log/tcpwrapper.log
spawn 表示执行后面的命令,所以上句写在hosts.allow中表示允许172.16网段访问telnet并将访问记录定向到tcpwrapper.log中
在/etc/hosts.allow 和 /etc/hosts.deny 文件中的宏定义:
%c   client information
        %s    server information
        %h   the client’name information
        %p    server PID
        

xinetd(eXtended InterNET services daemon)

xinetd 超级守护进程  非独立进程接受它的控制
    原则上任何系统服务都可以使用xinetd,然而,我认为,最适合应该是哪些常用的internet服务,同时这个服务的请求数目和频繁程度不会太高。象DNS和Apache就不适合采用这种方式,而像Ftp、telnet、SSH等就很适合使用xinetd方式

功能:
    * 支持对tcp、udp、RPC服务
    * 基于时间段的访问控制
  * 功能完备的log功能,即可以记录连接成功也可以记录连接失败的行为
  * 能有效的防止DoS***(Denial of Services)
  * 能限制同时运行的同一类型的服务器数目
  * 能限制启动的所有服务器数目
  * 能限制log文件大小
  * 将某个服务绑定在特定的系统接口上,从而能实现只允许私有网络访问某项服务
  * 能实现作为其他系统的代理。如果和ip伪装结合可以实现对内部私有网络的访问

xinetd配置文件主要有两部分:
1、全局配置
    SYSLOG 专门用于记录日志的服务 (syslog ,klog)
2、服务配置

以/etc/xinetd.d/telnet为例来说明xinetd配置文件格式及对telnet进程访问的控制机制

vim /etc/xinetd.d/telnet
service telnet
{
        disable = no   #开机是否开启服务   也可以使用chkconfig telnet on|off 来修改 
        flags           = REUSE     
        socket_type     = stream           #套接字类型   stream:基于tcp连接的  dgram:基于udp连接的
        wait            = no                
       # yes表示单线程服务,no表示多线程服务 
        user            = root              
       # 以root的身份去启动服务
        server          = /usr/sbin/in.telnetd   
      # telnet服务对应的二进制文件
        log_on_failure  += USERID           
      # 在继承默认值的基础上再多加属性 -+ 在继承默认值的基础上去掉该属性  = 精确匹配
        access_times    = 11:00-13:00       
       # 基于时间的访问控制 格式 access_time = hh:mm-hh:mm
        only_from = 172.16.0.0、16
    # 只允许哪些主机访问 格式 172.16.0.0/16 或 172.16.0.0/255.255.0.0
        bind            = 172.16.21.1       
        # 本机的ip地址绑定到特定服务端口
        per_source     
#允许每个客户端访问的最大连接数 
        banner          = /var/telnet.banner 
        # 显示在客户端的登录信息,可自定义文件,并在此指明路径
cps = 1 10
        # 每秒钟控制入站请求的个数是1 多余的则等待10秒
        server_args     = -a     
        #启动服务传递的额外选项作为启动选项
}

service xinetd restart  //重启服务