DenyHosts教程:防暴力破解SSH密码
Posted 周先森爱吃素
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DenyHosts教程:防暴力破解SSH密码相关的知识,希望对你有一定的参考价值。
背景
此前服务器多次被恶意挖矿,我们通过下面的命令搜索SSH远程登录日志,发现攻击者的IP尝试登录了200多次,即暴力破解了被攻击用户的密码。通过询问该用户得知,设置的密码确实比较简单,为了防止后面被爆破所以考虑关闭密码访问,但又不是很方便,那么有没有工具能自动监控登录日志,并将登录失败次数过多的用户直接拉黑呢?
grep "Failed password for invalid user" /var/log/auth.log | awk 'print $13' | sort | uniq -c | sort -nr | more
还真有,DenyHosts就是这样一个基于Python开发的工具,它运行于Linux平台用于防止SSH暴力破解密码登录,它会自动分析SSHD服务的日志(Ubuntu的是/var/log/auth.log
文件)并维护一个黑名单,更多细节可以查询官网。
安装
需要注意的是,在安装这个软件之前建议先清理一下SSHD登录日志,因为这个软件会扫描历史日志,若它检测到你曾经登录失败的次数小于允许的次数,那么你也会被封禁。可以通过
cat /dev/null > /var/log/auth.log
命令来清理日志文件,清理后请重启日志服务,也就是service rsyslog restart
。上述命令和后续命令均需要root用户来处理,如不是root用户则命令之前需要使用sudo
来使用管理员权限。
在Ubuntu下,安装DenyHosts相对比较简单,也不需要采用源码安装的方式,直接通过apt就可以安装,具体命令如下。
apt-get update
apt-get install denyhosts
service denyhosts status
安装后服务会自动运行,应当会看到如下的运行状态。
然后就是服务的配置了,服务的配置文件为/etc/denyhosts.conf
,整个程序的工作目录为/var/lib/denyhosts/
,程序禁用的IP列表则在黑名单文件/etc/hosts.deny
中。
配置文件中需要重点关注下面几项。
SECURE_LOG = /var/log/auth.log # sshd日志文件
HOSTS_DENY = /etc/hosts.deny # 黑名单文件
PURGE_DENY = 3d # 过多久后清除已经禁止的,空代表永不解禁 其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟
BLOCK_SERVICE = sshd # 阻止服务名
DENY_THRESHOLD_INVALID = 5 # 允许无效用户(在/etc/passwd未列出)登录失败次数,允许无效用户登录失败的次数.
DENY_THRESHOLD_VALID = 5 # 允许普通用户登录失败的次数
DENY_THRESHOLD_ROOT = 5 # 允许root登录失败的次数
修改配置文件后需要重启服务,对应的命令如下。
service denyhosts restart
若想要卸载DenyHosts则使用下面的命令。
service denyhosts stop
apt-get purge denyhosts
解封
由于我在服务器上使用了frp进行内网穿透,导致127.0.0.1
这个IP被封,我无法使用frp服务了。在卸载DenyHosts无效后,发现依然无法访问,那大概知道是系统级别的禁用IP了,此是可以通过下面的命令来解封。
IP=输入想要解封的IP
service denyhosts stop
sed -i "/$IP/d" /etc/hosts.deny
sed -i "/$IP/d" /var/lib/denyhosts/hosts-valid
sed -i "/$IP/d" /var/lib/denyhosts/users-hosts
sed -i "/$IP/d" /var/lib/denyhosts/hosts
sed -i "/$IP/d" /var/lib/denyhosts/hosts-root
sed -i "/$IP/d" /var/lib/denyhosts/hosts-restricted
iptables -D INPUT -s $IP -j DROP
总结
DenyHosts是非常非常实用的防SSH暴力破解密码的一个工具,为了防止挖矿,可以安装使用它。
以上是关于DenyHosts教程:防暴力破解SSH密码的主要内容,如果未能解决你的问题,请参考以下文章