用fail2ban屏蔽SSH爆破

故事背景

SSH爆破真是令人厌烦,动不动上万次的密码尝试属实难绷。
爆破密集到一定程度甚至有点浪费我宝贵的服务器带宽,并且有点担心我那并不算长的密码被试出来。
改端口和禁用密码验证是可行方案,但是会造成一定程度上的不便,本懒狗暂时不考虑。

老是有人爆破我SSH

初步尝试

网上随便搜了搜教程,了解到可以用pam_tally2模块来防爆破。
配置好这个模块后才发现,该模块的行为是

限制登录失败时可以锁定用户一段时间,就算密码输入正确也无法登录,等恢复之后才可以再次进入。

也就是说,检测到多次密码失败后会锁定账户,然后我自己也登不上去了,不太符合云服务器的使用场景。

使用fail2ban

随后搜到个叫fail2ban的包,可以检测到多次密码尝试错误后封禁IP,很贴合需求。
我这里用的是CentOS 7.9,其他发行版可能在实际配置上有差异。

安装

yum install fail2ban

配置

根据文档建议,新建一个配置文件
vim /etc/fail2ban/jail.local

内容如下:

1
2
3
4
5
6
7
8
9
[DEFAULT]
# time is in seconds. 3600 = 1 hour, 86400 = 24 hours (1 day)
findtime = 1800
bantime = 43200
maxretry = 5
ignoreip = 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

[sshd]
enabled = true

可以根据需要修改数值。
Esc:wq保存,懂的都懂。

应用并开启开机自启动

1
2
systemctl enable fail2ban
systemctl restart fail2ban

查询阻挡状态

1
2
fail2ban-client status
fail2ban-client status sshd

查看状态

说点废话

部署这个之后,用lastb查到的登陆失败日志大幅减少,再也不怕SSH爆破了。
看到有的文章中改了很多配置项,有点麻烦,实测只要配置jail.local中几行就能够正常工作了,

参考文献

Centos7.4安装放暴力破解工具fail2ban


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!