要确定客户端计算机是否允许连接到服务,TCP包装器将引用以下两个文件,这两个文件通常称为主机访问文件:
/etc/hosts.allow
/etc/hosts.deny
当TCP包裹服务接收到客户端请求时,需要执行以下基本步骤:
参考 /etc/hosts.allow。- TCP包服务依次解析/etc/hosts.allow文件并应用为该服务指定 的第一个规则。如果它找到一个匹配的规则,它允许连接。如果没有,则转到步骤2。
参考 /etc/hosts.deny。- TCP包裹的服务依次解析 /etc/hosts.deny文件。如果发现匹配的规则是拒绝连接。如果没有,则授予对服务的访问权限。
以下是使用TCP包装器保护网络服务时要考虑的重点:
因为hosts.allow中的访问规则首先被应用,它们优先于hosts.deny中指定的规则 。因此,如果在hosts.allow中允许访问服务,则会拒绝在hosts.deny中拒绝访问同一服务的规则。
每个文件中的规则从上到下读取,给定服务的第一个匹配规则是唯一应用的规则。因此,规则的顺序是非常重要的。
如果在任一文件中找不到服务规则,或者两个文件都不存在,则授予对服务的访问权限。
TCP包裹的服务不会从主机访问文件缓存规则,所以对hostss.allow或 hosts.deny的任何更改都将立即生效,而无需重新启动网络服务。
格式化访问规则
/etc/hosts.allow和 /etc/hosts.deny 的格式是一样的。以哈希标记(#)开头的任何空白行或行都将被忽略,每个规则必须在自己的行上。
每个规则使用以下基本格式来控制对网络服务的访问:
<daemon list>: <client list> [: <option>: <option>:...]
访问控制
选项字段还允许管理员通过添加allow或 deny指令作为最终选项来明确允许或拒绝单个规则中的主机。
例如,以下两个规则允许来自client-1.example.com的 SSH 连接,但拒绝来自 client-2.example.com的连接:
sshd:client-1.example.com:allow
sshd:client-2.example.com:deny
通过允许基于规则的访问控制,选项字段允许管理员将所有访问规则合并到单个文件中:hosts.allow或 hosts.deny。有些人认为这是组织访问规则的更简单的方法。
sshd : 192.168.0.100 : allow
sshd : 223.227.223.* : allow
sshd : ALL : deny