TCP wrappers是基于主机的访问控制系统。它用来阻止非授权的访问,只允许特定客户访问你服务器上的服务。
为什么使用TCP wrappers
TCP wrappers在你的服务器与任何潜在的攻击者之间创建了额外的安全层。除了访问控制功能之外,它还提供日志记录和主机名验证。TCP wrappers在大多数Linux或者类UNIX系统能开箱即用,这使得它能够容易的配置,是对目前已经存在的防火墙的完美补充。
如何判断一个程序是否支持TCP wrappers
不是所有的程序都支持TCP wrappers。程序必须与libwrap库编译。常见的服务像sshd,ftpd和telnet默认支持TCP wrappers。我们可以使用如下命令来检查是否支持TCP wrappers:
- ldd /path-to-daemon | grep libwrap.so
ldd命令会打印出可执行文件共享依赖列表。把ldd命令输出管道给grep,来查找是否包含libwrap.so。如果有输出,则表示支持TCP wrappers。
如何使用TCP wrappers
TCP wrappers依赖两个文件/etc/hosts.allow和/etc/hosts.deny,如果这些文件不存在,先创建:
- touch /etc/hosts.{allow,deny}
编辑hosts.allow和hosts.deny
没有编辑过的/etc/hosts.deny文件内容如下:
- #
- # hosts.deny This file contains access rules which are used to
- # deny connections to network services that either use
- # the tcp_wrappers library or that have been
- # started through a tcp_wrappers-enabled xinetd.
- #
- # The rules in this file can also be set up in
- # /etc/hosts.allow with a ‘deny’ option instead.
- #
- # See ‘man 5 hosts_options’ and ‘man 5 hosts_access’
- # for information on rule syntax.
- # See ‘man tcpd’ for information on tcp_wrappers
- #
hosts.deny里的规则由上往下匹配,如果上面的规则匹配了,就不再往下搜索,往下的将会被忽略。一条规则的语法如下:
- daemons : hostnames/IPs
多个daemons或者多个hostnames/IP可以使用空格分隔。
例子
拒绝所有:
这个hosts.deny例子将会阻止所有客户访问所有进程。
- ALL : ALL
允许访问:
在hosts.allow文件里的规则比hosts.deny里的规则优先级更高。这就允许我们使用hosts.allow来对禁用规则设置例外。下面的规则表示允许123.45.67.89访问sshd服务:
- sshd : 123.45.67.89
通配符
TCP wrappers支持通配符,允许你对一批IP地址或者主机名设置规则。可用通配符来ALL, LOCAL, UNKNOWN, KNOWN和PARANOID。
ALL – 匹配所有
LOCAL – 匹配不包含.的主机名
UNKNOWN – 匹配无法解析出IP的主机名
KNOWN – 匹配可以解析出IP的主机名