LibWrap

http://www.centos.org/docs/5/html/5.2/Deployment_Guide/s1-tcpwrappers-purpose.html

http://www.lvtao.net/html/2152.html

 

 

TCP Wrappers 是个服务程序安全增强工具,它提供 IP 层存取过滤控制,扩展了 inetd (xinetd ) 对服务程序的控制能力,其作用相当于给 xinetd 增加了一道防火墙(不只支持 Xintd 所管理的服务),虽然如此,但不能视为好的防火墙的替代品,而是结合防火墙或其他的安全设施一起使用,为系统提供多一层的安全防护,如下图所示:
[attachment=404]

在配置 TCP Wrappers 之前,要确定服务是否对其支持,通常 ssh, ftp, sendmail, nfs, telnet, authd 等这些服务都是支持 TCP Wrappers 。这里,我们可以用 ldd 命令来查看服务程序是否使用了 libwrap.so 这个动态链接库,如果包含那么表示该服务支持 TCP Wrappers,否则不支持。比如:

# ldd /usr/sbin/sshd |grep libwrap
    libwrap.so.0 => /lib/libwrap.so.0 (0x002b1000)


反过来,我们也可以通过查询 RPM 数据库(RH/CentOS 发行版)来获取使用到 libwrap.so.0 这个动态库的软件包列表,如:

# rpm -q --whatrequires libwrap.so.0
tcp_wrappers-7.6-40.7.el5
sendmail-8.13.8-8.el5
conman-0.1.9.2-8.el5
stunnel-4.15-2.el5.1
audit-1.7.18-2.el5
openssh-server-4.3p2-72.el5
quota-3.13-4.el5
nfs-utils-1.0.9-50.el5


配置 TCP Wrappers 有两个文件:/etc/hosts.allow 和 /etc/hosts.deny ,通过这两个文件配置规则以允许或阻止指定客户端对指定服务的访问,修改并保存文件后无需重新启动服务就能立即生效。配置规则以下面的顺序读取:
(1) 如果 /etc/hosts.allow 文件中明确允许访问的,那么授予访问权。
(2) 如果 /etc/hosts.deny 文件中明确拒绝访问的,那么不允许启动服务。
(3) 如果两个文件中都没有发现的计算机或 IP 地址,那么自动授权访问,xinetd 服务启动。
(4) 如果两个文件中都有同样的计算机或 IP 地址,则以 /etc/hosts.allow 中的规则为准。

在上面两个配置文件中规则的定义方法使用下面格式:

daemon: client: spawn: command

如上,当指定一个服务器守护进程时,可以把它和一组主机或 IP 地址关联起来,当发现匹配时,可以触发一个命令,如给用户显示一条消息,或在日志文件中生成一条记录。

下面我们来做一个简单的实验:
1. 在 IP 地址为 173.242.117.244 这台主机的 /etc/hosts.deny 增加一条规则:

sshd: 184.22.140.27: spawn echo "SSH Security Alert" > /tmp/alert.txt

上面,我们禁止了 184.22.140.27 这个 IP 连接 SSHD 服务,如果连接,那么就用 spawn 命令运行 echo 命令,输出一条信息到 /tmp/alert.txt 中。

2. 在 184.22.140.27 这台主机上尝试连接,会看到拒绝的提示:

# ssh 173.242.117.244
ssh_exchange_identification: Connection closed by remote host


3. 然后回头看  173.242.117.244 这台主机上是否生成了 alert.txt 这个文件:

# cat /tmp/alert.txt
SSH Security Alert

可见也是生成了的。

需要注意的是,指定的 daemon 是守护进程的名称,而不是程序的名称,比如指定的是 sshd 而不是 ssh 。

如果是超级服务那么必须指定超级服务的启动脚本名称(可在 /etc/xinetd.d/ 下找到,默认情况下),比如需要控制 klogin 时,在相应的文件是/etc/xinetd.d/klogin 中可以看到:

# cat /etc/xinetd.d/klogin
# default: off
# description: The kerberized rlogin server accepts BSD-style rlogin sessions, \
#              but uses Kerberos 5 authentication.
service klogin
{
    flags        = REUSE
    socket_type    = stream       
    wait        = no
    user        = root
    server        = /usr/kerberos/sbin/klogind
    server_args    = -5
    disable        = yes
}

其中 klogind 就是其服务名称。

指定 client 客户端的方法,下面是一些示例:

192.168.3.20             指定单个 IP 地址
192.168.3.                 指定 192.168.3.0/24 这个网段
192.168.3.0/255.255.255.0    指定 192.168.3.0/24 这个网段
bbs.groad.net                 指定 FQDN,此处表示 FQDN 为 bbs.groad.net 这个主机
.groad.net                       指定 DNS 后缀为 .groad.net 的主机
ALL                                 指定所有客户端
EXCEPT                          规则的例外
KNOWN                           已知计算机,如在 DNS 或 /etc/hosts 中列出的主机名
LOCAL                            包含单个主机名的计算机;名称不能包括句点
PARANOID                      主机名或 FQDN 不匹配 IP 地址的计算机
UNKNOWN                       不包括在 /etc/hosts 或 DNS 服务器中的计算机


比如我们在 /etc/hosts.deny 中写入以下规则:

sshd:ALL EXCEPT 184.22.140.27

那么表示除了 184.22.140.27 这台主机可以访问该台主机的 SSHD 服务外,其它的计算机一律拒绝。

此外,TCP Wrappers 还有几个常见的变量名,它们都以 % 开头,当将它们用在 spawn 后面所带的命令上时是比较方便的:


%c             访问的客户端信息 (user@host)
%s             访问的服务器端信息 (server@host)
%h             访问的客户端的 FQDN (如果可以 DNS 反向解析)
%p             服务器 PID

比如像下面的命令规则:

sshd:ALL:spawn (/bin/echo %a from %h attempted to access %d >> /var/log/example):deny

 

 

--------------------------------------------------------------------------------------------------

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=445215

 

http://www.mike.org.cn/articles/description-configure-pkg-config-pkg_config_path-of-the-relations-between/

http://www.codelast.com/?p=1101 

posted @ 2012-06-30 20:42  规格严格-功夫到家  阅读(2418)  评论(0编辑  收藏  举报