tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念:

一.服务监听的两种方式:

listen:socket 监听在套接字上提供服务,循环不停歇的查看某个端口来提供服务

有两种方式来判断一个服务是否支持tcp wrapper:

1.通过查找库文件看是否有libwrap

ldd `which command`

ldd $(which sshd) |grep libwrap

clip_image002

2.查看是否连接到/etc/hosts.allow|deny

strings `which command` # 查看静态链接库,如果有/etc/hosts.allow或者/etc/hosts.deny就说明这个命令静态链接了tcpwrraper

clip_image004

二./etc/hosts.allow|deny文件格式:damon_list: client_list [:option]

1.匹配服务列表:damon_list

vsftpd:

vsftpd,sshd,in.telnetd:

ALL

#可以一次指定多个服务

#可以使用通配符ALL来指定所有的服务

#@只对某个主机来控制

2.匹配客户端列表clent_list

IP

network address

network/mask: mask不能使用长度格式 ,只能是有完全ip的格式

172.16.0.0--->172.16. 也可以简写网段

HOSTNAME

fqdn

.a.rog 表示a.org域内的所有主机

3.option 选项

spawn #可以通过spawn来实现日志定义

spawn echo ""

#下面定义一个条件,只要用户通过telnet登录就记录到一个日志,注意需要安装telnet服务端(yum -y install telnet-server)

vim /etc/hosts.deny

in.telnetd:ALL EXCEPT 172.16.0.1: spawn echo "Login attemp(`date`) %u from %a attemp to login %A, the deamon is %d." >> /var/log/telnet.log

##注意不能在echo后面用: 分号在这里有特殊意义。

##可以通过man 5 hosts_access 来查看上述%的含义

常用的宏定义 MACRO

ALL #代表所有主机,或者所有服务

LOCAL #表示本地主机,非FQDN主机

KNOWN #表示可以被解析的主机

UNKNOWN #反向可以被解析的主机

PARANOID #正反向解析不匹配的主机

EXCEPT #排除某个主机或某个网络

案例:

怎么来控制vsftpd的访问

which vsftpd # 确定文件路径

clip_image006

vim /etc/hosts.deny # 改文件立即生效

vsftpd: 192.168.100.100

clip_image008

clip_image010

#假设仅允许172.16网段访问

vim /etc/hosts.allow

vsftpd: 171.16 # 只允许172.16.0.0/16网段

clip_image012

vim /etc/hosts.deny

ALL: ALL # 拒绝其他的用户登陆

这样就只有172.16.0.0网段可以访问了

clip_image014

clip_image016

clip_image018

控制SSH ,只允许192.168.0.32网段登陆,并且不允许192.168.0.32登陆

vim /etc/hosts.deny

ALL:ALL

clip_image020

vim /etc/hosts.allow

sshd: 192.168.0 EXCEPT 192.168.0.32

clip_image022

clip_image024

clip_image026

clip_image028