0x01 TCP Wrappers简介
tcp wrapper是Wietse Venema开发的一个开源软件。它是一个用来分析TCP/IP封包的软件,类似的IP封包软件还有iptables。Linux默认安装了tcp_wrapper。作为一个安全的系统,Linux本身有两层安全防火墙,通过IP过滤机制的iptables实现第一层防护。iptables防火墙通过直观的监视系统的运行状况,阻挡网络中的一些恶意攻击,保护整个系统正常运行免遭攻击和破坏。如果通过了第一层防护,那么下一层防护就是tcp_wrapper了。通过tcp_wrapper可以实现对系统中提供的某些服务的开放和关闭、允许及禁止,从而更有效的保证系统安全运行。使用tcp_wrapper的功能仅需要两个配置文件:/etc/hosts.allow 和/etc/hosts.deny。
如何界定特殊服务: 凡是调用了libwrap.so库的文件都受TCP Wrapper控制
判断方式:
查看服务命令所在位置
拿ssh举例
[root@centos7 ~]#which sshd
查看指定命令时是否调用libwrap.so文件
[root@centos7 ~]#ldd /usr/sbin/sshd | grep libwrap.so libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fbfcf5c0000)
ldd是用来静态查看服务启动时所调用的库
常见的有: rpcbind,vsftpd,sshd,telnet
特性
- 工作在第四层(传输层)的TCP协议
- 对有状态连接的特定服务进行安全检测并实现访问控制
- 以库文件形式实现
- 某进程是否接受libwrap的控制取决于发起此进程的程序在编译时是否针对libwrap进行编译的
- 判断sshd服务是否支持tcp_wrapper:
0x02 TCP Wrapper原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,
每当有ssh的连接请求时,
tcpd即会截获请求
先读取系统管理员所设置的访问控制文件
符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;
如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
- 优先查看hosts.allow,匹配即停止
- 允许个别,拒绝所有: hosts.allow文件添加允许的策略,hosts.deny文件添加all
- 拒绝个别,允许所有: allow为空,deny里写个别
0x03 TCP Wrapper的使用
TCP_Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow
, /etc/hosts.deny
,用于拒绝和接受具有TCP_Wrappers控制全的程序,详细信息具体可以查看man帮助,这里我们就做简单的演示和使用(man 5 hosts_access, man 5 hosts_options)
要说明的是当我们启动一个受控制的软件的时候,比如ssh,
不过在刚开始的时候,/etc/hosts.allow
,/etc/hosts.deny
什么都没有添加,此时没有限制,是都可以连接的,现在我们来说如何设置,禁止和允许连接,配置文件格式遵循如下规则:
daemon_list@host: client_list [:options :option…]
daemon_list: 是程序的列表,可以是多个,是多个时,使用,
隔开
@host:可以没有,是我们的限制的网卡访问接口(自己的),设置允许或禁止他人从自己的那个网口进入。这一项不写,就代表全部。
client_list:是访问者的地址,如果需要控制的用户较多,可以使用空格或,隔开,格式如下:
- 基于IP地址: 192.168.10.1 192.168.1.
- 基于主机名: www.baozouzhugan.com .baozouzhugan.com 较少用
- 基于网络/掩码: 192.168.0.0/255.255.255.0(Centos6及以下的版本只能使用这个)
- 基于net/prefixlen: 192.168.1.0/24(CentOS7及以上的版本)
- 基于网络组(NIS 域): @mynetwork
- 内置ACL: ALL, LOCAL, KNOWN, UNKNOWN,PARANOID
ALL:所有主机
LOCAL:本地主机
KNOWN:主机名可解析成ip的
UNKNOWN:主机名无法解析成IP的
PARANOID:正向解析与反向解析不对应的主机
例如
#vi /etc/hosts.deny
sshd:192.166.205.33
sshd:192.166.205.
sshd:192.168.205.1/24
#以上都能正常运行