使用TCP Wrappers来保护你的系统

TCP wrappers是基于主机的访问控制系统。它用来阻止非授权的访问,只允许特定客户访问你服务器上的服务。

为什么使用TCP wrappers

TCP wrappers在你的服务器与任何潜在的攻击者之间创建了额外的安全层。除了访问控制功能之外,它还提供日志记录和主机名验证。TCP wrappers在大多数Linux或者类UNIX系统能开箱即用,这使得它能够容易的配置,是对目前已经存在的防火墙的完美补充。

如何判断一个程序是否支持TCP wrappers

不是所有的程序都支持TCP wrappers。程序必须与libwrap库编译。常见的服务像sshd,ftpd和telnet默认支持TCP wrappers。我们可以使用如下命令来检查是否支持TCP wrappers:

  1. ldd /path-to-daemon | grep libwrap.so

ldd命令会打印出可执行文件共享依赖列表。把ldd命令输出管道给grep,来查找是否包含libwrap.so。如果有输出,则表示支持TCP wrappers。

如何使用TCP wrappers

TCP wrappers依赖两个文件/etc/hosts.allow和/etc/hosts.deny,如果这些文件不存在,先创建:

  1. touch /etc/hosts.{allow,deny}

编辑hosts.allow和hosts.deny

没有编辑过的/etc/hosts.deny文件内容如下:

  1. #
  2. # hosts.deny    This file contains access rules which are used to
  3. #       deny connections to network services that either use
  4. #       the tcp_wrappers library or that have been
  5. #       started through a tcp_wrappers-enabled xinetd.
  6. #
  7. #       The rules in this file can also be set up in
  8. #       /etc/hosts.allow with a ‘deny’ option instead.
  9. #
  10. #       See ‘man 5 hosts_options’ and ‘man 5 hosts_access’
  11. #       for information on rule syntax.
  12. #       See ‘man tcpd’ for information on tcp_wrappers
  13. #

hosts.deny里的规则由上往下匹配,如果上面的规则匹配了,就不再往下搜索,往下的将会被忽略。一条规则的语法如下:

  1. daemons : hostnames/IPs

多个daemons或者多个hostnames/IP可以使用空格分隔。

例子

拒绝所有:
这个hosts.deny例子将会阻止所有客户访问所有进程。

  1. ALL : ALL

允许访问:
在hosts.allow文件里的规则比hosts.deny里的规则优先级更高。这就允许我们使用hosts.allow来对禁用规则设置例外。下面的规则表示允许123.45.67.89访问sshd服务:

  1. sshd : 123.45.67.89

通配符

TCP wrappers支持通配符,允许你对一批IP地址或者主机名设置规则。可用通配符来ALL, LOCAL, UNKNOWN, KNOWN和PARANOID。
ALL – 匹配所有
LOCAL – 匹配不包含.的主机名
UNKNOWN – 匹配无法解析出IP的主机名
KNOWN – 匹配可以解析出IP的主机名