Fail2ban 学习
背景
服务器配置好 TCP 22 在公网中持续暴露,后疯狂被爆 SSH,在 G 老师帮助下学到 Fail2ban 一些知识,便记录之。
一、工作机制
日志 → 识别攻击行为 → 动态封禁 IP(iptables / nftables)
二、工作原理
1️⃣ 监听日志
例如:
/var/log/auth.log
journalctl -u ssh
2️⃣ 用规则识别攻击
比如:
Failed password for root from x.x.x.x
Fail2ban 会匹配连续失败登录
3️⃣ 触发封禁
如果达到阈值,执行:
iptables -A INPUT -s 1.2.3.4 -j DROP
Fail2ban 本质是在“自动写防火墙规则”
三、Fail2ban 能做什么(能力边界)
✅ 能做的
1️⃣ 防 SSH 爆破(最重要)
2️⃣ 防 Web 攻击(Nginx)
比如:
- 扫描
/wp-admin - SQL 注入尝试
- 恶意 UA
3️⃣ 防扫描
4️⃣ 防 DDoS(轻量级)
不是专业防护,但能挡低级攻击
❌ 不能做的
- ❌ 高级 DDoS(需要云防护 / CDN)
- ❌ 0day 漏洞攻击
- ❌ L4 层攻击(如 TCP Flood)
- ❌ 无日志的流量(如 nginx stream / Reality)
四、核心配置参数
这是 Fail2ban 的控制逻辑:
🔹 1️⃣ maxretry(触发次数)
maxretry = 3
3 次失败就封
🔹 2️⃣ findtime(时间窗口)
findtime = 600
在 600 秒内
🔹 3️⃣ bantime
bantime = 3600
封 1 小时
🔹 组合逻辑
10分钟内失败3次 → 封1小时
五、SSH 防护配置(推荐版本)
1️⃣ 安装
apt update
apt install fail2ban -y
2️⃣ 创建配置
nano /etc/fail2ban/jail.local
推荐配置
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
backend = systemd
ignoreip = 127.0.0.1/8 ::1 你的IP
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
六、递进封禁
bantime.increment = true
bantime.factor = 2
bantime.max = 86400
含义:
| 次数 | 行为 | 封禁时间 |
|---|---|---|
| 第1次 | 触发 | 1小时 |
| 第2次 | 再犯 | 2小时 |
| 第3次 | 再犯 | 4小时 |
| … | 持续攻击 | 最长 1天 |
七、查看状态
🔹 查看整体
fail2ban-client status
🔹 查看 SSH 防护状态
fail2ban-client status sshd
输出示例:
Currently banned: 3
Banned IP list: 1.2.3.4 5.6.7.8
🔹 查看封禁 IP(推荐方式)
fail2ban-client status sshd
比 iptables 更直观
🔹 查看底层防火墙规则
iptables -L -n
八、查看攻击日志
🔹 查看 SSH 失败登录
grep "Failed password" /var/log/auth.log
🔹 统计攻击 IP 排行
grep "Failed password" /var/log/auth.log \
| awk '{print $11}' \
| sort | uniq -c | sort -nr | head
输出示例:
120 185.xxx.xxx.xxx
80 103.xxx.xxx.xxx
🔹 查看成功登录(重点!)
grep "Accepted" /var/log/auth.log
如果出现陌生 IP ,说明可能已被入侵
九、手动封禁 IP
🔹 临时封禁(Fail2ban)
fail2ban-client set sshd banip 1.2.3.4
🔹 解封 IP
fail2ban-client set sshd unbanip 1.2.3.4
🔹 永久封禁(iptables)
iptables -A INPUT -s 1.2.3.4 -j DROP
Fail2ban 是临时策略,iptables 才是长期黑名单
十、日志监控(实时)
tail -f /var/log/fail2ban.log
可看到:
Ban 1.2.3.4
十一、实战判断逻辑(非常重要)
公网服务器:
👉 一定会被攻击(这是常态)
关键判断:
| 现象 | 是否正常 |
|---|---|
| Failed password 很多 | 正常 |
| 各国 IP 扫描 | 正常 |
| 有 IP 被封 | 正常 |
| 有陌生 IP 成功登录 | 被入侵 |
十二、总结
Fail2ban 本质:
基于日志的自动防火墙系统
它的价值:
- 自动识别攻击行为
- 自动封禁恶意 IP
- 大幅减少 SSH 暴露风险
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kris' Blog!
