如何在 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。
- KNOWN表示主机名、主机地址或用户已知的情况。
- UNKNOWN与KNOWN相反。
- 如果反向 DNS 查找(首先根据 IP 地址确定主机名,然后根据主机名获取 IP 地址)每次都返回不同的地址,则PARANOID会导致连接中断。
- 最后,以冒号分隔的可选操作列表指示当触发给定规则时应该发生什么。
您可能要记住,允许访问特定服务的规则/etc/hosts.allow
优先于/etc/hosts.deny
禁止访问该服务的规则。此外,如果两条规则适用于同一项服务,则只会考虑第一条规则。
不幸的是,并非所有网络服务都支持使用 TCP 包装器。要确定给定服务是否支持它们,请执行以下操作:
# ldd /path/to/binary | grep libwrap
如果上述命令返回输出,则可以对其进行 TCP 包装。 sshd和vsftpd就是一个例子,如下所示:
如何使用 TCP 包装器限制对服务的访问
在编辑/etc/hosts.allow
和时,请确保在最后一行非空行后按Enter 键/etc/hosts.deny
添加换行符。
要仅允许 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 包含该字符串的所有主机和/或客户端”。
本文对您有帮助吗?您有任何问题或意见吗?欢迎使用下面的评论表给我们留言。