TCP包装器是基于主机的访问控制系统。它们用于通过仅允许特定客户端访问服务器上运行的服务来防止对服务器的未授权访问。
TCP包装器在您的服务器和任何潜在的攻击者之间创建了一层额外的安全性。除访问控制功能外,它们还提供日志记录和主机名验证。TCP包装器将在大多数基于Linux和UNIX的操作系统上开箱即用,这使得它们易于设置,并且是对现有防火墙实现的完美补充。
并非所有服务都支持TCP包装器。必须使用libwrap
库编译服务。公共服务,如sshd
,ftpd
和telnet
默认支持TCP包装。我们可以检查服务是否支持TCP包装:
ldd /path-to-daemon | grep libwrap.so
该命令ldd
打印可执行文件的共享依赖项列表。通过管道输出lld
到grep
,我们正在搜索返回的列表libwrap.so
。如果此命令有任何输出,我们可以假设支持TCP包装器。
例如,如果我们想ssh
在服务器上测试守护进程,我们必须首先找到它的二进制文件:
whereis sshd
您很可能会得到多个结果:
sshd: /usr/sbin/sshd /usr/share/man/man8/sshd.8.gz
文件位于/usr/bin
并且/usr/sbin
很可能是您要查找的可执行文件。现在我们知道要检查libwrap
依赖项的文件:
ldd /usr/sbin/sshd | grep libwrap.so
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007ff363c01000)
TCP包装器依赖于两个文件才能工作:/etc/hosts.allow
和/etc/hosts.deny
。如果这些文件尚不存在,请创建它们:
touch /etc/hosts.{allow,deny}
您可以使用任何您喜欢的文本编辑器编辑hosts.allow和hosts.deny。hosts.deny
在首选文本编辑器中打开该文件。如果你从未打开过hosts.deny,它会看起来像这样:
的/etc/hosts.deny
1 2 3 4 5 6 7 8 9 10 11 12 13 | # # 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 # |
---|
规则可以添加到此文件中。hosts.deny规则必须按特定顺序插入,如果应用更高规则,则将忽略文件中较低的规则。规则还具有您必须遵守的特定语法。规则如下所示:
daemons : hostnames/IPs
在冒号的左侧,输入以空格分隔的守护程序列表(守护程序只是在后台运行的进程。例如,sshd
是SSH的守护程序)。在冒号的右侧,放置一个以空格分隔的主机名,IP地址和规则适用的通配符列表。
此示例hosts.deny文件将阻止所有进程中的所有客户端。
ALL : ALL
我们可以用这样的句子来表达这个规则,“拒绝所有客户端访问所有守护进程”。无论来源如何,此规则都将拒绝服务器的所有流量。不推荐使用此规则,因为除了LISH之外,它将拒绝您访问自己的服务器。
在规则的hosts.allow文件中有比规定更高的优先级hosts.deny的文件。这允许我们使用hosts.allow文件为我们的拒绝规则创建例外。
123.45.67.89
为您希望允许的IP:
sshd : 123.45.67.89
保存文件时,规则将自动生效。TCP包装器具有通配符,允许您创建不限于某些IP地址或主机名的宽泛规则。您可以使用的通配符是ALL,LOCAL,UNKNOWN,KNOWN和PARANOID。
以下是每个通配符的含义:
.
)的主机名。TCP包装器将根据/etc/syslog.conf
文件中的设置记录连接。这些日志文件的默认位置是/var/log/messages
日志文件。