TCP Wrappers配置
10 年 ago jony TCP Wrappers配置已关闭评论
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://onlyzq.blog.51cto.com/1228/529662
TCP Wrappers(IP层存取控制过滤)为由inetd生成的服务提供了增强的安全性。TCP Wrappers软件扩展了inetd为受其控制的服务程序实施控制的能力。通过使用这种方法能够提供日志支持、返回消息给联入的连接、使得服务程序只接受内部连接等等。尽管防火墙也能够完成其中的某些功能,但这不仅增加了一层额外的保护,也提供了防火墙无法提供的功能。然而,由TCP Wrappers提供的一些额外的安全功能,不应被视为好的防火墙的替代品。TCP Wrappers应结合防火墙或其他安全加强设施一并使用。
TCP Wrappers配置
TCP Wrappers使用访问控制列表来防止欺骗。ACL是/etc/hosts.allow和/etc/hosts.deny文件中的系统列表。在配置为验证主机名到IP地址映射,以及阻止使用IP源路由的软件包时,TCP Wrappers提供某些防止IP欺骗的保护。
确认服务是否支持TCP Wrappers
Linux系统TCP Wrappers并不是所有的服务都支持(目前支持TCP Wrappers的服务有sendmail、pop3、imap、sshd、telnet等等),可以使用ldd命令查看指定服务是否支持TCP Wrappers。ldd用于查看二进制文件所需动态链接库,如果某服务中含有“libwrap.so”则表示该服务支持TCP Wrappers,如下图所示。
TCP Wrappers规则定义
在TCP Wrappers中通过/etc/hosts.allow和/etc/hosts.deny配置规则允许或阻止指定客户端对指定服务的访问,修改保存此文件后配置无须重新启动服务立即生效。TCP Wrappers规则生效原则如下。
- 当/etc/hosts.allow和/etc/hosts.deny无匹配记录访问可通过。
- 当/etc/hosts.allow有匹配记录访问可通过。
- 当/etc/hosts.allow和/etc/hosts.deny都匹配时访问可通过。
在/etc/hosts.allow 和/etc/hosts.deny文件定义规则的方法都采用以下格式。
服务:客户端[:选项]
- 服务:指定TCP Wrappers需要控制的服务名称。如果是System V服务直接指定服务名称(比如sshd等等),如果是超级服务必须指定超级服务的启动脚本名称(可在对应超级服务的配置文件中找到。比如需要使用TCP Wrappers控制telnet时,/etc/xinetd.d/telnet文件如下图所示内容中所标识的就是telnet的启动脚本名称)。
- 客户端:指定TCP Wrappers需要控制哪些客户端对指定服务的访问,其指定客户端方法见下表。
| 客户端指定方法 | 示例 | 满足示例的客户端 |
| 单一主机 | 192.168.0.30 | IP地址为192.168.0.30。 |
| 指定网段 | 192.168.0. | IP地址包括在192.168.0.0/24的网段。 |
| 指定网段 | 192.168.0.0/255.255.255.0 | IP地址包括在192.168.0.0/24的网段。 |
| 指定DNS后缀 | .example.com | 所有DNS后缀为.example.com的主机 |
| 指定FQDN | client1.example.com | FQDN为client1.example.com的主机 |
| 指定所有客户端 | ALL |
- 选项:包括allow、deny以及一些其他参数。allow、deny分别用于允许和阻止指定客户端对指定服务的访问。allow、deny都可以在/etc/hosts.allow和/etc/hosts.deny定义动作时使用,为了避免使用不必要的错误,推荐不使用/etc/hosts.deny文件配置,如需要阻止操作时,可直接在/etc/hosts.allow中使用deny动作。
在上图所示内容是/etc/hosts.allow中配置的一个例子,其中。
①:阻止192.168.0.0/24网段的所有客户端访问本机的telnet服务。
②:允许192.168.0.0/24网段的所有客户端访问本机的ssh服务。如果在/etc/hosts.deny中没有定义任何与sshd相关规则的情况下此配置没有意义,因为根据TCP Wrappers规则生效的原则,假设有一个IP地址为192.168.1.100的客户端访问本机ssh服务时,会因为在/etc/hosts.allow和/etc/hosts.deny都无匹配记录而正常通过TCP Wrappers检查。
TCP Wrappers执行外部命令
可以在选项中使用spawn参数让TCP Wrappers执行一些外部命令。比如在/etc/hosts.allow文件中增加如下内容后,当TCP Wrappers阻止连接后,将相关信息写入到/var/log/example.log文件中,其中“%”开头的是TCP Wrappers传递给外部命令的一些变量(常见变量见下表)。
sshd:ALL:spawn (/bin/echo %a from %h attempted to access %d >> \
/var/log/tw.example):deny
| 变量名 | 含义 |
| %c | 访问的客户端信息(user@host) |
| %s | 访问的服务器端信息(server@host) |
| %h | 访问的客户端的FQDN(如果可以DNS反向解析) |
| %p | 服务器PID |
TCP Wrappers排除
在/etc/hosts.allow和/etc/hosts.deny中指定客户端时,可使用EXCEPT参数在一个范围内排除指定客户端。比如在/etc/hosts.allow文件中增加如下内容后,将TCP Wappers将允许所有的客户端访问ssh服务,但不包括192.168.0.100。不过要注意这里被排除的192.168.0.100并不表示阻止其访问ssh服务,因为根据TCP Wrappers规则生效的原则,如果在/etc/hosts.deny中没有明确阻止192.168.0.100访问的情况下,192.168.0.100还是可以访问本机的ssh服务。
sshd:ALL EXCEPT 192.168.0.100
EXCEPT参数还可以嵌套使用,比如下面的例子中在/etc/hosts.allow文件中增加如下内容后表示允许所有客户端访问本机ssh服务,但DNS后缀为.example.com(不包括server.example.com)的客户端排除。
sshd:ALL EXCEPT .example.com EXCEPT server.example.com