Fail2Ban
# 30.Fail2Ban
Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击,开源在 GitHub (opens new window)。
# 介绍
简单来说,Fail2Ban 的功能就是可以记录登录失败(例如 SSH,MySQL 等服务)的次数,如果失败太多次就禁用登录的 IP,还可以邮件通知,这样可以防止短时间内有大量暴力破解。
注意:Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。假如一款服务使用了弱密码,那么别人一猜就对了,那么 Fail2Ban 也无能为力。
# 安装 Fail2Ban
# Ubuntu
apt update && apt install fail2ban
# Centos
yum install fail2ban -y
2
3
4
5
# 配置 Fail2Ban 防护 SSH
自己从头开始配置是比较麻烦的,我们进入 fail2ban 的目录,直接复制一份配置文件:
cd /etc/fail2ban
cp fail2ban.conf fail2ban.local
cp jail.conf jail.local
2
3
jail.local
文件如果存在的话,可以自行备份下。
修改 jail.local
配置文件,启动 sshd 策略:vim jail.local
定位到 285 行左右(是在 [sshd]
的下面配置),添加一行 enabled = true
:
[sshd]
280
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
enable = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
2
3
4
5
6
7
8
9
10
修改 sshd 策略:
vim fail2ban.local
最后一行,添加如下内容:(如果你使用 Ubuntu,则注释第 6 行,取消注释第 9 行)
[sshd]
enabled = ture
port = 22 # 注意改成自己对应的ssh端口
filter =sshd
# CentOS
logpath = /var/log/secure
# Ubuntu
# logpath = /var/log/auth.log
maxretry = 5 # 最大尝试次数
bantime = 1800 #封禁时间,单位s。-1为永久封禁
2
3
4
5
6
7
8
9
10
11
重启即可生效:
systemctl restart fail2ban # 重启
fail2ban-client status # 查看状态
fail2ban-client status sshd # 查看sshd的详细状态
2
3
# 查看 SSH 防护效果
我们可以看 Fail2Ban 的日志:
vim /var/log/fail2ban.log
刚配置好,就可以发现不少攻击了:
可以看到日志里显示 221.215.21.91 尝试登录了 5 次;
日志最后两行显示,已经禁用(Ban)了 2 个 IP 了。
# 封禁 IP 管理
可以通过 status 命令查看被封的 IP:最后一行的 2 个 IP 就是目前封禁了的
$ fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 1
| |- Total failed: 11
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 2
|- Total banned: 2
`- Banned IP list: 64.227.77.213 119.191.58.66
2
3
4
5
6
7
8
9
10
解封某个 IP:
fail2ban-client set sshd unbanip 64.227.77.213
可以看到该 IP 又在尝试登录了(也就是解封了):
如果自己被封了,可以在云服务器厂商的控制台里登录并解封自己。
# 日常维护
这里总结一下 Fail2Ban 常用的命令:
# 启动服务
systemctl start fail2ban.service
# 开机启动
systemctl enable fail2ban.service
# 日志文件
cat /var/log/fail2ban.log
# 查看 fail2ban 的运行状态
fail2ban-client status
# 查看 jail 的详细信息,可以看到被封的 ip
fail2ban-client status sshd
# 解封 ip
fail2ban-client set sshd unbanip 123.123.123.2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 补充
Fail2Ban 除了用来保护 SSH 的暴力破解之外,还可用于 MySQL,Apache、Nginx 等,官网 (opens new window)是这样说的:
support for a lot of services (sshd, apache, qmail, proftpd, sasl, asterisk, etc)
# 参考
Fail2Ban 官方用户手册 (opens new window)
Fail2Ban 简介与使用_正阳 Liu 的博客 (opens new window)
fail2ban--服务器遭遇暴力破解的福音-小薛薛 snow 的博客 (opens new window)
【云知梦】Fail2ban 高阶实践_哔哩哔哩 (opens new window)
Fail2ban 高阶实践/CentOS8/RHEL8/Rocky8 课程 (opens new window)