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 会:

    1. 检查 /etc/hosts.allow 文件:如果匹配到允许的规则,则允许连接。
    1. 如果没有匹配,则检查 /etc/hosts.deny 文件:如果匹配到拒绝的规则,则拒绝连接。
    1. 如果两个文件都没有匹配的规则,默认行为取决于服务的配置(通常是允许连接,但视具体实现而定)。

2.配置文件

  • /etc/hosts.allow: 定义允许访问的规则。
  • /etc/hosts.deny: 定义拒绝访问的规则。

hosts.allow优先级大于hosts.deny

2.1语法格式

配置文件的基本语法是:

服务名: 客户端 [选项]
  • 服务名: 通常是守护进程的名称,例如 sshdvsftpd
  • 客户端: 可以是 IP 地址、主机名、域名或通配符(如 ALL)。
  • 选项: 可选,用于执行特定操作(如记录日志)。

2.2示例

  1. 允许特定 IP 访问 SSH:
    sshd: 192.168.1.10
    /etc/hosts.allow 中添加这一行,只允许 192.168.1.10 访问 SSH。

  2. 拒绝所有来源的 Telnet:
    telnetd: ALL
    /etc/hosts.deny 中添加这一行,拒绝所有客户端对 Telnet 的访问。

  3. 允许本地网络访问 FTP,拒绝其他:
    vsftpd: 192.168.1.0/24
    /etc/hosts.allow 中允许本地网络访问。
    vsftpd: ALL
    /etc/hosts.deny 中拒绝其他所有访问。

3.局限性

  • 依赖支持: 只有编译时链接了 libwrap 库的服务才能使用 TCP Wrappers。例如,许多现代服务(如 Nginx)不支持。
  • 功能有限: 相比防火墙(如 iptablesfirewalld),TCP Wrappers 的功能较为简单,无法处理复杂的规则或动态调整。
  • 性能影响: 对于高流量服务,额外的检查可能会带来轻微性能开销。

4.检查服务是否支持

可以用以下命令检查某个服务是否支持 TCP Wrappers:

1
2
3
ldd /usr/sbin/sshd | grep libwrap
or
strings /usr/sbin/sshd | grep libwrap

如果输出包含 libwrap.so,则该服务支持 TCP Wrappers。

5.现代替代方案

随着防火墙工具(如 iptablesnftablesfirewalld)以及更高级的访问控制机制(如 SELinux)的普及,TCP Wrappers 的使用逐渐减少。但在一些传统系统或特定场景中,它仍然是一个轻量级的解决方案。