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文件中的策略是否阻止了该请求