Ubuntu SSH登录防暴力密码破解

发布于 2023-01-03  90 次阅读


总有些很闲的傻逼扫服务器端口,然后进行暴力密码破解试图登录服务器。在谷歌一搜教程全是教你登录失败锁定账户的,设置普通用户和根用户连续错误登陆的最大次数,超过最大次数,则锁定该用户?

连续输入错误,再输入正确密码时,再配置项锁定时间内,输入正确密码也无法登录?

这不是作茧自缚吗?我需要的是封锁IP!不是封锁账户!

来看一下你的服务器收到的失败登录记录。

sudo lastb |awk '{print $3}'|sort |uniq -c
1 159.65.205.178
3 165.22.14.77
2 203.229.206.26
1 43.153.29.50
1 72.74.18.230
4 92.255.85.115

注意看如果有超过1000次的连接,则需要格外注意可能有人在试图使用暴力密码破解。

查看最近20次的失败登录记录。看这个用户名是在跑字典。

sudo lastb -n 20
es ssh:notty 142.93.150.113 Mon Dec 5 21:32 - 21:32 (00:00)
es ssh:notty 142.93.150.113 Mon Dec 5 21:32 - 21:32 (00:00)
root ssh:notty 43.153.29.50 Mon Dec 5 21:32 - 21:32 (00:00)
nagios ssh:notty 103.72.144.63 Mon Dec 5 21:32 - 21:32 (00:00)
nagios ssh:notty 103.72.144.63 Mon Dec 5 21:31 - 21:31 (00:00)
openkm ssh:notty 159.65.205.178 Mon Dec 5 21:31 - 21:31 (00:00)
openkm ssh:notty 159.65.205.178 Mon Dec 5 21:31 - 21:31 (00:00)
common ssh:notty 190.216.236.62 Mon Dec 5 21:30 - 21:30 (00:00)
common ssh:notty 190.216.236.62 Mon Dec 5 21:30 - 21:30 (00:00)
aa ssh:notty 43.153.29.50 Mon Dec 5 21:29 - 21:29 (00:00)

现在来写脚本,此脚本可以自动把失败次数超过 10次的IP拉入黑名单,并清空失败记录,防止脚本下次执行重复统计IP。你可以自行选择脚本路径。

请注意!如果你也失败了 10次,你的IP也会进入黑名单!

先把始终允许的IP填入 /etc/hosts.allow,这很重要!比如:

vi /etc/hosts.allow
sshd:147.64.14.125:allow #添加你的IP

选择你的脚本路径:

vi /usr/local/bin/secure_ssh.sh

以下是脚本内容:

#!/bin/bash
list=$(sudo lastb |awk '{print $3}'|sort |uniq -c|awk '{if ($1 > 10) print $2}')
for ip in ${list}
do
echo ALL: ${ip} >> /etc/hosts.deny #加入黑名单
echo > /var/log/btmp #清空失败记录,防止脚本下次执行重复统计IP
done

加入计划任务,每1分钟执行一次。

crontab -e
*/1 * * * * sudo bash /usr/local/bin/secure_ssh.sh #脚本路径

查看拉黑IP列表:

cat /etc/hosts.deny
ALL: 106.13.11.119
ALL: 106.75.233.124
ALL: 107.189.1.155
ALL: 110.81.239.151
ALL: 112.111.16.92
ALL: 117.1.29.242
ALL: 117.251.85.118
ALL: 120.199.82.50
ALL: 120.48.120.83
ALL: 125.229.136.143

这是有失败登录但是暂时未到 10次的IP记录。脚本会清空失败记录。通过拉黑就没剩下几条了。

sudo lastb |awk '{print $3}'|sort |uniq -c
1 159.65.205.178
3 165.22.14.77
2 203.229.206.26
1 43.153.29.50
1 72.74.18.230
4 92.255.85.115