Fail2ban是一款免费开源的入侵防御软件(IPS),可帮助管理员保护Linux服务器免受恶意登录和暴力破解攻击。Fail2ban使用Python编写,内置针对Apache2、SSH、FTP等多种服务的过滤器。Fail2ban通过封禁发起攻击的源IP地址来减少恶意登录尝试。
Fail2ban的工作原理是扫描服务的日志文件(如/var/log/auth.log),对出现恶意登录行为(如密码错误次数过多、尝试利用漏洞等)的IP地址实施封禁。Fail2ban支持多种防火墙后端,包括iptables、ufw和firewalld,还支持设置邮件通知,在每次登录尝试被阻止时发送提醒。
本教程将指导你在Ubuntu 24.04服务器上安装Fail2ban。你将配置Fail2ban的jail规则,学习fail2ban-client的基本命令,以及如何手动封禁和解封IP地址。
前提条件
在开始本教程之前,请确保你具备以下条件:
- 一台Ubuntu 24.04服务器
- 一个具有管理员权限的非root用户
安装Fail2ban和UFW防火墙
Fail2ban是一款入侵防御软件(IPS),可保护服务器免受暴力破解攻击。它在大多数Linux仓库中默认可用,支持多种防火墙后端。本节将安装Fail2ban并设置UFW(Uncomplicated Firewall)作为Fail2ban的防火墙后端。
首先,运行以下命令更新Ubuntu软件包索引:
sudo apt update

然后使用apt命令安装fail2ban和ufw包,输入Y确认安装:
sudo apt install fail2ban ufw

安装完成后,运行以下命令开放SSH端口并启用UFW。输入Y确认启动并启用UFW:
sudo ufw allow OpenSSH
sudo ufw enable
启用UFW后,你会看到提示信息"Firewall is active and enabled on system startup"。
接下来运行以下命令检查UFW状态。你会看到UFW处于"active"状态,"OpenSSH"已启用:
sudo ufw status

最后,运行systemctl命令启动、启用并验证fail2ban服务:
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban

从输出中可以看到fail2ban已处于active(running)状态并已启用。
配置Fail2ban
安装Fail2ban后,必须先进行配置才能让其执行检查和封禁操作。本节将修改Fail2ban配置文件/etc/fail2ban/jail.local,设置bantime、maxretry和findtime的全局配置,配置默认操作和UFW防火墙后端,然后启用sshd jail以保护SSH服务免受暴力破解攻击。
首先,使用以下命令将默认的Fail2ban配置复制到/etc/fail2ban/jail.local:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
使用nano编辑器打开配置文件:
sudo nano /etc/fail2ban/jail.local
将你的本地网络添加到ignoreip选项中。此选项中的任何子网都不会被Fail2ban封禁:
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 192.168.10.20
调整bantime(IP地址被封禁的时长)、findtime(触发封禁前的失败次数统计时间窗口)和maxretry(IP地址被触发封禁的失败次数)的默认配置。本例中将bantime设置为1小时,findtime设置为10分钟,maxretry设置为5次:
bantime = 1h findtime = 10m maxretry = 5
(可选)将默认action更改为%(action_mw)s,以封禁IP地址并通过邮件向管理员发送通知。同时确保修改destemail和sender选项:
action = %(action_mw)s destemail = admin@example.com sender = fail2ban@example.com
将默认banaction更改为ufw。这样Fail2ban将通过UFW来封禁IP地址:
banaction = ufw
现在修改sshd的默认jail配置。本例中sshd jail将使用自定义的bantime、maxretry和findtime设置:
[sshd] enabled = true maxretry = 3 findtime = 15m bantime = 3h port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s
完成后保存并退出文件。
最后运行systemctl命令重启fail2ban服务以应用更改:
sudo systemctl restart fail2ban

使用fail2ban-client检查Fail2ban规则
此时Fail2ban服务已启动运行,sshd jail已启用。下面将学习fail2ban-client的基本命令,用于检查和管理Fail2ban的安装。
运行以下fail2ban-client命令确认Fail2ban是否正在运行:
sudo fail2ban-client ping

如果Fail2ban正在运行,你会看到输出"PONG"。
使用以下命令检查sshd jail的状态,这将显示sshd jail检测到和已封禁的IP地址列表:
sudo fail2ban-client status sshd

运行fail2ban-client get命令检查Fail2ban jail的具体规则。本节将检查sshd jail的bantime、maxretry、actions、findtime和ignoreip:
sudo fail2ban-client get sshd bantime
sudo fail2ban-client get sshd maxretry
sudo fail2ban-client get sshd actions
sudo fail2ban-client get sshd findtime
sudo fail2ban-client get sshd ignoreip

使用fail2ban-client手动封禁和解封IP地址
了解如何使用fail2ban-client手动封禁或解封IP地址非常重要。这样你可以轻松地将自己的IP地址从封禁列表中移除。下面将使用fail2ban-client命令来封禁和解封Fail2ban中的IP地址。
要通过Fail2ban手动封禁IP地址,运行以下fail2ban-client命令。被封禁的IP地址将被添加到sshd jail中:
sudo fail2ban-client set sshd banip IP-ADDRESS
运行以下命令从Fail2ban的sshd jail中解封IP地址:
sudo fail2ban-client set sshd unbanip IP-ADDRESS
最后,使用以下命令检查sshd jail状态。你会看到该IP地址已被移除:
sudo fail2ban-client status sshd
总结
恭喜!你已完成在Ubuntu 24.04服务器上安装Fail2ban的全部操作。你还学习了Fail2ban的基本配置方法,包括设置全局配置和jail规则。最后你还学习了fail2ban-client命令的基本用法,用于检查Fail2ban状态、jail状态、jail配置,以及手动封禁和解封IP地址。