目录
简介
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
。
特性
- 工作在第四层(传输层)的
TCP
协议 - 对有状态连接的特定服务进行安全检测并实现访问控制
- 以库文件形式实现
- 某进程是否接受
libwrap
的控制取决于发起此进程的程序在编译时是否针对libwrap
进行编译的 - 判断
sshd
服务是否支持tcp_wrapper
:
方法1:
[root@centos6 ~]# ldd `which sshd` | grep libwrap.so # sshd服务支持tcp_wrapper
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f01bb457000)
方法2:
[root@centos6 ~]# strings `which sshd` | grep libwrap.so # 通过strings命令也可以查看,sshd服务程序是否调用libwrap.so库。strings命令列出sshd程序中所有的ASCII文本。
libwrap.so.0
Tcp_Wrapper的实现
如果要使用Tcp_Wrapper的功能,只需两个配置文件:/etc/hosts.allow
和/etc/hosts.deny
。检查顺序为: /etc/hosts.allow
–>/etc/hosts.deny
(默认允许)。注:一旦前面规则匹配,直接生效 ,将不再继续检查。下图为/etc/hosts.allow
和/etc/hosts.deny
工作示意图:
基本语法
daemon_list@host: [except client_list1]client_list2 [ :options :option… ]
daemon_list@host
格式
- 单个应用程序的二进制文件名,而非服务名, 例如
vsftpd
- 以逗号或空格分隔的应用程序文件名列表,如
:sshd,vsftpd
ALL
表示所有接受tcp_wrapper
控制的服务程序
@host
格式
- 主机有多个
IP
,可用@hostIP
来实现控制,如:in.telnetd@192.168.0.254
client_list
格式
- 以逗号或空格分隔的客户端列表
- 基于IP地址: 192.168.10.1 192.168.1.
- 基于主机名:
www.magedu.com
.magedu.com
较少用 - 基于网络/掩码: 192.168.0.0/255.255.255.0
- 基于
net
/prefixlen
: 192.168.1.0/24(CentOS7
支持) - 基于网络组(
NIS
域):@mynetwork
- 内置
ACL
:ALL
(所有来源主机),LOCAL
(主机名中不带.的),KNOWN
(所有能解析到的主机),UNKNOWN
(所有未能解析到的主机),PARANOID
(正反解析不匹配的地址)
[:options]
选项:
deny
主要用在/etc/hosts.allow
定义“拒绝”规则,如:vsftpd: 172.16. :deny
allow
主要用在/etc/hosts.deny
定义“允许” 规则,如:vsftpd:172.16. :allow
spawn
启动一个外部程序完成执行的操作twist
实际动作是拒绝访问,使用指定的操作替换当前服务,标准I/O
和ERROR
发送到客户端,默认至/dev/null
EXCEPT
: 排除某个主机或某个网络
except client_list1
:代表除了client_list1
剩余的都匹配
范例:
范例1
拒绝192.168.8.129访问192.168.8.128的sshd服务
[root@centos6 ~]# vim /etc/hosts.deny #编辑/etc/hosts.deny文件,拒绝192.168.8.129访问sshd
sshd@192.168.8.128: 192.168.8.129
[root@centos7 ~]# ssh 192.168.8.128 #在192.168.8.129访问192.168.8.128已经被拒绝,注此文家修改完,立刻生效
ssh_exchange_identification: read: Connection reset by peer
[root@centos6 ~]# tail -2 /var/log/secure #在192.168.8.128上查看日志,已经把192.168.8.129拒绝
Sep 15 09:39:37 centos6 sshd[3197]: pam_unix(sshd:session): session closed for user root
Sep 15 09:40:51 centos6 sshd[3222]: refused connect from 192.168.8.129 (192.168.8.129)
范例2
拒绝192.168.8.0/24网段访问192.168.8.128的ftp服务,但允许192.168.8.129访问
[root@A ~]# vi /etc/hosts.deny #编辑/etc/hosts.deny文件,拒绝192.168.8.0/24网段访问192.168.8.128的ftp服务