目前企业开源系统的运行保障是业界关注的热点,如何保证开源系统高效、可靠的运行是非常重要的技术问题。本文将详细介绍如何使用TCP wrappers来保障企业系统服务安全。
使用TCP Wrappers进行保障
1、主要功能
TCP wrappers作为客户端/服务器模型的一部分,以/etc/hosts.allow和/etc/hosts.deny文件作为其简单访问控制列表(ACL)的基础,可用于与libwrap挂钩的任何守护进程。此访问控制语言定义的规则为:基于客户端的地址和客户端尝试访问的守护进程,选择性地允许客户端访问服务器守护程序。ldd的输出显示sshd依赖的共享库之一是libwrap:
$ ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib/libwrap.so.0 (0×00e7c000)
2、使用hosts.allow和hosts.deny
hosts.allow和hosts.deny文件中的每一行的格式如下:
daemon_list : client_list [: command]
其中daemon_list是一个以逗号分隔的一个或多个服务器守护进程(如rpcbind、vsftpd、sshd)的列表,client_list是一个以逗号分隔的一个或多个客户端的列表,可选的command是当client_list中的一个客户端试图访问daemon_lis t中的一个服务器守护进程时,要执行的命令。
当客户端请求连接到服务器时,按照下面的顺序查阅服务器系统上的hosts.allow和hosts.deny文件,直到找到一个匹配项:
如果守护进程/客户端对匹配hosts.allow中的一行,授予访问权限。
如果守护进程/客户端对匹配hosts. deny中的一行,访问被拒绝。
如果在hosts.allow或hosts.deny中都没有匹配项,授予访问权限。
第一个匹配决定是否允许客户端访问服务器。当hosts.allow或hosts.deny中都不存在时,该文件好像是空的。通过删除这两个文件,可以允许所有客户端访问所有守护进程,但不建议这样做。
要开放一个本地系统以从远程系统访问时,请遵循这些准则:
只对你要允许访问它的系统开放本地系统。
只允许每个远程系统访问你要它访问的数据。
只允许每个远程系统以适当的方式(只读、读/写、只写)访问数据。
3、具体例子
为了一个更安全的系统,把以下行放入hosts.deny中以阻止所有访问:
$ cat /etc/hosts.deny
…
ALL : ALL : echo ‘%c tried to connect to %d and was blocked’ >> /var/log/tcpwrappers.log
此行可以防止任何客户端连接到任何服务,除非在hosts.allow中专门允许的连接。当匹配这条规则时,它向/var/log/tcpwrappers.log文件中添加一行。%c扩展到客户端信息,以及%d扩展到客户端试图连接的守护进程名称。
也可以在hosts.allow中包括行,以明确允许访问某些服务和系统。例如,下面的hosts.allow文件允许任何客户端连接到OpenSSH守护进程(ssh、scp、sftp),但只允许来自本地系统网络和192.168. 子网用户的telnet连接:
$ cat /etc/hosts.allow
sshd: ALL
in.telnet: LOCAL
in.telnet: 192.168.* 127.0.0.1
…
第一行允许从任何系统(ALL)连接到sshd。第二行允许与该服务器(LOCAL)在同一个域的任何系统的连接。第三行匹配其IP地址始自192.168.的任何系统以及本地系统。
转载请注明:IT运维空间 » 安全防护 » 如何保障企业系统服务安全
发表评论