Tcp_Wrappers 是一个用来分析 TCP/IP 封包的软件,类似的 IP 封包软件还有 iptables。Linux 默认都安装了 Tcp_Wrappers。作为一个安全的系统,Linux 本身有两层安全防火墙,通过 IP过滤机制的iptables实现第一层防护。iptables防火墙通过直观地监视系统的运行状况,阻挡网络中的一些恶意***,保护整个系统正常运行,免遭***和破坏。如果通过了第一层防护,那么下一层防护就是 tcp_wrappers 了。通过 Tcp_Wrappers 可以实现对系统中提供的某些服务的开放与关闭、允许和禁止,从而更有效地保证系统安全运行。
Tcp_Wrappers 的使用很简单,仅仅只有两个配置文件:/etc/hosts.allow 和/etc/hosts.deny。
(1)查看系统是否安装了Tcp_Wrappers
[root@localhost ~]#rpm -q tcp_wrappers
tcp_wrappers-7.6-57.el6.x86_64
或者
[root@localhost ~]#rpm -qa | grep tcp
tcp_wrappers-7.6-57.el6.x86_64
tcp_wrappers-libs-7.6-57.el6.x86_64
tcpdump-4.0.0-3.20090921gitdf3cb4.2.el6.x86_64
如果有上面的类似输出,表示系统已经安装了tcp_wrappers 模块。如果没有显示,可能是没有安装,可以从Linux系统安装盘找到对应RPM包进行安装。
(2)tcp_wrappers防火墙的局限性
系统中的某个服务是否可以使用tcp_wrappers防火墙,取决于该服务是否应用了libwrapped 库文件, 如果应用了就可以使用tcp_wrappers防火墙。系统中默认的一些服务如:sshd、portmap、sendmail、xinetd、vsftpd、tcpd 等都可以使用tcp_wrappers 防火墙。
(3)tcp_wrappers 设定的规则
tcp_wrappers 防火墙的实现是通过/etc/hosts.allow 和/etc/hosts.deny 两个文件来完成的,
首先看一下设定的格式:
service:host(s) [:action]
service:代表服务名,例如 sshd、vsftpd、sendmail 等。
host(s):主机名或者 IP 地址,可以有多个,例如 192.168.12.0、www.zzidc.com。
action:动作,符合条件后所采取的动作。
配置文件中常用的关键字有:
ALL:所有服务或者所有 IP。
ALL EXCEPT:所有的服务或者所有 IP 除去指定的。
例如:
ALL:ALL EXCEPT 192.168.12.189
表示除了 192.168.12.189 这台机器,任何机器执行所有服务时或被允许或被拒绝。
了解了设定语法后,下面就可以对服务进行访问限定。
例如,互联网上一台Linux服务器,实现的目标是:仅仅允许 222.61.58.88、 61.186.232.58以及域名www.zzidc.com通过SSH服务远程登录到系统,下面介绍具体的设置过程。
首先设定允许登录的计算机,即配置/etc/hosts.allow 文件,设置很简单,只要修改/etc/hosts.allow(如果没有此文件,请自行建立)这个文件,即只需将下面规则加入/etc/hosts.allow 即可。
sshd: 222.61.58.88
sshd: 61.186.232.58
sshd: www.zzidc.com
接着设置不允许登录的机器,也就是配置/etc/hosts.deny 文件。
一般情况下,Linux会首先判断/etc/hosts.allow 这个文件,如果远程登录的计算机满足文件/etc/hosts.allow设定, 就不会去使用/etc/hosts.deny文件了;相反,如果不满足hosts.allow文件设定的规则,就会去使用 hosts.deny文件了,如果满足 hosts.deny的规则,此主机就被限制为不可访问Linux服务器,如果也不满足hosts.deny的设定,此主机默认是可以访问linux服务器的。 因此,当设定好/etc/hosts.allow 文件访问规则之后, 只需设置/etc/hosts.deny 为 “所有计算机都不能登录状态” :
sshd:ALL
这样,一个简单的tcp_wrappers防火墙就设置完毕了。