解释:Linux 和 UNIX TCP 包装器 – 查明程序是否使用 TCP 包装器编译
TCP Wrapper 是一个库,它为接受网络连接的受支持应用程序提供简单的访问控制和标准化日志记录。Linux 和其他类 Unix 操作系统都使用 TCP Wrappers(也称为“TCPD”)进行编译。例如,Solaris、Linux、*BSD 和 Mac OS X 都已将 TCP Wrappers 配置为开箱即用。
[donotprint]
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | 没有任何 |
预计阅读时间 | 8 分钟 |
- 所有 UNIX 应用程序都必须使用 libwrap 库进行编译。
- 包装器不适用于 TCP 上的 RPC 服务。
- TCP Wrappers 的用户名查找功能使用 identd 来识别远程主机的用户名。默认情况下,此功能被禁用,因为当有大量 TCP 连接时,identd 可能会挂起。
尽管如此,TCP Wrappers 比防火墙有一个很大的优势:它工作在应用层。它可以在使用加密时过滤请求。基本上,用户需要同时使用基于主机和基于网络的安全性。TCP Wrappers 支持 pop3、ftp、sshd、telnet 和 r-services 等常见服务。
TCPD(TCP 包装器)优点
- 日志记录— TCPD 监控的连接通过 syslog 工具报告。
- 访问控制– TCPD 支持基于模式匹配的简单访问控制形式。您甚至可以在模式匹配时挂接 shell 命令/脚本的执行。
- 主机名验证– TCPD 通过查看名称->地址 DNS 服务器返回的主机名和地址来验证地址->名称 DNS 服务器返回的客户端主机名。
- 防欺骗保护。
如何确定程序是否使用 TCP 包装器编译?
要确定给定的可执行文件 daemon/path/to/daemon 是否支持 TCP Wrappers,请输入:
$ ldd /path/to/daemon | grep libwrap.so
如果此命令返回任何输出,则守护程序可能支持 TCP Wrappers。在此示例中,查明 SSHD 是否支持 TCP Wrappers。首先,在磁盘上找到 SSHD 程序位置:
$ whereis sshd
示例输出:
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz
接下来,运行以下命令ldd来查明 SSHD 守护进程是否支持 TCP Wrappers:
$ ldd /usr/sbin/sshd | grep libwrap.so
示例输出:
libwrap.so.0 => /lib64/libwrap.so.0 (0x00002b759b381000)
该ldd命令用于查看 libwrap.so 是否是依赖项。TCP Wrapper 支持的替代方法是使用 iptables 进行数据包过滤。
重要文件
- tcpd守护进程 – 互联网服务的访问控制设施。
- /etc/hosts.allow– 该文件描述了允许使用本地 INET 服务的主机名称,由 /usr/sbin/tcpd 服务器决定。
- /etc/hosts.deny– 该文件描述了 /usr/sbin/tcpd 服务器决定不允许使用本地 INET 服务的主机名称。
- 如果 hosts.allow 和 hosts.deny 中都列出了相同的客户端/用户/IP,则 hosts.allow 优先,允许访问。如果客户端在 hosts.allow 中列出,则允许访问。如果客户端在 hosts.deny 中列出,则拒绝访问。
- tcpdchk和tcpdmatch命令——tcpd 的测试程序。
主机访问控制文件的语法(格式)
/etc/hosts.allow 和 /etc/hosts.deny 都使用以下格式:
daemon_list : client_list [ : shell_command ]
在哪里,
- daemon_list — 一个或多个守护进程名称的列表。
- client_list – 与客户端主机名或地址匹配的一个或多个主机名、主机地址、模式或通配符的列表。
通配符
访问控制语言支持显式通配符(引用自手册页):
ALL The universal wildcard, always matches. LOCAL Matches any host whose name does not contain a dot character. UNKNOWN Matches any user whose name is unknown, and matches any host whose name or address are unknown. This pattern should be used with care: host names may be unavailable due to temporary name server problems. A network address will be unavailable when the software cannot figure out what type of network it is talking to. KNOWN Matches any user whose name is known, and matches any host whose name and address are known. This pattern should be used with care: host names may be unavailable due to temporary name server problems. A network address will be unavailable when the soft- ware cannot figure out what type of network it is talking to. PARANOID Matches any host whose name does not match its address. When tcpd is built with -DPARANOID (default mode), it drops requests from such clients even before looking at the access control tables. Build without -DPARANOID when you want more control over such requests.
TCPD 配置示例
在此示例中,我将设置默认策略以拒绝访问。只有明确授权的主机才允许访问。更新 /etc/hosts.deny 文件如下:
# The default policy (no access) is implemented with a trivial deny file ALL: ALL
该ALL: ALL配置将拒绝向所有主机提供所有服务,除非允许文件中的条目允许它们访问。例如,通过 /etc/hosts.allow 文件允许访问,如下所示:
ALL: LOCAL @devels ALL: .example.net.in EXCEPT boobytrap.example.net.in
记录并拒绝访问(陷阱)——我们不允许来自 crackers.com 的连接:
ALL : .crackers.com \ : spawn (/bin/echo %a from %h attempted to access %d >> \ /var/log/connections.log) \ : deny
典型的 UNIX 示例
仅允许通过/etc/hosts.allow访问LAN内的各种服务:
popd : 192.168.1.200 192.168.1.104 imapd : 192.168.1.0/255.255.255.0 sendmail : 192.168.1.0/255.255.255.0 sshd : 192.168.1.2 172.16.23.12
通过 /etc/hosts.deny 拒绝所有内容:
ALL : ALL
拒绝所有连接
将非公共服务的所有连接限制为仅本地主机。假设 SSHD 和 FTPD 是必须远程访问的服务名称。编辑 /etc/hosts.allow。为 sshd 和 ftpd 添加以下行:
sshd ,ftpd : ALL ALL: localhost
保存并关闭文件。编辑 /etc/hosts.deny。添加以下行:
ALL: ALL
默认日志文件
TCP Wrappers 将根据您的 /etc/syslog.conf 文件通过 syslog 进行所有日志记录。下表列出了 TCP Wrappers 消息将出现的标准位置:
- AIX – /var/adm/messages
- HP-UX – /usr/spool/mqueue/syslog
- Linux – /var/log/messages
- FreeBSD / OpenBSD / NetBSD – /var/log/messages
- Mac OS X – /var/log/system.log
- Solaris – /var/log/syslog
使用以下命令查看日志:
# tail -f /path/to/log/file
# grep 'ip' /path/to/log/file
# egrep -i 'ip|hostname' /path/to/log/file
如何预测 TCP 包装器将如何处理特定的服务请求?
使用以下tcpdmatch命令预测 TCPD 将如何处理来自本地系统的 SSHD 请求:
tcpdmatch sshd localhost
相同的请求,假装主机名查找失败:
tcpdmatch sshd 192.168.1.5
预测当客户端名称与客户端地址不匹配时 TCPD 将执行的操作:
tcpdmatch sshd paranoid
将 sshd 替换为 in.telnetd、ftpd 等。您可以使用 inetd.conf 或 xinetd.conf 文件中指定的所有守护进程名称。
如何检查我的 TCP 包装器配置文件?
使用该tcpdchk命令检查您的 TCP Wrapper 配置并报告它能发现的所有潜在和实际问题。
tcpdchk
tcpdchk -v
关于 TCP 包装器和防火墙的说明
- 您需要使用防火墙和 tcpd 两者来对抗破解者。
- TCP Wrappers 最常用于匹配 IP 地址和主机级别保护。
- 切勿在防火墙主机上配置 TCP Wrappers。
- 在所有UNIX / Linux / BSD 工作站上放置 TCP 包装器。
- 不要在 TCP Wrappers规则中使用 NIS(YP)网络组。
- 将 TCP Wrappers 放在防火墙系统后面,因为 TCP Wrappers 不能替代 netfilter 或 pf 防火墙。
- TCP Wrappers 确实提供了更高的安全性,因为防火墙无法检查加密连接(读取为数据包)。
关于 TCP 包装器和防火墙的说明
- 您需要使用防火墙和 TCPD 两者来对抗破解者。
- TCP Wrappers 最常用于匹配 IP 地址和主机级别保护。
- 切勿在防火墙主机上配置 TCP Wrappers。
- 在所有 UNIX / Linux / BSD 工作站上放置 TCP 包装器。
- 不要在 TCP Wrappers 规则中使用 NIS(YP)网络组。
- 将 TCP Wrappers 置于防火墙系统后面,因为 TCP Wrappers 不能替代 Netfilter 或 PF 防火墙。
- TCP 包装器提供了更高的安全性,因为防火墙无法检查加密连接(读取为数据包)。
参考:
- 手册页 – tcpd(8)、tcpdchk(8)、tcpdmatch(8) 和 hosts_access(5)。
- HP-UX 的TCP Wrappers发行说明
- FreeBSD 操作系统下的TCP Wrappers配置。
- Red Hat Enterprise Linux / CentOS Linux 中的TCP Wrappers是什么?有哪些最佳实践和已知问题?
# John KH 要求的附加更正;VG 编辑 –日志#