tcp_wrappers(1)介绍
TCP Wrappers 是一种在 Linux 和其他类 Unix 系统上使用的安全工具,用于控制和限制对网络服务的访问。它最初由 Wietse Venema 开发,主要通过两个配置文件 /etc/hosts.allow
和 /etc/hosts.deny
来实现访问控制。TCP Wrappers 的作用是作为一个中间层,包裹在支持它的网络服务(如 SSH、Telnet、FTP 等)周围,以决定哪些客户端可以连接到这些服务。
1.工作原理
TCP Wrappers 通常与 inetd
(Internet 超级服务器)或独立运行的支持 libwrap
的服务(如 sshd
)配合使用。当有客户端尝试连接时,TCP Wrappers 会:
- 检查
/etc/hosts.allow
文件:如果匹配到允许的规则,则允许连接。
- 检查
- 如果没有匹配,则检查
/etc/hosts.deny
文件:如果匹配到拒绝的规则,则拒绝连接。
- 如果没有匹配,则检查
- 如果两个文件都没有匹配的规则,默认行为取决于服务的配置(通常是允许连接,但视具体实现而定)。
2.配置文件
/etc/hosts.allow
: 定义允许访问的规则。/etc/hosts.deny
: 定义拒绝访问的规则。
hosts.allow优先级大于hosts.deny
2.1语法格式
配置文件的基本语法是:
服务名: 客户端 [选项]
- 服务名: 通常是守护进程的名称,例如
sshd
、vsftpd
。 - 客户端: 可以是 IP 地址、主机名、域名或通配符(如
ALL
)。 - 选项: 可选,用于执行特定操作(如记录日志)。
2.2示例
允许特定 IP 访问 SSH:
sshd: 192.168.1.10
在/etc/hosts.allow
中添加这一行,只允许192.168.1.10
访问 SSH。拒绝所有来源的 Telnet:
telnetd: ALL
在/etc/hosts.deny
中添加这一行,拒绝所有客户端对 Telnet 的访问。允许本地网络访问 FTP,拒绝其他:
vsftpd: 192.168.1.0/24
在/etc/hosts.allow
中允许本地网络访问。
vsftpd: ALL
在/etc/hosts.deny
中拒绝其他所有访问。
3.局限性
- 依赖支持: 只有编译时链接了
libwrap
库的服务才能使用 TCP Wrappers。例如,许多现代服务(如 Nginx)不支持。 - 功能有限: 相比防火墙(如
iptables
或firewalld
),TCP Wrappers 的功能较为简单,无法处理复杂的规则或动态调整。 - 性能影响: 对于高流量服务,额外的检查可能会带来轻微性能开销。
4.检查服务是否支持
可以用以下命令检查某个服务是否支持 TCP Wrappers:
1 | ldd /usr/sbin/sshd | grep libwrap |
如果输出包含 libwrap.so
,则该服务支持 TCP Wrappers。
5.现代替代方案
随着防火墙工具(如 iptables
、nftables
和 firewalld
)以及更高级的访问控制机制(如 SELinux)的普及,TCP Wrappers 的使用逐渐减少。但在一些传统系统或特定场景中,它仍然是一个轻量级的解决方案。