tcpwrapper的目的是对那些访问控制功能较弱的服务提供访问控制功能要想了解访问控制就必须先知道服务监听的概念: 服务监听的两种方式: listen : socket 监听在套接字上提供服务 循环 不停歇的查看某个端口来提供服务

有两种方式来判断一个服务是否支持tcp wrapper: 1.通过查找库文件看是否有libwrap ldd which command 2.查看是否连接到/etc/hosts.allow|deny strings which command # 查看静态链接库 如果有/etc/hosts.allow /etc/hosts.deny 就说明这个命令静态链接了tcpwrraper

tcpwrraper自身工作在内核,却可以通过这两个文件来提供访问控制

               请求
       ↓              
    服务   --->/etc/hosts.allow     --->     如有有就放行
                                 ↓         没有
                       /etc/hosts.deny     ---->    如果没有就放行     
                                 ↓                    
                                                    如果有明确的匹配条目拒绝

/etc/hosts.allow|deny文件格式:damon_list: client_list [:option] 匹配服务列表:damon_list vsftpd: 192.168.0.
vsftpd,sshd,in.telnetd: ALL
daemon@host vsftpd@192.168.0.186
#可以简写192.168.0 代表192.168.0.0网段 #可以一次指定多个服务 #可以使用通配符ALL来指定所有的服务 #@只对某个主机来控制

匹配客户端列表clent_list IP network address network/mask: mask不能使用长度格式 ,只能是有完全ip的格式 172.16.0.0--->172.16. 也可以简写网段 HOSTNAME fqdn .a.rog 表示a.org域内的所有主机

option 选项 spawn #可以通过spawn来实现日志定义 spawn echo ""
#下面定义一个条件,只要用户通过telnet登录就记录到一个日志 vim /etc/hosts.deny in.telnetd:ALL EXCEPT 172.16.0.1: spawnecho "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的访问 [cpp] view plain copy

  1. which vsftpd # 确定文件路径
  2. vim /etc/hosts.deny # 改文件立即生效
    vsftpd: 172.16.100.100

#假设仅允许172.16网段访问
vim /etc/hosts.allow
vsftpd: 171.16 # 只允许172.16.0.0/16网段
vim /etc/hosts.deny
ALL: ALL # 拒绝其他的用户登陆
这样就只有172.16.0.0网段可以访问了

控制SSH ,只允许192.168.0.32网段登陆,并且不允许192.168.0.32登陆 [cpp] view plain copy vim /etc/hosts.deny
ALL:ALL
vim /etc/hosts.allow
sshd: 192.168.0 EXCEPT 192.168.0.32
效果:

将/etc/hosts.deny 里面的ALL: ALL去掉就可以恢复登陆