一、tcp_wrapper简介

1、什么是tcp_wrapper

        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 。

2、tcp_wrapper系统工作概述

tcp_wrapper应用简介_第1张图片

注意 : Netfilter(iptable) 是工作在网络层的 而 tcp wrapper 是工作在应用层


3、/etc/hosts.allow 和/etc/hosts.deny工作示意图

tcp_wrapper应用简介_第2张图片

二、tcp_wrapper规则使用

1、规则语法说明

hosts.allow 和 hosts.deny 文件中语法格式如下:

daemon : client [:option1:option2:...]

daemon 可以是各种服务程序,比如 sshd,服务程序在编译的时候将libwrap.so.0动态库进来就可以使用tcp_wrapper

client 是来源用户列表以逗号分隔,可以是主机名,或者ip地址等。

options 附加选项是在规则匹配后,可以选择发邮件给管理员或者记录日志等,每个动作之间使用冒号分隔。



可以使用ldd命令查看程序是否支持libwrap,例如:

[root@hpf-linux ~]# ldd `which sshd` |grep wrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f1dab1bf000)

2、语法格式举例

daemon_list有以下几种格式:

          vsftpd:192.168.0.
          vsftpd,sshd,telnetd: 192.168.0.
          All: 192.168.0.
          daemon@host           #只在某个特定的地址上进行控制比如:[email protected],在有多块网卡的情况下使用

client_list有以下几种格式:

         IP
         network address/mask         #网络地址(只能使用类似1.0.0.0/255.0.0.0完全ip地址格式,不能使用位长度表示)
         hostname                     #主机名称
         .abc.org                     #表示.abc.org域内的所有主机

常用的宏定义:

ALL #代表所有主机,或者所有服务

LOCAL #表示本地主机,非FQDN主机

KNOWN #主机名能正常解析的

UNKNOWN #主机名不能正常解析

PARANOID #主机名正反项解析不匹配的

EXCEPT #排除某个主机或某个网络

使用举例:

echo “sshd :ALL EXCEPT 192.168.1.2”>>  /etc/hosts.allow

表示除去192.168.1.2 这台机器,任何机器执行sshd服务到这台机器均能正常连接。

注意:在使用/etc/hosts.allow 和/etc/hosts.deny两个文件配合使用时,为安全起见一般会把/etc/hosts.deny定义为所有机器及服务。

3、定义所有的拒绝访问均写入日志中

使用前提前讲下在配置该服务时需要的命令spawn:

              %c:user@host

              %s:server@host

              %h:客户端主机名

              %p:服务器上的进程PID

[root@hpf-linux ~]# vim /etc/hosts.allow 
sshd :  192.168.1.0/8  EXPECT 192.168.1.20
[root@hpf-linux ~]# vim /etc/hosts.deny
sshd : ALL: spawn echo `date` form %c to %s >> /var/log/tcp_wrapper.log
[root@webserver ~]# ssh 192.168.1.8   //192.168.1.20这台机器无法通过ssh登录192.168.1.8
ssh_exchange_identification: Connection closed by remote host
[root@hpf-linux ~]# cat /var/log/tcp_wrapper.log 
Fri Aug 7 23:01:41 CST 2015 form 192.168.1.20 to [email protected]
Fri Aug 7 23:01:54 CST 2015 form 192.168.1.20 to [email protected]