要决定一个客户是否被允许连接一项服务,TCP Wrappers 会参考以下两个文件,这两个文件通常被称为 主机访问 文件:
/etc/hosts.allow
/etc/hosts.deny
当一个 TCP Wrappers 接收到一个客户请求时,它会运行以下几个步骤:
检查/etc/hosts.allow. — TCP 会绕的服务会循序地解释 /etc/hosts.allow 文件并应用第一个为这个服务所指定的规则。如果找到了一个匹配的规则,则允许连接。如果找不到匹配的规则,就会进行下一个步骤。
检查 /etc/hosts.deny. — TCP 会绕的服务会循序地来解释 /etc/hosts.deny 文件。如果找到一个匹配的规则,则拒绝这个连接。如果找不到匹配的规则,则允许连接到这个服务。
在使用 TCP Wrappers 保护网络服务时应该考虑以下几个要点:
因为 hosts.allow 中的规则会首先被应用,所以比 hosts.deny 中指定的规则有优先权。因此,如果访问一项服务在 hosts.allow 中设置为允许,那么在 hosts.deny 中同一项服务的拒绝访问设置则被忽略。
每个文件中的各项规则是由上到下被读取的,第一个匹配的规则是唯一被应用的规则。因此,规则的排列顺序极其重要。
如果在这两个文件中都没有找到匹配的规则,或这两个文件都不存在,那么就授予访问这项服务的权限。
TCP 会绕的服务并不缓存主机访问文件中的规则,因此对 hosts.allow 或 hosts.deny 的配置改变都无需重新启动网络服务便会马上起作用。
如果一个主机访问文件的最后一行不是一个新行符(即按 Enter 键所产生的),这个文件中的最后一条规则会失败,而且会将一个错误信息记录到 /var/log/messages 或 /var/log/secure 文件中。一个占据多个行的规则在换行时没有使用反斜线字符时,也会有同样的问题。下面的例子展示了规则失败时日志讯息的相关部分,规则失败的原因可以是上文提到的两个原因中任何一个:
warning: /etc/hosts.allow, line 20: missing newline or line too long