作用:实时监控系统日志,识别密码暴力破解,自动通过 iptables 拉黑攻击 IP,限时封禁。
一、工作原理
Fail2Ban 不会修复漏洞,持续读取 /var/log/auth.log 登录日志,匹配「密码错误」日志;
短时间内失败次数超过阈值 → 调用防火墙将 IP 丢弃;到达时间自动解封 IP。
底层默认使用 iptables,和 ufw 可以共存,互不冲突。
二、完整部署步骤
1. 安装软件
apt update
apt install fail2ban -y2. 核心配置说明
不要直接修改 jail.conf,系统更新会覆盖!
新建自定义配置 jail.local(优先级更高)
vim /etc/fail2ban/jail.local粘贴基础通用配置:
[DEFAULT]
# 全局默认封禁时长:86400秒 = 24小时
bantime = 86400
# 检测时间窗口:1小时内多次失败触发封禁
findtime = 3600
# 最大尝试失败次数
maxretry = 3
# 封禁工具,使用iptables
banaction = iptables-multiport
# 开启日志
loglevel = INFO
# SSH防护【最重要】
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log参数解释:
maxretry = 3:1 小时内密码错误≥3 次 → 拉黑 IPbantime = 86400:封禁 24 小时后自动释放 IP
如果你修改 SSH 默认端口(非 22),需要填写端口号
port = 2233/
Fail2Ban jail.local 完整版【详细中文注释】
# ====================== 【全局默认配置段 [DEFAULT] ======================
# 下面参数所有监狱(jail)默认继承,子监狱可以单独覆盖
[DEFAULT]
# bantime:IP封禁持续时长(单位:秒)
# 86400 = 24小时;0=永久封禁(不推荐)
bantime = 86400
# findtime:检测时间窗口
# 含义:在findtime时间内,失败次数超过maxretry才触发封禁
findtime = 3600
# maxretry:最大允许失败尝试次数
maxretry = 3
# 封禁动作脚本,使用iptables封禁多端口
# 可选:iptables / iptables-multiport / nftables(新版系统)
banaction = iptables-multiport
# 是否开启增量封禁(重复攻击的IP封禁时间翻倍,进阶防御)
# 第一次24h,再次被抓48h、96h……
bantime.increment = true
# 倍增系数
bantime.factor = 2
# 封禁上限,最长封禁30天(2592000秒)
bantime.maxtime = 2592000
# 【白名单IP!极其重要】本地、办公公网IP加入,永远不会被封禁
# 多个IP使用空格隔开
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 你的办公公网IP
# 日志等级:CRITICAL ERROR WARNING INFO DEBUG
loglevel = INFO
# 是否发送邮件告警(需要服务器安装postfix邮件服务,不需要可以注释)
# destemail = admin@shturl.
# sender = server@shturl.
# mta = sendmail
# ====================== 【SSH防护 核心配置】======================
[sshd]
# 启用此规则 true开启 false关闭
enabled = true
# SSH端口
# 默认22就写 ssh;如果你修改SSH端口为2233,改为 port = 2233
port = ssh
# 使用的过滤规则,匹配日志中的失败登录
filter = sshd
# 登录日志文件路径(Ubuntu/Debian)
# CentOS/RHEL 路径为 /var/log/secure
logpath = /var/log/auth.log
# 单独覆盖全局参数(不继承上面DEFAULT),不需要就注释
# maxretry = 3
# bantime = 86400
# ====================== 【可选拓展防护,按需开启】 ======================
# 1. Nginx网站密码爆破防护
#[nginx-auth]
#enabled = true
#filter = nginx-auth
#logpath = /var/log/nginx/error.log
#maxretry = 5
# 2. FTP vsftpd 暴力破解防护
#[vsftpd]
#enabled = true
#filter = vsftpd
#logpath = /var/log/vsftpd.log
# 3. Postfix邮件服务器防护
#[postfix]
#enabled = true
#filter = postfix
#logpath = /var/log/mail.log3. 启动 & 开机自启
systemctl enable --now fail2ban三、常用运维命令
# 查看服务状态
systemctl status fail2ban
# 查看SSH监狱状态(列出所有封禁IP)
fail2ban-client status sshd
# 手动解封指定IP
fail2ban-client set sshd unbanip 51.79.143.228
# 手动永久拉黑IP(不依靠自动规则)
fail2ban-client set sshd banip 1.1.1.1
# 重载配置(修改jail.local后执行)
fail2ban-client reload四、扩展防护(可选)
除 SSH 外,还可以防护 Nginx 网站、FTP、MySQL 爆破,示例:
# Nginx 网站登录防护
[nginx-auth]
enabled = true
filter = nginx-auth
logpath = /var/log/nginx/error.log
maxretry = 5五、关键注意事项
已经启用 SSH 密钥登录 + 关闭密码登录
理论上不会产生密码失败日志,Fail2Ban 不会触发封禁。
但依然建议保留 Fail2Ban:阻挡扫描器、恶意 TCP 频繁连接。
和
AllowUsers、禁止 root 登录搭配使用Fail2Ban 是第二层防御;第一层加固永远是 SSH 配置收紧。
不要把自己办公公网 IP 误封!
测试时调低失败次数,避免自己被拉黑远程锁机。
云服务器安全组优先级高于系统防火墙
Fail2Ban 只能管控服务器内部,无法绕过云厂商安全组。
六、进阶优化方案
永久拉黑高频恶意 IP(永不自动解封)
修改配置,针对持续扫描 IP 使用长效封禁:
[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 2592000
效果:重复攻击的 IP,封禁时间指数增长,最高封 30 天。
七、总结
Fail2Ban 属于缓解暴力破解的防御工具,不能替代基础加固。
安全分层逻辑:
SSH密钥登录 + AllowUsers白名单(第一道防线) → ufw防火墙(第二道) → Fail2Ban自动拉黑(第三道)
评论