背景:服务器配置好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
👉在600s内
🔹 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小时 |
| 再来 | 封4小时 |
| … | 1天 |
🔍 七、如何查看状态
查看整体
fail2ban-client status
查看SSH防护
fail2ban-client status sshd
查看封禁IP
iptables -L -n
🚑 八、如何解封IP
fail2ban-client set sshd unbanip 1.2.3.4
注:以上内容部分来自AI生成,请核查重要信息!