如何在Linux中使用TCP Wrapper保护网络服务

在本文中,我们将解释什么是TCP包装器,以及如何配置它们以限制对在Linux服务器上运行的网络服务的访问。

在这篇文章中,我们将解释什么是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. 服务是一个逗号分隔的服务当前的规则应适用于列表。
  2. 客户代表受规则以逗号分隔的主机名或IP地址的列表。 接受以下通配符:
    1. 所有比赛的一切。 同时适用于客户端和服务。
    2. LOCAL匹配的主机,而无需在他们的FQDN的时期,例如localhost。
    3. 众所周知指明了主机名,主机地址,或用户已知的情况。
    4. 未知已知的对面。
    5. PARANOID导致连接到被丢弃,如果反向DNS查询(第一个IP地址来确定主机名,然后在主机名称获取IP地址),在每种情况下返回不同的地址。
  3. 最后,一个由冒号分隔的操作的可选列表指示当触发给定规则时应该发生什么。

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

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

# ldd /path/to/binary | grep libwrap

如果上面的命令返回输出,它可以被TCP包裹。 这方面的一个例子是sshd的vsftpd的 ,如下所示:

在TCP Wrapper中查找支持的服务

在TCP Wrapper中查找支持的服务

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

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

允许SSH和FTP访问只能192.168.0.102本地主机 ,并拒绝所有其他人,在添加这两条线/etc/hosts.deny

sshd,vsftpd : ALL
ALL : ALL

并在下面的行/etc/hosts.allow

sshd,vsftpd : 192.168.0.102,LOCAL
TCP Wrappers - hosts.deny文件
#
# 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
TCP Wrappers - hosts.allow文件
#
# 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服务器将成为本地主机不可用。 在添加通配符后,服务将再次可用。

验证FTP访问

验证FTP访问

为了让所有的服务到名称中包含主机example.com ,在添加此行hosts.allow

ALL : .example.com

并拒绝访问vsftpd的机器上10.0.1.0/24,在添加此行hosts.deny

vsftpd : 10.0.1.

在最后两个实施例中,注意在开始和客户端列表的末尾。 它用于指示“所有主机和/或客户端,其中名称或IP包含该字符串”。

本文对您有帮助吗? 你有什么问题或意见吗? 使用下面的评论表格随意给我们留言。