Fail2Ban · 扫描日志自动封禁暴力破解 IP 的主机入侵防御工具 · SSH 防爆破部署与使用全指南
项目仓库: https://github.com/fail2ban/fail2ban
开源协议:GPL v2 或更高版本 · 语言:Python(>= 3.5 / PyPy3) · 自
v0.10 起支持 IPv6 · 系统入口:fail2ban-client(不要直接调用
fail2ban-server)
1 项目简介
Fail2Ban 是一个扫描日志文件(如
/var/log/auth.log)的主机入侵防御工具:当某个 IP
出现过多失败登录尝试时,它会更新系统防火墙规则,在可配置的时间内拒绝该
IP 的新连接。它开箱即可读取 sshd、Apache
等常见日志,并可轻松配置成读取任意日志文件、匹配任意错误模式。
1.1 核心信息一览
| 项目项 | 内容 |
|---|---|
| 项目名称 | Fail2Ban |
| 仓库地址 | github.com/fail2ban/fail2ban |
| 项目定位 | 扫描日志、自动封禁多次认证失败 IP 的主机防护工具 |
| 开源协议 | GPL v2 或更高版本 |
| 语言 | Python >= 3.5 / PyPy3 |
| 配置目录 | /etc/fail2ban |
| 可执行文件 | /usr/bin/fail2ban-client |
| 官方站点 | fail2ban.org |
1.2 适用场景
- 保护暴露在公网的 SSH 服务,自动封禁暴力破解 IP。
- 为 Apache / Nginx 等 Web 服务的认证失败、扫描行为做自动封禁。
- 自定义 jail 规则,保护任意可写日志的服务。
1.3 能力边界(官方口径)
- Fail2Ban 只能降低错误认证尝试的速率,不能消除弱认证带来的风险;官方建议同时启用双因素或公钥认证。
- 永远使用
fail2ban-client与服务交互,不要直接调用fail2ban-server。
2 功能特性
- 日志扫描:开箱支持 sshd、Apache 等标准日志,可自定义任意日志与正则。
- 防火墙联动:更新系统防火墙规则临时封禁 IP,时长可配置。
- IPv6 支持:自 v0.10 起支持匹配 IPv6 地址。
- 可插拔动作:jail 可配置不同的封禁动作(防火墙、通知等)。
- 客户端控制:
fail2ban-client可动态下发命令、查看状态。
3 官方界面预览
Fail2Ban 是后台服务,无 Web 界面;通过
fail2ban-client status 查看各 jail 的运行状态与当前被封 IP
列表。
4 官方跳转链接汇总
| 类别 | 链接 | 说明 |
|---|---|---|
| 官方站点 | https://www.fail2ban.org | 官方网站 |
| 仓库主页 | https://github.com/fail2ban/fail2ban | 源码、Issues |
| Wiki | github.com/fail2ban/fail2ban/wiki | 安装与 HOWTO |
| 开发者文档 | fail2ban.readthedocs.io | 完整文档 |
| 安装指南 | Wiki: How to install packages | 各发行版包安装 |
| 邮件列表 | lists.sourceforge.net fail2ban-users | 社区交流 |
5 前置要求与服务器配置
5.1 软件前提
- Python >= 3.5 或 PyPy3;源码安装需要
python-setuptools/python3-setuptools。 - 可选依赖:pyinotify(>=0.8.3,需 Linux >=2.6.13)、systemd(>=204)与 python-systemd、dnspython。
- 多数 Linux 发行版已打包 Fail2Ban,优先用包管理器安装。
5.2 硬件建议
- 任意 Linux 主机,资源占用极低。
5.3 端口与资源
- 工具不监听业务端口;它通过修改本机防火墙规则生效。
6 方式一:发行版包安装(推荐)
多数发行版已打包 Fail2Ban,按 Wiki 的安装指南用包管理器安装,再启用服务:
# Debian/Ubuntu 示例
sudo apt install fail2ban
sudo systemctl enable --now fail2ban7 方式二:从源码安装
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install安装后可执行脚本位于 /usr/bin,配置位于
/etc/fail2ban。系统 init 脚本不会自动安装,Debian
系可手动复制:
cp files/debian-initd /etc/init.d/fail2ban
update-rc.d fail2ban defaults
service fail2ban start验证安装:
fail2ban-client -h
fail2ban-client version8 配置项说明
- 配置目录
/etc/fail2ban:主配置jail.conf(不要直接改,用jail.local覆盖)。 - 可用
fail2ban-client向服务发送命令动态配置,命令详见fail2ban-client(1)manpage,另见fail2ban(1)与jail.conf(5)。
9 常用运维命令
- 查看版本:
fail2ban-client version - 查看整体状态:
fail2ban-client status - 查看某 jail 状态(如
sshd):
fail2ban-client status sshd - 手动封禁 /
解封:
fail2ban-client set sshd banip <ip>/unbanip <ip> - 重启服务:
systemctl restart fail2ban
10 常见故障排查
- 忘记被封
IP:
fail2ban-client status sshd查看当前 banned 列表。 - 自己被误封:检查
jail.local中的ignoreip白名单,把本机 / 办公出口 IP 加白。 - 服务没生效:确认用
fail2ban-client启动、防火墙后端与系统兼容。 - 更多问题:查 Wiki、manpage 与邮件列表。
11 风险与合规说明
- 许可证:GPL v2 或更高版本。
- 有效性边界:官方明确 Fail2Ban 不能替代强认证;请同时使用密钥 / 双因素认证。
- 误封风险:错误配置可能把正常用户 /
自己封掉,务必配置
ignoreip白名单。 - 本文整理自官方 README,命令与配置以官方文档与 manpage 最新说明为准;不包含 star 数等动态数据。