photo_2021-12-01_22-42-18.jpg

P.S. 为保万一,建议大家为服务器安装 2FA 两步认证,即便黑客有密码,最终也会因无法绕过2FA而失败;

I. 本文示例背景

服务器系统:Ubuntu server;
系统日志存放路径:/var/log/;
日志名称:/var/log/auth.log;

中心思路

通过提取并分析 auth.log 日志中涉及登录失误的日志部分(内容通常含 failed(如认证失败) 、invalid(如用户名无效),... 我想,防爆力破解软件 - Fail2Ban 就是根据这个命名的。),然后得到一串串尝试登陆却失败的IP,如果它尝试超过3次却都失败了,那我们就把它送进黑名单(Ubuntu 下为 hosts.deny ),这样,它就无法继续尝试任何破解登录了;系统拒绝有关于它的任何登录认证请求,refuse... 之所以防暴力,就是让它无法付诸暴力;

最后,做好日志清理;所有登录都会产生日志,存放在 auth.log(以Ubuntu举例),登录尝试太频繁的话,日志文件就会被塞爆,如果一直不管不顾,最终硬盘就会被塞满...;

BTW,给硬盘瘦身的话可以参阅,以前博客经常被压测,积累了一些经验:

以上。

II. 脚本内容

#!/bin/bash

## 分析并提取所有恶意尝试登陆IP 达到一定恶意尝试登陆次数则提取至黑名单
cd /var/log
grep -iE "failed|invalid" ./auth.log | grep -oP "(\d{1,3}\.){3}\d{1,3}" | sort | uniq -c  | awk '$1 > 3 {print $2}' > ./auth.log.ip.2ban
sed -i 's/^/sshd: &/g' ./auth.log.ip.2ban
cat ./auth.log.ip.2ban >> /etc/hosts.deny

## 更新 ./hosts.deny
cd /etc/
sort ./hosts.deny | uniq -d > ./hosts.deny.filter
sort ./hosts.deny | uniq -u >> ./hosts.deny.filter
cp ./hosts.deny.filter ./hosts.deny
service sshd restart

## 清理日志
if [ `du -m /var/log/auth.log|awk '{print $1}'` -gt 10 ]; ## 当日志达到10MB时,清空
then
> /var/log/auth.log;
fi

将脚本命名为 fail2ban.sh 并赋权;

julia@localhost:/var/log$ chmod +x fail2ban.sh
julia@localhost:/var/log$ ./fail2ban.sh

最后,设置 cron,让系统每隔5分钟提取执行脚本;

julia@localhost:/var/log$ crontab -e

添加一条:

*/5 * * * * /var/log/fail2ban.sh

以上,一个简易的防爆力破解Shell脚本。

III. 其他建议

1.安装2FA进行二次登录验证,令牌在你手上;

2.修改默认登录端口;

julia@localhost:/var/log$ vim /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for

#Port 22 注释掉 22 端口
Port 9527 #改为 9527 端口(举例)

3.设置较难的登录密码,例如;

e_8_0c]ZXN7=M]dk=vjj=Z]tdW}VCph:0XED!kh+u^~=5Gm

可以试试由1Password提供的随机密码生成器:https://1password.com/zh-cn/password-generator/ ;当然,你要有地方保存密码才行;我的意思是,安装 1password;

4.做一个邮箱服务/电报机器人🤖:每次有新登录/或大量登录尝试都推送消息:

以上,仅作为一些思路参考,大可不必完全参考教程;

IV. 附注

如果你对 Shell 还一知半解,可以参阅入门书单进一步学习;

最后修改:2023 年 09 月 25 日 11 : 26 AM