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 漏洞攻击
- ❌ 应用层复杂攻击
四、核心配置参数
这是 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
✍️ 写入(仅作参考)
[sshd]
enabled = true
port = 22,30222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600
bantime.increment = true
bantime.factor = 2
bantime.max = 86400
六、这段配置意味着什么?
攻击者行为:
| 次数 | 行为 | 封禁时长 |
|---|---|---|
| 1 | 首次爆破 | 1 小时 |
| 2 | 再次尝试 | 2 小时 |
| 3 | 持续尝试 | 4 小时 |
| … | 持续攻击 | 最长 1 天 |
七、如何查看状态
查看整体
fail2ban-client status
查看 SSH 防护
fail2ban-client status sshd
查看封禁 IP
iptables -L -n
八、如何解封 IP
fail2ban-client set sshd unbanip xx.xx.xx.xx
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kris' Blog!
