搜索 K
Appearance
博客正在加载中...
Appearance
Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击,开源在 GitHub,已获得近 17k 的 Star。
简单来说,Fail2Ban 的功能就是可以记录登录失败(例如 SSH,MySQL 等服务)的次数,如果失败太多次就禁用登录 IP,还可以邮件通知,这样可以防止短时间内有大量暴力破解。
注意:Fail2Ban 能够降低错误认证尝试的速度,但是它不能消除弱认证带来的风险。假如一款服务使用了弱密码,别人一猜就对了,那么 Fail2Ban 也时无能为力的。
Fail2Ban 的安装很简单,可以通过源码安装,一般各大 Linux 发行版中也可以直接命令安装,还可以通过面板安装。
# Debian / Ubuntu
apt install fail2ban
# Centos / RHEL
yum install fail2ban -y
自己从头开始配置是比较麻烦的,我们可以进入 Fail2Ban 的目录,直接复制一份配置文件:
cd /etc/fail2ban
cp fail2ban.conf fail2ban.local
cp jail.conf jail.localjail.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
然后打开fail2ban.local文件:vim fail2ban.local
修改 sshd 策略,在最后一行,添加如下内容:(如果你使用 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为永久封禁
简单说明下,Fail2Ban 的工作原理是监控某个日志文件,然后根据某些关键词,提取出攻击方的 IP 地址,然后将其加入到黑名单。而 Centos 和 Ubuntu 的日志目录是不同的,所以配置里也要注意下。
重启即可生效:
systemctl restart fail2ban # 重启
fail2ban-client status # 查看状态
fail2ban-client status sshd # 查看sshd的详细状态
可以等一段时间后,打开 Fail2Ban 的日志看看:
vim /var/log/fail2ban.log
可以看到有不少 IP 再尝试登录(也就是攻击):

日志最后两行显示,已经禁用(Ban)了 2 个 IP 了。
可以通过 status 命令查看被封的 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
如果有误封,可以手动解封:
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
Fail2Ban 在不断更新中,相关配置最好以官网为准,本文主要提供的是一个参考。
另外,使用面板操作会更简单、直观一点。