ufw可通过配置日志与fail2ban联动实现ip封禁:需启用medium级日志、指定logpath为/var/log/ufw.log、banaction设为ufw,并验证规则优先级及封禁效果。

UFW(Uncomplicated Firewall)本身不直接支持 Fail2ban 的实时联动,但可通过合理配置日志路径、规则匹配与 UFW 命令接口,让 Fail2ban 在检测到恶意行为后调用 ufw insert 1 deny from <ip></ip> 等命令实现网络层封禁。关键在于确保日志可读、规则精准、操作原子且不干扰 UFW 默认策略。
确认 UFW 日志已启用并输出到指定文件
Fail2ban 需要解析日志才能识别攻击行为,而 UFW 默认不记录详细连接日志。必须手动开启:
- 编辑
/etc/ufw/ufw.conf,将LOGLEVEL=low改为LOGLEVEL=medium或high(推荐medium平衡性能与信息量) - 执行
sudo ufw logging on启用日志功能 - 确认日志实际写入位置:默认为
/var/log/ufw.log,可用sudo tail -f /var/log/ufw.log测试是否有新条目(如 SSH 尝试、端口扫描等) - 若使用 rsyslog 或 systemd-journald,需确保日志未被重定向或轮转覆盖;必要时在
/etc/rsyslog.d/50-ufw.conf中显式指定日志路径
配置 Fail2ban jail 使用 UFW 作为 banaction
Fail2ban 通过 banaction 控制封禁方式,默认 action(如 iptables)与 UFW 冲突,必须切换为 UFW 兼容动作:
- 安装
fail2ban后,检查是否已有ufwaction:运行ls /etc/fail2ban/action.d/ | grep ufw,常见为ufw.conf - 在
/etc/fail2ban/jail.local中新增或修改 jail,例如防护 SSH:
[sshd] enabled = true filter = sshd logpath = /var/log/ufw.log maxretry = 3 bantime = 1h banaction = ufw
-
banaction = ufw会调用/etc/fail2ban/action.d/ufw.conf,其底层执行ufw insert 1 deny from <ip></ip>,确保封禁优先级高于其他允许规则 - 避免混用
iptables和ufwaction,否则可能导致规则冲突或封禁失效
验证封禁逻辑与规则优先级
UFW 是 iptables 的前端,所有规则最终由 iptables 执行。Fail2ban 插入的 deny 规则必须生效,需验证两点:
- 查看当前 UFW 规则顺序:
sudo ufw status numbered,确认 Fail2ban 插入的规则出现在编号靠前位置(如 #1、#2),确保先于允许规则(如 “Allow 22/tcp”)匹配 - 手动测试封禁流程:用另一台机器多次失败 SSH 登录(触发 maxretry),然后检查:
–sudo fail2ban-client status sshd是否显示 banned IP
–sudo ufw status numbered是否新增 deny 条目
– 该 IP 是否确实无法再连接任意开放端口(不仅是 SSH) - 注意:UFW 的
deny是全局拒绝,非仅限某端口;若需端口级控制,应改用自定义banaction调用ufw deny proto tcp from <ip> to any port 22</ip>
日常维护与风险规避
自动封禁提升安全性,但也带来误封与管理复杂度,需建立基础运维习惯:
- 定期清理长期封禁 IP:Fail2ban 默认
bantime到期后自动解封,但若设为永久(-1),需配合脚本定期审核sudo ufw status verbose | grep -A 10 'Deny' - 避免封禁云服务或 CDN 回源 IP 段:在
jail.local中添加ignoreip = 127.0.0.1/8 192.168.0.0/16 203.0.113.0/24排除可信网段 - 监控 Fail2ban 自身日志:
/var/log/fail2ban.log,关注 “ERROR” 或 “unable to find a corresponding rule” 类报错,常见于日志格式不匹配或 ufw 命令权限不足 - 重启服务顺序:修改配置后,先
sudo fail2ban-client reload,再sudo systemctl restart fail2ban;UFW 无需重启










