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
- which vsftpd # 确定文件路径
- 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去掉就可以恢复登陆