tcp_wrapper是一个工作在传输层、对于进出本机访问某特定服务的连接基于规则进行检查的一个访问控制工具,tcp wrapper只能对基于tcp协议的服务作访问控制,但并不是所有基于tcp协议的服务都能实现用tcp wraper作访问控制
一、判断某服务是否能够由tcp_wrapper进行访问控制的方法:
1)动态编译:使用命令ldd查询某个服务是否受TCP wrapper控制
ldd $(which COMMAND) | grep libwrap
ldd `which COMMAND` | grep libwrap
例如:ldd `which sshd` | grep libwrap
2)静态编译方式可使用以下命令查询:以portmap为例
strings `which portmap` | grep hosts
包含hosts_access这类文件说明支持tcp_wrapper
二、tcp wrapper实现访问控制主要依靠两个文件,一个是/etc.hosts.allow文件,另一个是/etc/hosts.deny文件,访问控制的流程大致如下
首先检查hosts.allow文件中是否有匹配的规则。如果有匹配的规则,则允许访问,如果没有匹配的规则,则检查hosts.deny文件中是否有匹配的规则,如果有匹配的规则,则拒绝访问,如果没有匹配的规则,则视为默认规则,默认规则则为允许,所以允许访问。
三、/etc/hosts.allow,/etc/hosts.deny文件配置文件语法:
daemon_list:client_list [:options]
daemon_list:
1) 单个应用程序的文件名称,而非服务名;
2) 以逗号分隔的应用程序文件名列表;
例如:sshd,vsftpd
3) ALL:所有接受tcp_wrapper控制的程序;
Client_list:
Ip地址;
主机名;
网络地址:必须使用完成格式的掩码,不能使用前缀格式掩码;
简短格式网络地址:例如172.16. 表示172.16.0.0/255.255.0.0
ALL:所有主机;
KNOWN:能被解析的主机名
UNKNOWN:无法解析的主机名
PARANOID:主机名和ip地址的各自的正反解析结果不匹配
EXCEPT:除了
options
deny:拒绝,主要用于hosts.allow文件
allow:允许,主要用于hosts.deny文件;
spawn:启动指定的应用程序
四、下面介绍利用tcp_wrapper实现SSH登录的IP访问控制
1)一般CentOS Linux系统发行版默认已经安装了tcp_wrapper,若没有安装,可使用yum等方式进行安装
2)服务器IP为192.168.31.160,要拒绝192.168.31.51 ssh登录,其它主机全部允许,并记录日志
可以只用编辑/etc/hosts.deny文件,加入如下一行
sshd:192.168.31.51:spawn echo `date` login attempt from %c to %s ,the host is %h .PID is %p >> /var/log/tcpwrapper.log
%c: Client information: user@host, user@address, a host name, or just an address, depending on how much information is available.
%s: Server information: daemon@host, daemon@address, or just a daemon name, depending on how much information is available.
%h: client hostname
%p: server PID
3)接下来测试效果,PC 192.168.31.51 进行SSH登录时会被拒绝掉
4)查看/var/log/secure以及/var/log/tcpwrapper.log日志,拒绝192.168.31.51 SSH登录