利用tcp_wrapper实现SSH登陆的IP访问控制

tcp_wrapper 是一个工做在传输层、对于进出本机访问某特定服务的链接基于规则进行检查的一个访问控制工具,tcp wrapper只能对基于tcp协议的服务做访问控制,但并非全部基于tcp协议的服务都能实现用tcp wraper做访问控制
1、判断某服务是否可以由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


2、tcp wrapper实现访问控制主要依靠两个文件,一个是/etc.hosts.allow文件,另外一个是/etc/hosts.deny文件,访问控制的流程大体以下
首先检查hosts.allow文件中是否有匹配的规则。若是有匹配的规则,则容许访问,若是没有匹配的规则,则检查hosts.deny文件中是否有匹配的规则,若是有匹配的规则,则拒绝访问,若是没有匹配的规则,则视为默认规则,默认规则则为容许,因此容许访问。


3、/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:启动指定的应用程序


4、下面介绍利用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登陆 


本文分享自微信公众号 - WalkingCloud(WalkingCloud2018)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。web

相关文章
相关标签/搜索