TCP_Wrappers

来源:互联网 发布:mac内置音频剪辑 编辑:程序博客网 时间:2024/06/06 12:25

TCP_Wrappers

好了,接着下来我们要来说一说,除了 xinetd 之外,还有另一个可以抵挡利用某些服务进入Linux 主机的方法,那就是常常使用的 /etc/hosts.allow 与 /etc/hosts.deny啰!这个方式是我们常常在使用的方法,这里先提几个比较简单的设定方式!注:TCP_Wrappers 也可以当成一个最内层的防火墙了,因为是最内层,所以当然要设定的比较严格啰!
 
为什么叫做 TCP_Wrappers 呢?那么 wrappers 有包裹的意思,所以说,这个套件本身的功能就是在分析TCP 网络数据封包啦!那么刚刚我们稍微提到我们网络的封包数据主要是以 TCP封包为主,这个 TCP 封包的文件头至少记录了来源与目主机的 IP 与 port ,因此,若藉由分析TCP 封包,就可以比对看我要不要让这个数据进入到主机里面来啰!所以啦,我们要使用TCP_Wrappers 来控管的,就是
  1. 来源 IP
  2. port (就是服务啦)
TCP_Wrappers 设定 TCP 封包是否可以进入的设定档在 /etc/hosts.allow 与 /etc/hosts.deny当中。因此,基本上,如果一个服务是受到 xinetd 或 TCP_Wrappers 的控制时,那么该服务就会受限于hosts.allow 与 hosts.deny 的管理了!而如果你自己安装的套件当中( 亦即使用Tarball 安装的方式之套件 ),除非有自行定义支持 TCP_Wrappers 的功能 ,否则就无法使用这个玩意啰!嘿嘿!
 
那么这两个档案是干嘛用的?刚刚不是提过哪!他主要是用来规范 TCP 封包的规则的,所以呢,里面记录的当然就是:『某些IP 在特定服务中是否能够进入主机』!那么要怎么写?这两个档案的内容基本的语法是:
 <service>: <IP, domain, hostname...> : <allow|deny>
所以我们要先找出来那个 service_name 才行,例如以我们刚刚的 telnet 为例,那个service_name 是什么呢?其实指的就是上表中 server 这个设定后面接的程序名称啦!所以,telnet 在 Mandrake 底下的名称为 telnetd ( 注意,在其它的 distribution 中,这个名称可能会变,例如Red Hat 或 OpenLinux 都是以 in.telnetd 为名!所以这里请参考您的系统里面的设定而定!)。因此,如果你不想让 140.116.44.202 这个地址及 140.116.32.0/255.255.255.0这个 C class 的网域进入你的主机的话,那么可以这样在 /etc/hosts.deny 里面设定:
 [root @testroot]# vi /etc/hosts.deny
telnetd: 140.116.44.202 : deny
telnetd: 140.116.32.0/255.255.255.0 : deny
这样一来,对方就无法以 telnet 进入你的主机啦!方便吧!不过,既然如此,为什么要设定成/etc/hosts.allow 及 /etc/hosts.deny 两个档案呢?呵呵!基本上,他们两个的关系为:
  1. 当档案 /etc/hosts.allow 存在时,则先以此档案内之设定为准;
  2. 而在 /etc/hosts.allow 没有规定到的事项,将在/etc/hosts.deny 当中继续设定!
也就是说, /etc/hosts.allow 的设定优先于 /etc/hosts.deny 啰!了解了吗?基本上,只要hosts.allow 也就够了,因为我们可以将 allow 与 deny 都写在同一个档案内,只是这样一来似乎显得有点杂乱无章,因此,通常我们都是:
  1. 允许进入的写在 /etc/hosts.allow当中;
  2. 不许进入的则写在 /etc/hosts.deny当中。
 再强调一次,那个 service_name 『必需』跟你的 xinetd 或者是 /etc/rc.d/init.d/*里面的程序名称要相同。好了,我们还是以 telnet 为例子来说明好了,现在假设一个比较安全的流程来设定,就是:
  1. 只允许 140.116.44.0/255.255.255.0与 140.116.79.0/255.255.255.0 这两个网域,及 140.116.141.99 这个主机可以进入我们的telnet 服务器;
  2. 此外,其它的 IP 全部都挡掉!
这样则首先可以设定 /etc/hosts.allow 这个档案成为:
 [root @testroot]# vi /etc/hosts.allo
telnetd: 140.116.44.0/255.255.255.0 : allow
telnetd: 140.116.79.0/255.255.255.0 : allow
telnetd: 140.116.141.99            : allow
再来,设定 /etc/hosts.deny 成为『全部都挡掉』的状态:
 [root @testroot]# vi /etc/hosts.deny
telnetd: ALL     : deny
那个 ALL 代表『全部』的意思!呵呵!很棒吧!那么有没有更安全的设定,例如,当当有其它人扫瞄我的telnet port 时,我就将他的 IP 记住!以做为未来的查询与认证之用!那么你可以将/etc/hosts.deny 这个档案改成这个样子:
 [root @testroot]# vi /etc/hosts.deny
telnetd: ALL: spawn (echo Security notice from host `/bin/hostname`; /
echo; /usr/sbin/safe_finger@%h ) | /
/bin/mail -s"%d-%h security" root& /
: twist ( /bin/echo-e "/n/nWARNING connection not allowed. Your attempt has been logged. /n/n/n警告您尚未允许登入,您的联机将会被纪录,并且作为以后的参考/n/n". )
在上面的例子中,黄色字体字『 root 』,可以写成你的个人账号或者其它e-mail ,以免很少以 root 身份登入 Linux 主机时,容易造成不知道的情况,另外,最后几行,亦即:twist 之后的那几行为同一行。如此一来,当未经允许的计算机尝试登入你的主机时,对方的屏幕上就会显示上面的最后一行,并且将他的IP 寄到 root (或者是你自己的信箱)那里去!(注:某些没有安装 tcp_wrappers的套件之 distribution 中,由于没有 safe_finger 等程序,所以无法执行相关的功能,这点还请多加注意呢!)
原创粉丝点击