1、简介
Linux系统中其实有两个层面的防火墙,一种是firewalld、iptables等基于TCP/IP协议的流量过滤防护工具,而Tcp_wrappers服务则是能够对系统服务进行允许和禁止的防火墙,从而在更高层面保护了Linux系统的安全运行。
Tcp_Wrappers是一个工作在传输层的安全工具,对tcp(有状态连接)的某些特定服务进行安全监测且实现访问控制,特定服务是指调用libwrap.so库文件的程序。TCP_Wrappers的主要功能就是用来控制谁可以进行访问,常见的程序有rpcbind、vsftpd、sshd、telnet等tcp_wrappers主要依靠/etc/hosts.allow和/etc/hosts.deny两个文件来实现防火墙功能
那如何判断应用程序是否支持Tcp_Wrappers呢?
① which查看对应服务的命令所在的位置
# which sshd
② ldd 命令检测其是否链接至libwrap库上
# ldd …… | grep libwrap.so
如果上述命令有输出,则证明该程序调用了libwrap.so库,所以也就受Tcp_Wrappers的控制
② 或者使用strings命令查看是否含有“host_access”,有则支持,无则不支持
2、原理
当某服务的客户端请求到达服务器之后,首先读取系统管理员所设置的访问控制文件/etc/hosts.allow文件,如果请求的IP被写入了/etc/hosts.allow文件,请求会被立刻发送给该应用程序的服务器进程,允许这次连接;如果没有写入/etc/hosts.allow文件,则去访问/etc/hosts.deny文件,如果该请求连接的IP被写入了/etc/hosts.deny文件,就拒绝该连接请求,如果/etc/hosts.deny文件中也没有写入该IP地址,那么也会允许这次连接。
原理如图所示:
/etc/hosts.allow文件优先级高于/etc/hosts.deny文件
3、配置文件语法格式
server_list@host : client_list : options
server_list 格式 :选择执行tcp_wrappers的程序(服务)列表,可以是多个,使用逗号“,”隔开
@host 格式 :设置允许或禁止用户从自身的哪个网卡接口进入。这一项可以不写(代表全部接口)
client_list 格式 : 需要禁止或允许的访问者地址,可以是IP地址、主机名(不常用)、 网段( centos6只能是192.168.52.0.0/255.255.255.0格式的,而centos7之后可以是cidr类型的!),访问者地址较多时,使用 逗号“,”隔开
option :
可带可不带
① 内置ACL : ALL(所有主机)、LOCAL(本地主机)、KNOWN (能够解析的)、UNKNOWN (不能解析的)、PARANOID(正向解析与反向解析不对应的主机)
② 扩展选项 :
spawn : 执行某个命令(就像expect的内部命令spawn)
%c 含义 : user@host
%s 含义 : service@host
%h 含义 : 客户端主机名
%p 含义 : 服务器上的进程的PID
例:
twist : 中断命令的执行
例:
4、参考的高级用法
下例用到了EXCEPT的嵌套,其意思是:
# cat /etc/hosts.allow sshd:ALL EXCEPT .ishells.cn EXCEPT blog.ishells.cn
允许所有访问sshd服务,在域.ishells.cn的不允许访问,但是blog.ishells.cn除外
# cat /etc/hosts.deny sshd:ALL
sshd:ALL 就是拒绝.ishells.cn的访问,因为默认是允许,所以在hosts.deny中必须明确定义。
参考内容:
1、尚硅谷Linux视频
2、博客:
https://www.cnblogs.com/wspblog/p/4297151.html
http://www.mamicode.com/info-detail-1297000.html