TCP wrappers是基于主机的访问控制系统。它用来阻止非授权的访问,只允许特定客户访问你服务器上的服务。
TCP wrappers在你的服务器与任何潜在的攻击者之间创建了额外的安全层。除了访问控制功能之外,它还提供日志记录和主机名验证。TCP wrappers在大多数Linux或者类UNIX系统能开箱即用,这使得它能够容易的配置,是对目前已经存在的防火墙的完美补充。
不是所有的程序都支持TCP wrappers。程序必须与libwrap库编译。常见的服务像sshd,ftpd和telnet默认支持TCP wrappers。我们可以使用如下命令来检查是否支持TCP wrappers:
ldd命令会打印出可执行文件共享依赖列表。把ldd命令输出管道给grep,来查找是否包含libwrap.so。如果有输出,则表示支持TCP wrappers。
TCP wrappers依赖两个文件/etc/hosts.allow和/etc/hosts.deny,如果这些文件不存在,先创建:
没有编辑过的/etc/hosts.deny文件内容如下:
hosts.deny里的规则由上往下匹配,如果上面的规则匹配了,就不再往下搜索,往下的将会被忽略。一条规则的语法如下:
多个daemons或者多个hostnames/IP可以使用空格分隔。
拒绝所有:
这个hosts.deny例子将会阻止所有客户访问所有进程。
允许访问:
在hosts.allow文件里的规则比hosts.deny里的规则优先级更高。这就允许我们使用hosts.allow来对禁用规则设置例外。下面的规则表示允许123.45.67.89访问sshd服务:
TCP wrappers支持通配符,允许你对一批IP地址或者主机名设置规则。可用通配符来ALL, LOCAL, UNKNOWN, KNOWN和PARANOID。
ALL – 匹配所有
LOCAL – 匹配不包含.的主机名
UNKNOWN – 匹配无法解析出IP的主机名
KNOWN – 匹配可以解析出IP的主机名