如何在 Linux 中使用 TCP 包装器保护网络服务
在本文中,我们将解释什么是 TCP 包装器以及如何配置它们以限制对 Linux 服务器上运行的网络服务的访问。然而,在开始之前,我们必须澄清,使用 TCP 包装器并不能消除对正确配置防火墙的需要。
在这方面,您可以将此工具视为基于主机的访问控制列表,而不是系统的最终安全措施。通过使用防火墙和 TCP 包装器,您将确保您的服务器不会出现单点故障,而不是偏向其中之一。
了解hosts.allow和hosts.deny
当网络请求到达您的服务器时,TCP 包装器使用 hosts.allow
和 hosts.deny
(按顺序)来确定是否允许客户端使用给定的服务。
默认情况下,这些文件为空、全部被注释掉或不存在。因此,一切都可以通过 TCP 包装层,并且您的系统只能依靠防火墙来提供全面保护。由于这是不希望的,由于我们在简介中所述的原因,请确保这两个文件都存在:
ls -l /etc/hosts.allow /etc/hosts.deny
两个文件的语法相同:
<services> : <clients> [: <option1> : <option2> : ...]
在哪里,
- services 是应应用当前规则的以逗号分隔的服务列表。
clients 表示受规则影响的以逗号分隔的主机名或 IP 地址列表。接受以下通配符:
- ALL 匹配所有内容。适用于客户和服务。
- LOCAL 匹配 FQDN 中不带句点的主机,例如 localhost。
- 已知表示主机名、主机地址或用户已知的情况。
- 未知与已知相反。
- 如果反向 DNS 查找(首先通过 IP 地址确定主机名,然后通过主机名获取 IP 地址)在每种情况下返回不同的地址,PARANOID 会导致连接断开。
您可能需要记住,/etc/hosts.allow
中允许访问给定服务的规则优先于 /etc/hosts.deny
中禁止访问的规则它。此外,如果两个规则适用于同一服务,则仅考虑第一个规则。
不幸的是,并非所有网络服务都支持使用 TCP 包装器。要确定给定服务是否支持它们,请执行以下操作:
ldd /path/to/binary | grep libwrap
如果上述命令返回输出,则它可以是 TCP 包装的。例如 sshd 和 vsftpd,如下所示:
如何使用 TCP 包装器限制对服务的访问
当您编辑 /etc/hosts.allow
和 /etc/hosts.deny
时,请确保在最后一个字符后按 Enter 键添加换行符非空行。
要仅允许 SSH 和 FTP 访问 192.168.0.102 和 localhost 并拒绝所有其他访问,请在 /etc/hosts.deny
中添加这两行:
sshd,vsftpd : ALL
ALL : ALL
以及 /etc/hosts.allow
中的以下行:
sshd,vsftpd : 192.168.0.102,LOCAL
#
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
#
sshd,vsftpd : ALL
ALL : ALL
#
hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : 192.168.0.102,LOCAL
这些更改会立即发生,无需重新启动。
在下图中,您可以看到从最后一行删除单词 LOCAL
的效果:FTP 服务器将无法用于 localhost。在我们重新添加通配符后,该服务将再次可用。
要允许名称包含 example.com
的主机提供所有服务,请在 hosts.allow
中添加以下行:
ALL : .example.com
要拒绝 10.0.1.0/24 上的计算机访问 vsftpd,请在 hosts.deny
中添加以下行:
vsftpd : 10.0.1.
在最后两个示例中,请注意客户端列表开头和结尾处的点。它用于指示“名称或 IP 包含该字符串的所有主机和/或客户端”。
这篇文章对您有帮助吗?有什么评价或者疑问吗?请随时使用下面的评论表给我们留言。