网站搜索

如何在 Linux 中使用 TCP 包装器保护网络服务


在本文中,我们将解释什么是 TCP 包装器以及如何配置它们以限制对 Linux 服务器上运行的网络服务的访问。然而,在开始之前,我们必须澄清,使用 TCP 包装器并不能消除对正确配置防火墙的需要。

在这方面,您可以将此工具视为基于主机的访问控制列表,而不是系统的最终安全措施。通过使用防火墙和 TCP 包装器,您将确保您的服务器不会出现单点故障,而不是偏向其中之一。

了解hosts.allow和hosts.deny

当网络请求到达您的服务器时,TCP 包装器使用 hosts.allowhosts.deny(按顺序)来确定是否允许客户端使用给定的服务。

默认情况下,这些文件为空、全部被注释掉或不存在。因此,一切都可以通过 TCP 包装层,并且您的系统只能依靠防火墙来提供全面保护。由于这是不希望的,由于我们在简介中所述的原因,请确保这两个文件都存在:

ls -l /etc/hosts.allow /etc/hosts.deny

两个文件的语法相同:

<services> : <clients> [: <option1> : <option2> : ...]

在哪里,

  1. services 是应应用当前规则的以逗号分隔的服务列表。
  2. clients 表示受规则影响的以逗号分隔的主机名或 IP 地址列表。接受以下通配符:

    1. ALL 匹配所有内容。适用于客户和服务。
    2. LOCAL 匹配 FQDN 中不带句点的主机,例如 localhost。
    3. 已知表示主机名、主机地址或用户已知的情况。
    4. 未知已知相反。
    5. 如果反向 DNS 查找(首先通过 IP 地址确定主机名,然后通过主机名获取 IP 地址)在每种情况下返回不同的地址,PARANOID 会导致连接断开。
  3. 最后,以冒号分隔的操作的可选列表指示触发给定规则时应该发生的情况。

您可能需要记住,/etc/hosts.allow 中允许访问给定服务的规则优先于 /etc/hosts.deny 中禁止访问的规则它。此外,如果两个规则适用于同一服务,则仅考虑第一个规则。

不幸的是,并非所有网络服务都支持使用 TCP 包装器。要确定给定服务是否支持它们,请执行以下操作:

ldd /path/to/binary | grep libwrap

如果上述命令返回输出,则它可以是 TCP 包装的。例如 sshdvsftpd,如下所示:

如何使用 TCP 包装器限制对服务的访问

当您编辑 /etc/hosts.allow/etc/hosts.deny 时,请确保在最后一个字符后按 Enter 键添加换行符非空行。

要仅允许 SSH 和 FTP 访问 192.168.0.102localhost 并拒绝所有其他访问,请在 /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 包含该字符串的所有主机和/或客户端”。

这篇文章对您有帮助吗?有什么评价或者疑问吗?请随时使用下面的评论表给我们留言。