/etc/hosts.allow 及 /etc/hosts.deny关系(转http://www.blogchinese.com/50989/viewspace-1077409)

来源:互联网 发布:linux 文件名后面 号 编辑:程序博客网 时间:2024/05/01 08:06

/etc/hosts.allow 及 /etc/hosts.deny关系

上一篇 / 下一篇  2008-04-02 10:50:00 / 个人分类:linux学习

查看( 158 ) / 评论( 0 ) / 评分( 0 / 0 )
他们两个的关系为:/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 @test root]# vi /etc/hosts.allow
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 @test root]# vi /etc/hosts.deny
telnetd: ALL : deny 
那个 ALL 代表『全部』的意思!呵呵!很棒吧!那么有没有更安全的设定,例如,当当有其它人扫瞄我的 telnet port 时,我就
将他的 IP 记住!以做为未来的查询与认证之用!那么你可以将 /etc/hosts.deny 这个档案改成这个样子: 
[root @test root]# 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 等程序,所以无法执行相关的功能,这点还请多加注意呢!)

 

etc/hosts.allow和/etc/hosts.deny

这两个文件是tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。这两个配置文件的格式如下:

#服务进程名:主机列表:当规则匹配时可选的命令操作server_name:hosts-list[:command]

/etc/hosts.allow控制可以访问本机的IP地址,/etc/hosts.deny控制禁止访问本机的IP。如果两个文件的配置有冲突,以/etc/hosts.deny为准。下面是一个/etc/hosts.allow的示例:

ALL:127.0.0.1         #允许本机访问本机所有服务进程smbd:192.168.0.0/255.255.255.0     #允许192.168.0.网段的IP访问smbd服务

192.168.6.100代表一个主机,192.168.6.代表整个网段。同理,ringkee.com代表一台主机,.ringkee.com代表ringkee.com域内的所有主机。

ALL关键字匹配所有情况,EXCEPT匹配除了某些项之外的情况,PARANOID匹配你想控制的IP地址和它的域名不匹配时(域名伪装)的情况。KNOWN关健字匹配一台名字和地址(通过各种名字解析服务)已知的主机。LOCAL匹配任何一个不包含"."字符的主机名。我们应该尽量使用IP地址,因为主机名或域名会出现名称解析出错的问题,从而造成匹配失效。

tcpdchk程序可用于检查这两个配置文档是否有错,因为tcpd依赖许多配置文档(/etc/services,/etc/inetd.conf,/etc/hosts.allow和/etc/hosts.deny),并且要求这些文档中的相关信息必须一致。有了tcpdchk,就可帮我们自动检查。还有一个有用的工具叫tcpdmatch,它可以模拟一个进入的连接,测试tcpd的行为。

通过spawn选项,我们还可以根据匹配情况执行各种命令。如发邮件或记录日志等。下面是一个示例:

ALL:ALL : spawn (/bin/echo Security Alter from %a on %d on `date`| /tee -a /var/log/Security_alter | mail jims.yang@gmail.com)
原创粉丝点击