之前有篇文章讲述了linux服务器的安装增强(http://blog.csdn.net/cracker_zhou/article/details/50392594)。在大牛看来这或许不够专业但是我会不断的好好学习,向大牛看起。让csdn的每篇blog见证我的成长。今天主要要讲的是/etc/hosts.deny文件。
1.TCP Wrappers
TCP Wrappers使用访问控制列表 (ACL) 提供防止主机名和主机地址欺骗的保护,依赖/etc/hosts.allow和/etc/hosts.deny文件作为简单访问控制语言的基础,可用于任何包含了libwrap.so的daemon程序使用。简单的说就是如果某个服务包含了libwrap.so就可以使用hosts.allow和hosts.deny里面的规则来控制哪些主机能(或者不能)访问某些服务。
当某个包含TCP wrappers的服务接收到来自客户端的请求时,将首先经历以下两个步骤:
①.根据顺序依次检查ip地址是否在hosts.allow的白名单中,如果存在且设置的放行规则是allow,则通过TCP Wrappers保护,真正进行相关服务的连接操作。
②.如果在hosts.allow中没有相关规则则检查hosts.deny文件。如果在hosts.deny的规则中,则直接拒绝对该服务的连接请求。
需要特殊说明的是:
①.hosts.allow和hosts.deny文件中的规则是非常讲究顺序的。同样的hosts.allow和hosts.deny中规则,以由上到下,由hosts.allow到hosts.deny的顺序依次匹配,当在两个文件中都没有匹配到控制规则或者这两个文件不存在时,默认规则是允许。
②.TCP wrapped不会缓存hosts.allow和hosts.deny中的规则,所以针对hosts.allow和hosts.deny中规则的更改是立即生效的。
2. hosts.allow和hosts.deny的语法
hosts.allow和hosts.deny规则的语法是一样的,均由 服务名称:ip地址:allow/deny 组成,且每行只写一条规则。
#以#打头的规则是注释,
sshd:192.168.0.1:allow
vsftpd:192.168.0.0/24:deny
ALL:192.168.0.0/255.255.254.0
第一行是注释,第二行表示允许接受来自192.168.0.1的ssh连接请求,第三行表示不允许192.168.0.1-192.168.0.254这个ip段的ftp请求。第三行规则省略了默认规则,所以如果该规则写在hosts.allow文件中,则表示允许192.168.0.0/255.255.254.0中所有ip地址对所有服务的访问。如果写在hosts.deny中,则表示拒绝192.168.0.0/255.255.254.0中所有ip地址对所有服务的访问。
3.通过tcp wrappers增强sshd的安全性
根据ldd命令可以检查当前编译的sshd是否支持tcp wrapper: ldd `which sshd` | grep libwrap
从openssh6.7开始,官方移除了对tcp wrappers的支持。所以如果各位看官如果需要使用tcp wrappers增强对sshd的安全性,那么可以要么使用openssh6.6及以下版本,或者使用国外大牛补丁重新编译。这里提供一份自动编译脚本:http://download.csdn.net/detail/cracker_zhou/9458110(免积分)如果各位看官需要自己编译openssh6.6及以下版本,记得编译时加上--with-tcp-wrappers
选项。
4.计划任务获取在线hosts.deny
在这里推荐一个由东大提供的在线hosts.deny,更新速度很快。
http://antivirus.neu.edu.cn/ssh/lists/neu_sshbl_hosts.deny
写一个小脚本,自动获取该hosts.deny并覆盖到系统的/etc/hosts.deny,更改root用户的crontab,每隔1个小时更新一次hosts.deny文件。
至此,TCP Wrappers及其应用就讲完了,有问题欢迎在下面留言。