tcp wrapper其实是一个库(libwrap.so),也叫做网络资源访问控制器,是工作在tcp层的访问控制工具,通常只对基于tcp协议的服务做控制,通过链接工作在内核和应用程序之间。所以可以把它理解为一个工作在用户请求与服务所监听的套接字之间的一种检查过滤机制,可以实现拦截对于某种特定服务的访问请求,并根据所定义的规则来绝对是否允许其访问。
#ldd `which app` | grep libwrap    #此命令可以查看是否受tcp warpper控制
    tcp wrapper可以直接编译进某个应用程序叫静态编译;也可动态链接。
静态编译的实例:portmap应用程序的rpc服务。
查看静态编译的命令如下:
#string `which portmap` | grep hosts
    tcp wrapper有两个访问控制配置文件,定义允许与拒绝,内容为某个服务允许或拒绝哪些主机访问:    /etc/hosts.allow和/erc/hosts/.deny
优先级:首先检查/etc/hosts.allow,然后检查/etc/hosts.deny,最后/etc/会执行默认允许。语法中主要包含两项,详细介绍如下:
文件语法格式:
    daemon_list: client_list [:options],如:
daemon_list表达方式并举例:          
    sshd:     #单个服务
    vsftpd,sshd,in.telnetd:   #多个服务
    ALL                      #所有服务
    daemon@host                  #某特定主机的特定服务
       
client_list表达方式并举例:
  1. IP            
  2. network address      metwork /mask:只接受类似1.0.0.0/255.0.0.0的表达方式也可简写成:172.16.
  3. HOSTNAME
         fqdn
         .lhf.com->www.lhf.com
  4. MACRO:
         ALL
         LOCAL(主机同网段),KNOWN(可解析),UNKNOWN,PARANOID(正向解析和反向解析不匹配)
         EXCETP(除了)
服务分两种:
    standalone:独立守护进程。
    transient:非独立守护进程,依赖于超级守护的管理,所以超级守护进程是按需启动的,取决于它所管理的进程。
xinetd:叫做超级守护进程,可以管理多个进程,其中就包括telnet服务,配置好本地yum源的情况下,安装telnet-server,它依赖于xinetd,所以会把xinetd一并装上:
#yum install telnet-server -y
#ldd `which xinetd`    #查看xinetd服务是否受tcp wrapper控制
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
例:sshd服务仅允许172.16.0.0/16网段访问:
#vim /etc/hosts.allow    #编辑允许列表
sshd:172.16.
#vim /etc/hosts.deny      #编辑拒绝列表
sshd:ALL
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
如果想要此服务的访问被记录在指定目录下的日志文件中,只需在编译中增加指定日志即可。
后面添加spawn,指定日志包含内容
%c :client infomation(user@host#记录客户端
%s :service info(server@host)      #记录访问的服务器
%h :client hostname               #记录客户端的主机名
%p :server PID                    #记录服务器的PID
例:telnet服务仅允许172.16.0.0、16网段访问,并以指定格式的日志文件记录下每次访问:
#service xinetd start   #开启超级守护进程xinetd,它管理telnet服务
#chkconfig telnet on    #使其开机自动启动
#vim /etc/hosts.allow
in.telnetd172.16.:spawn echo "`date`,Login attempt from %c to %s " >> /vat/log/tcpwrapper.log
#vim /etc/hosts.deny      #保存退出
in.telnetd:ALL: spawn echo "`data`,Login attempt %h " >> /vat/log/tcpwrapper.log
      #保存退出,spawn指定日志内容
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
上面已经说了,xinetd是超级守护进程,此服务的配置文件是/etc/xinetd.conf,xinetd是由n个非独立进程组成的,每个进程都在/etc/xinetd.d/目录下有以该服务名命名的配置文件。
配置文件主要有两部分组成:
1、全局配置(服务的默认配置)
2、服务配置,由三部分组成:
     属性   赋值操作符(=;+=;-=)  
    
以telnet服务为例,打开它的配置文件/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
}
 主要属性的介绍与实例:
     1.访问控制法则:
         only_from=
                    IP172.16.3.1  #只允许某主机访问
         no_access =
                                 #不允许访问
     2.时间控制;
         access_times = hh:mm-hh:mm    #定义访问时间
     3. 监听的地址:
         bind =          #绑定在某个ip上,只这个提供服务
         #netstat -tnlp | grep 23    #检测是否绑定成功
     4.资源访问控制:控制每秒钟入站连接的个数:
         cps   = 2 10       #每秒入站连接的最大数和临时禁用的时长
     5.定义一个ip同时发起几个请求:per_source = 1
                                                                6.定义最大同时连接数        instances =   
7.  向启动的server传递参数:
                      server_args =
                      banner = /etc/telnet.banner
#vim /etc/telnet.banner
      welcome to xinetd     #定义连接服务成功时的欢迎语
保存退出后,就可以重启xinetd服务进行测试了。