在 Linux 服务器管理中,保障服务的安全性至关重要。除了防火墙(如 iptables
或 firewalld
),TCP Wrappers 是一个轻量级但高效的工具,可通过 /etc/hosts.allow
和 /etc/hosts.deny
文件快速定义网络服务的访问规则。本文将深入探讨这两个文件的作用、配置方法以及实际应用场景。
TCP Wrappers 是一个基于主机的访问控制系统,通过封装网络服务(如 sshd
、vsftpd
等),在服务请求到达前进行权限验证。只有支持 libwrap
库的服务才能使用此机制(可以通过 ldd /usr/sbin/sshd | grep libwrap
来验证服务是否启用了 TCP Wrappers)。
TCP Wrappers 通过检查 /etc/hosts.allow
和 /etc/hosts.deny
文件来决定是否允许远程主机访问本机服务。其工作流程如下:
/etc/hosts.allow
文件,查看是否有匹配的规则。如果匹配成功,则允许访问。/etc/hosts.allow
中没有匹配项,系统会继续检查 /etc/hosts.deny
文件。如果找到匹配项,则拒绝访问。这种访问控制机制简单、直接,适用于大多数 Linux 系统服务。
/etc/hosts.allow
和 /etc/hosts.deny
文件是 TCP Wrappers 的一部分,用于控制主机对系统上服务的访问权限。它们的主要作用是通过 IP 地址、主机名或网络地址来允许或拒绝远程主机的访问。
/etc/hosts.allow
:定义允许访问指定服务的主机或网络。/etc/hosts.deny
:定义拒绝访问指定服务的主机或网络。/etc/hosts.allow
。/etc/hosts.deny
。hosts.deny
中有匹配规则,则拒绝访问。这两个文件的作用是互补的:如果 /etc/hosts.allow
中匹配到某个主机或 IP 地址,则允许访问;如果 /etc/hosts.deny
中匹配到,则拒绝访问。
/etc/hosts.allow
和 /etc/hosts.deny
的配置格式类似,每一行都包含三个部分:
服务列表 : 客户端列表 [: 操作选项]
sshd, vsftpd
),或者使用 ALL
表示所有服务。192.168.1.10
)192.168.1.0/255.255.255.0
或 192.168.1.
).example.com
匹配所有子域)ALL
(所有客户端)、LOCAL
(本地网络)、KNOWN
(可解析的主机名)等。sshd: 192.168.1.0/24
sshd: 192.168.1.20, 10.0.0.5
httpd: .mydomain.com
192.168.1.0/24
网段的主机访问 SSH 服务(sshd
)192.168.1.20
和 10.0.0.5
访问 SSH 服务(sshd
).mydomain.com
域名的所有主机访问 HTTP 服务(httpd
)# /etc/hosts.deny
vsftpd: 192.168.2.0/255.255.255.0
ALL: ALL
这里一个ALL已经是全部了,我把vsftpd加到这,是表示可以拒绝FTP服务的意思
192.168.2.0/24
网段的所有主机访问 FTP 服务(vsftpd
)。ALL: ALL
会拒绝所有未在 /etc/hosts.allow
中明确允许的访问。# /etc/hosts.allow
ALL: 192.168.1.0/24, LOCAL
# /etc/hosts.deny
ALL: ALL
192.168.1.0/24
网段和本地网络访问所有服务。# /etc/hosts.deny
sshd: ALL : spawn /bin/echo "Blocked %a at %d" >> /var/log/secure.log
/var/log/secure.log
文件中。/etc/hosts.allow
的规则优先于 /etc/hosts.deny
。如果同一服务在两个文件中都有配置,hosts.allow
中的规则将优先生效。sshd
、xinetd
管理的服务)才会受此控制。可以通过 ldd
命令检查服务是否链接了 libwrap
库(例如:ldd /usr/sbin/sshd
)。如果希望只允许某个特定 IP 地址访问某个服务,可以这样配置:
sshd: 192.168.1.10
这表示只允许 IP 地址为 192.168.1.10
的主机访问 SSH 服务。
你可以拒绝某个网段的所有访问:
ALL: 192.168.2.0/24
这表示拒绝 192.168.2.0/24
网段的主机访问所有服务。
你可以灵活配置这两个文件。以下是允许特定 IP 地址访问 SSH 服务,同时拒绝其他所有主机的配置:
/etc/hosts.allow
:sshd: 192.168.1.10
/etc/hosts.deny
:sshd: ALL
配置没有生效:
ldd
命令检查服务是否链接了 libwrap
库。例如:ldd /usr/sbin/sshd
。优先级问题:
/etc/hosts.allow
中的规则优先于 /etc/hosts.deny
。因此,如果在 hosts.allow
中明确允许某个主机,而在 hosts.deny
中拒绝了该主机的访问,hosts.allow
中的规则会优先生效。
服务未使用 TCP Wrappers:
不是所有服务都支持 TCP Wrappers 访问控制。你需要查阅服务的文档来确认是否支持此机制。如果不支持,建议使用防火墙(如 iptables
)进行访问控制。
通过限制只允许特定 IP(如管理员 IP)访问 SSH 服务,可以提高安全性:
/etc/hosts.allow
:sshd: 192.168.1.0/24
/etc/hosts.deny
:sshd: ALL
结合 Fail2Ban 动态更新 /etc/hosts.deny
来封禁暴力
破解攻击者的 IP 地址。
允许内网访问数据库服务,拒绝外网连接,以保护数据库的安全。
特性 | TCP Wrappers | 防火墙(iptables) |
---|---|---|
配置复杂度 | 简单,基于文本文件 | 复杂,需学习规则语法 |
作用层级 | 应用层(服务进程) | 网络层(IP/端口) |
适用场景 | 快速控制服务访问权限 | 全面控制网络流量 |
/etc/hosts.allow
和 /etc/hosts.deny
是 Linux 系统中简单却强大的访问控制工具。它们适合快速配置黑白名单,尤其在小规模环境中效果显著。对于复杂的网络控制,仍然需要结合防火墙进行全面防护。掌握其用法,能够在安全与便捷之间找到完美平衡。
提示:修改前务必备份原文件,并通过 telnet
或 nc
等工具测试规则是否生效!在配置这些文件时,务必小心,避免误配置导致合法用户无法访问系统。