Fail2ban 抑制 SSH 攻击噪声
--
--
Loading...
前言
由于公网出口 IP 经常变化,所以将服务器 SSH 直接暴露在公网,而非添加白名单进行限制
但是在查看 SSH 日志时,发现仍然有频繁的访问SSH建立连接,因此通过fail2ban将该种情况进行控制,降低风险,抑制攻击噪声
Fail2ban 工作逻辑
1. 基本原理
Fail2ban 通过监控日志文件,使用正则规则匹配异常行为
流程:日志 → Filter 规则匹配 → 统计失败次数 → 达到阈值 → 执行 Action 封禁 IP
2. 三个核心配置
Jail(策略)
定义:
监控什么服务
使用什么规则
失败几次封禁
封禁多久
例如:
[sshd-kex]
enabled = true
filter = sshd-kex
maxretry = 3
findtime = 300
bantime = 86400Filter(匹配规则)
定义:
什么日志算一次失败
例如:
Connection reset by IP
Connection closed [preauth]匹配成功:
失败次数 +1Action(封禁动作)
定义:
触发后如何封禁
例如:
banaction = iptables-multiport表示:
fail2ban
↓
iptables 添加规则
↓
阻止该 IP 访问 SSH 端口具体实现
此处以 Debian 系统为例,不同系统对应的 SSH 日志不一样,需要注意
1. 创建 Filter
编辑文件
vim /etc/fail2ban/filter.d/sshd-kex.conf添加以下内容
[Definition]
failregex = ^.*sshd.*kex_exchange_identification: read: Connection reset by peer.*from <HOST>.*$
^.*sshd.*Connection reset by <HOST> port.*$
^.*sshd.*Connection closed by authenticating user .* <HOST> port.*\[preauth\].*$
ignoreregex =2. 更新 Jail
编辑文件
vim /etc/fail2ban/jail.local添加以下内容
[sshd-kex]
enabled = true
filter = sshd-kex
port = ssh
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
bantime = 86400
banaction = iptables-multiport3. 重启 Fail2ban
systemctl restart fail2ban检查:
fail2ban-client status预期结果

4. 手工测试规则
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd-kex.conf5. 验证
fail2ban-client status sshd-kex可以看到规则已经生效
