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