《Linux系统安全:纵深防御、安全扫描与入侵检测 》 —2.5 利用DenyHosts防止暴力破解
2.5 利用DenyHosts防止暴力破解
在2.2节和2.4节我们介绍了使用iptables和TCP Wrappers来进行访问控制的方案。以上的措施,全部基于白名单机制,对于没有固定来源IP地址但又需要进行防护的场景来说,使用DenyHosts来防止暴力破解是一种非常有效的措施。
DenyHosts由Phil Schwartz编写,其官方网站是http://denyhosts.sourceforge.net。
DenyHosts是使用Python开发的,它通过监控系统安全日志(例如,/var/log/secure)来分析是否存在对OpenSSH的暴力破解行为。如发现暴力破解,则其从该系统安全日志中分析出来源IP地址,然后通过在/etc/hosts.deny中加入相应的条目来使用TCP Wrappers禁止该IP地址的后续连接尝试。
DenyHosts的安装和启动脚本如代码清单2-3所示。
代码清单2-3 DenyHosts的安装和启动脚本
下面我们来看看DenyHosts的几个核心配置片段(文件/usr/share/denyhosts/denyhosts.cfg)。
SECURE_LOG:指定系统安全日志的位置,在CentOS和Redhat系统中设为/var/log/secure。
HOSTS_DENY:检测到暴力破解后,指定在哪个文件中添加相应的恶意IP并禁止,在CentOS和Redhat系统中设为/etc/hosts.deny。
BLOCK_SERVICE:检测到暴力破解后,指定封停来源IP访问哪些服务,可以指定sshd或者ALL(即封停来源IP访问任何使用了libwrap的服务程序)。
DENY_THRESHOLD_INVALID:对于在/etc/passwd不存在的用户名的暴力尝试,指定发现多少次以后封停,这个值使用默认的5即可。
DENY_THRESHOLD_VALID:对于在/etc/passwd存在的用户名(除root外)的暴力尝试,指定发现多少次以后封停。建议适当调大这个值(如设置为20),以避免合法用户自己输错密码导致的无法继续登录。
DENY_THRESHOLD_ROOT:对于root账户的暴力尝试,指定发现多少次以后封停。建议适当调大这个值(如设置为10),以避免合法root用户自己输错密码导致的无法继续登录。
HOSTNAME_LOOKUP:指定是否启用来源IP到完整域名(Fully Qualified Domain Name,FQDN)的解析,建议设置为NO,以节省服务器尝试反向解析的开销。
在安装和启动了DenyHosts以后,我们可以通过/etc/hosts.deny来查看效果。一般情况下,在较短的时间内就可以发现其已经封停了大量的暴力破解尝试。由此,也可以看出,互联网上时时刻刻存在着风险,总有一些不怀好意的人利用工具来发现可能的“猎物”。
以下是实际生产中抓到的一些恶意IP地址来源,我们可以看到,DenyHosts在记录该IP地址的同时记录了其添加到系统访问控制列表的时间:
# DenyHosts: Thu Dec 6 14:44:33 2018 | sshd: 177.114.90.32
sshd: 177.114.90.32
# DenyHosts: Thu Dec 6 14:44:33 2018 | sshd: 171.11.231.58
sshd: 171.11.231.58
# DenyHosts: Thu Dec 6 14:44:33 2018 | sshd: 193.112.128.197
sshd: 193.112.128.197
- 点赞
- 收藏
- 关注作者
评论(0)