tcp_wrappers是一个应用层访问控制程序,在服务器向外提供的tcp服务包装一层安全检测机制。客户端连接请求首先通过这个安全检测,获得认证后才可被接受。

    tcp_wrappers使用ACL(访问控制列表)来进行安全检测。即/etc/hosts.allow和/etc/hosts.deny两个文件。这两个语法格式如何定义呢。

daemon_list:    client_list   [:optinos]

进程列表        客户端列表   选项

daemon_list:

1、被xinetd管理的瞬时守护进程
            xinetd based services:
            chargen-dgram: off
            chargen-stream:off
            daytime-dgram: off
            daytime-stream:off
            discard-dgram: off
            discard-stream:off
            echo-dgram:    off
            echo-stream:   off
            rsync:         off
            tcpmux-server: off
            telnet:        on
            time-dgram:    off
            time-stream:   off
    2、一些独立的守护进程
            sendmail
            sshd
            vsftpd


client_list

1、IP
    2、network address  如:
        192.168.1.0/255.255.255.0
         192.168.1.
    3、hostname:
        FQDN(Full QuaLIFIED Domain Name,完全限定域名)
        .mingxiao.info   本域的所有主机
    4、MACRO
        ALL             所有客户端
        LOCAL        和本地网卡同一网段
        KNOWN      FQDN可被正常解析的
        UNKNOWN   无法解析
        PARANOID   主机名正反解不匹配
        EXCEPT        除了



    如何检测一个服务是否接收tcp_wrappers控制呢?简单介绍一下动态连接库与静态库。

    对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file),直接编译进应用程序中,函数库成为了应用程序的组成部分。这些函数库被称为静态库(static libaray),通常文件名为"libxxx.a"的形式.
   把对一些库函数的链接载入推迟到程序运行的时期(runtime),应用程序需要时动态加载的,叫做动态链接库(dynamic link library),通常以libxxx.so形式呈现。

    静态编译可能使应用程序体积变大,通常都是使用动态连接库。


查看sshd是否接受tcp_wrappers的控制,如果能找到libwrap.so则接受。

# ldd `which sshd` | grep libwrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f534f551000)
# ldd `which xinetd` | grep wrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f12fc592000)


telnet服务不允许192.168.1.0/访问 ,但允许192.168.1.105访问

/etc/hosts.allow
    in.telnetd: 192.168.1.105
/etc/hosts.deny
    in.telnetd: 192.168.1.
或者:
/etc/hosts.deny
intelnetd: 192.168.1. EXCEPT 192.168.1.105


如何记录日志呢:

%c:客户端信息

%s:服务端信息

%h:客户端主机名

%p: server pid

man 5 hosts_access 查看更多

/etc/hosts.deny配置
in.telnetd: 192.168.1. :spawn echo "`date`,%c %s %h" >> /var/log/tcp_wrapper.log

# tail /var/log/tcp_wrapper.log 
Thu Apr 16 08:13:10 CST 2015,192.168.1.105 in.telnetd@192.168.1.123 192.168.1.105