说穿了, TCP wrappers 就是透过 /etc/hosts.allow, /etc/hosts.deny 这两个宝贝蛋来管理的一个类似防火墙的机制, 但并非所有的软件都可以透过这两个档案来控管,只有底下的软件才能够透过这两个档案来管理防火墙规则,分别是:

    • 由 super daemon (xinetd) 所管理的服务;

    例题:请查出你的系统有没有安装 xinetd ,若没有请安装。安装完毕后,请查询 xinetd 管理的服务有哪些?答:

    上述结果最终输出的部分就是 xinetd 所管理的服务群啰!上述的服务之防火墙简易设定,都可以透过 TCP wrappers 来管理的噜!

    上述的结果中,在该档名档下有出现 libwrap 的,代表有找到该函式库,才有支持 tcp wrappers。 所以, sshd, xinetd 有支持,但是 rsyslogd, httpd 这两支程序则不支持。也就是说, httpd 与 rsyslogd 不能够使用 /etc/hosts.{allow|deny} 来进行防火墙机制的控管。


    9.2.2 /etc/hosts.{allow|deny} 的设定方式

    那如何透过这两个档案来抵挡有问题的 IP 来源呢?这两个档案的语法都一样,很简单的:

    我们知道防火墙的规则都是有顺序的,那这两个档案与规则的顺序优先是怎样呢?基本上是这样的:

    • 先以 /etc/hosts.allow 为优先比对,该规则符合就予以放行;
    • 若不在这两个档案内,亦即规则都不符合,最终则予以放行。
      我们拿 rsync 这个 xinetd 管理的服务来进行说明好了,请参考底下的例题吧:

    因此程序字段的项目要写的是 rsync 喔!因此,我们应该要这样设定的:

    上面的例题有几个重点,首先, tcp wrappers 理论上不支持 192.168.1.0/24 这种透过 bit 数值来定义的网域, 只支持 netmask 的地址显示方式。另外,如果有多个网域或者是单一来源,可以透过空格来累加。 如果想要写成多行呢?也可以啊!多写几行『 kshd: IP 』的方式也可以,不必要将所有数据集中在一行啦!因为 tcp wrappers 也是一条一条规则比对嘛!

    基本上,你只要理解这些数据即可!因为绝大部分的时刻,我们都会建议使用底下介绍的 Netfilter 的机制来抵挡封包。 那让我们准备开始来玩玩 iptables 封包过滤防火墙吧!