Tcpwrapper只能为tcp的连接进行验证,通过使用进程/usr/sbin/tcpd来代为监听任何一个使用了Tcpwrapper所发起连接的tcp请求。
并不是所有的tcp连接都接收Tcpwrapper的控制,实际应用中Tcpwrapper是通过库文件libwrap.so来实现控制的,查看方法:ldd `which COMMAND` | grep libwrap.so
ex:
[root@localhost ~]# ldd `which xinetd` | grep libwrap.so
libwrap.so.0 => /lib/libwrap.so.0 (0x005f4000)
Tcpwrapper工作在传输层,配置文件为/etc/hosts.allow和/etc/hosts.deny(以下省略绝对路径)
当服务发起时,首先查看hosts.allow,若其中有相应设置则允许,不再查看hosts.deny,然后查看hosts.deny,若其中有相应设置则拒绝,没有则允许(即默认是allow)
配置文件的语法格式 deamon:clients[:options]
ex:
sshd:192.168.1.1
sshd:ALL
sshd:ALL EXCEPT 192.168.1.1
[options] 可选,附件操作,帮助文档:man 5 hosts_options
ex:
sshd:192.168.1.0:spawn /bin/echo `date` %c to %s >> /var/log/sshd_tcpwrapper.log
%c Client information
%s Server information
说明:1.0网段对主机进行ssh操作时,记录日志到文件/var/log/sshd_tcpwrapper.log中(时间 客户端信息 to 服务端信息)
实验一:要求,只接受192.168.1.1的ssh访问,其他主机的ssh访问要求都拒绝
#vim /etc/hosts.deny
sshd:ALL
#vim /etc/hosts.allow
sshd:192.168.1.1
实验二:情景描述,在hosts.allow文件中排除的请求,是否起到实际作用
#cat /etc/hosts.allow
sshd:ALL EXCEPT 192.168.1.1
#cat /etc/hosts.deny
分析说明:根据Tcpwrapper的规则,当192.168.1.1向被控主机发起ssh访问请求时,首先经过hosts.allow比对,其中没有允许策略支持该请求(sshd:ALL EXCEPT 192.168.1.1策略表示除192.168.1.1以外,任何主机的ssh请求都允许),所以请求转入hosts.deny文件中比对,因为hosts.deny中没有与该请求符合的策略,不阻止,放行,该ssh请求成功,策略失败
解决方案:echo sshd:ALL >> /etc/hosts.deny
特别说明:Tcpwrapper默认是allow,所有拒绝请求都是写在hosts.deny中的,实际中应用时,一般的做法为在hosts.deny文件中写入ALL:ALL,阻止所以可以控制的应用请求,在hosts.allow文件中写入允许的请求,实验二hosts.allow文件中的策略sshd:ALL EXCEPT 192.168.1.1只表示了允许非192.168.1.1主机的ssh申请,至于192.168.1.1主机的ssh请求是否能被阻止,还要看hosts.deny文件中的策略是否阻止了该请求