TCP Wrappers 是一种对使用 /etc/inetd.sec 的替换方法,为由 inetd 生成的服务提供了增强的安全性。TCP Wrappers 提供防止主机名和主机地址欺骗的保护。
TCP WrappersTransmission Control Protocol (TCP) Wrappers 为由inetd生成的服务提供了增强的安全性。TCP Wrappers 是一种对使用 /etc/inetd.sec 的替换方法。TCP Wrappers 提供防止主机名和主机地址欺骗的保护。欺骗是一种伪装成有效用户或主机以获得对系统进行未经授权的访问的方法。
TCP Wrappers 使用访问控制列表 (ACL) 来防止欺骗。ACL 是 /etc/hosts.allow 和 /etc/hosts.deny 文件中的系统列表。在配置为验证主机名到 IP 地址映射,以及拒绝使用IP 源路由的软件包时,TCP Wrappers 提供某些防止 IP 欺骗的保护。
wrappers_TCP Wrappers -简介
TCP Wrappers通常做法是在操作系统层面上安装防火墙来处理网络连接。然而虽然防火墙有非常广泛的用途,但他却不是万能的,例如它无法处理类似的向连接发起者发送一些文本这样的任务。而TCP Wrappers能够完成它以及更多的其他事情。
TCP Wrappers扩展了inetd为受其控制的服务程序实施控制的能力。通过使用这种方法,它能够提供日志支持、返回消息给联入的连接、使得服务程序只接受内部连接,等等。尽管防火墙也能够完成其中的某些功能,这不仅增加了一层额外的保护,也提供了防火墙无法提供的功能。
然而,由TCP Wrappers提供的一些额外的安全功能,不应被视为好的防火墙的替代品。TCP Wrappers 应结合防火墙或其他安全加强设施一并使用,为系统多提供一层安全防护。
wrappers_TCP Wrappers -初始配置及简单设置
TCP Wrappers使用TCP Wrappers的唯一要求是确保inetd在从rc.conf中启动时包含了-Ww选项。当然,还需要对/etc/hosts.allow进行适当的配置,但syslogd在配置不当时会在系统日志中记录相关消息。
注意:使用hosts.deny在现在被认为是不推荐和过时的做法。所有的配置选项应放到/etc/hosts.allow中。
在最简单的配置中,服务程序连接策略是根据/etc/hosts.allow允许或阻止。FreeBSD这样的操作系统中的默认配置是允许一切发到由inetd所启动的服务的连接请求。
基本配置的形式通常是:
服务:地址:动作
服务---从inetd启动的服务程序名字
地址---可以是任何有效的主机名、一个IP或由方括号([ ])括起来的IPv6地址
动作---字段可以使allow或deny,分别用于允许和禁止相应的访问。
在配置时需要注意所有的配置都是按照第一个匹配的规则运转的,这表示配置文件将按照顺序查找匹配规则,而一旦找到匹配,则搜索也就停止了。
例如:允许POP3连接通过mail/qpopper服务,应把下面的行添加到hosts.allow
# This line is required for POP3 connections:
qpopper:ALL:allow
增加这样之后,需要重新启动inetd。可以通过使用kill命令来完成这项工作,或使用/etc/rc.d/inetd的restart parameter参数。
wrappers_TCP Wrappers -高级配置
TCP Wrappers
TCP Wrappers 也有一些高级的配置选项,用来对如何处理连接实施更多的控制。一些时候,返回一个说明到特定的主机或请求服务的连接可能是更好的办法。其他情况下,记录日志或者发送邮件给管理员可能更为适合。另外,一些服务可能只希望为本机提供。这些需求都可以通过使用通配符,扩展字符以及外部命令来实现。
外部命令
假设由于发生了某种状况,而导致连接应该被拒绝掉,而将其原因发送给发起连接的人。如何完成这样的任务呢?这样的动作可以通过使用twist选项来实现。当发起了连接请求时,twist将调用一个命令或脚本。在hosts.allow文件中已经给出了一个例子:
# The rest of the daemons are protected.
ALL : ALL
: severity auth.info
: twist /bin/echo "You are not welcome to use %d from %h."
这个例子将把消息“You are not allowed to use daemon from hostname.” 返回给访问先前没有配置过允许访问的服务客户。对于希望把消息反馈给连接发起者,然后立即切断这样的需求来说,这样的配置非常有用。请注意所有反馈信息必须被引号包围,这一规则是没有例外的。
警告:如果攻击者向服务程序发送大量的连接请求,则可能发动一次成功的拒绝服务攻击。
另一种可能是针对这种情况使用spawn。类似twist,spawn也暗含拒绝连接,并可以用来执行外部命令或服务。与twist不同的是,spawn 不会向连接发起者发送回应。考虑下面的配置:
# We do not allow connections from example.com:
ALL :.example.com
:spawn (/bin/echo %a from %h attempted to access %d >>
/var/log/connections.log)
:deny
这将拒绝来自 *.example.com 域的所有连接;同时还将记录主机名,IP 地址,以及对方所尝试连接的服务名字到/var/log/connections.log文件中。
除了前面已经介绍过的转义字符,例如 %a 之外, 还有一些其它的转义符。参考hosts_access联机手册可以获得完整的列表。
通配符选项
前面的例子都使用了ALL。其它选项能够将功能扩展到更远。例如,ALL可以被用来匹配每一个服务、域,或IP地址。另一些可用的通配符包括PARANOID,它可以用来匹配任何来自可能被伪造的IP地址的主机。换言之,paranoid可以被用来定义来自IP与其主机名不符的客户。
# Block possibly spoofed requests to sendmail:
sendmail:PARANOID:deny
在这个例子中,所有连接sendmail的IP地址与其主机名不符的主机都将被拒绝。
小心:如果服务器和客户机有一方的DNS配置不正确,使用PARANOID可能会严重地削弱服务。在设置之前,管理员应该谨慎地考虑。
wrappers_TCP Wrappers -相关链接
KerberosIV
one-time passwords
encrypt
wrappers_TCP Wrappers -参考资料
FREEBSD HANDBOOK