🎯 标题:
实战指南:使用 1Panel Fail2Ban 抵御 OpenResty/Nginx 恶意扫描和暴力破解
一、 引言 (Introduction)
1. 痛点与背景
描述您的服务器遇到的问题:日志中出现大量的 403 Forbidden 和 404 Not Found 错误。
强调恶意扫描、爬虫(如 SemrushBot, DotBot)和暴力猜测对服务器资源的浪费和安全隐患。
Fail2Ban 简介: 简要说明 Fail2Ban 的作用——通过分析日志,自动识别并使用防火墙(如 iptables)封禁恶意 IP 地址。
2. 环境说明
系统环境: Linux (CentOS/Ubuntu)
面板: 1Panel 应用管理面板
核心服务: OpenResty (Nginx)
安全工具: Fail2Ban
二、 识别恶意日志模式
1. 恶意日志示例
引用您日志中的关键行,突出显示恶意 IP 和状态码。
重点关注 IP:
185.191.171.x(SemrushBot),216.244.66.x(DotBot)。重点关注状态码:
403(Forbidden) 和404(Not Found)。
2. OpenResty 日志路径确认 (关键)
告知读者如何找到正确的日志文件路径。
您的日志路径:
/opt/1panel/apps/openresty/openresty/log/access.log强调:这是 Fail2Ban 必须监控的文件。
三、 Fail2Ban 核心配置 (Jail & Filter)
这是文档的核心部分,详细介绍如何创建并验证过滤器。
1. 创建自定义过滤器(Filter)
目的: 创建一个
nginx-bad-requests过滤器,用于捕获所有 403 和 404 错误。文件路径:
/etc/fail2ban/filter.d/nginx-bad-requests.conf文件内容 (最终测试成功的版本):
代码段
# /etc/fail2ban/filter.d/nginx-bad-requests.conf
[Definition]
# 匹配 Nginx 标准日志格式中的 IP 地址 (HOST),并查找 403 或 404 状态码
failregex = ^<HOST> -.* "(GET|POST|HEAD|OPTIONS|PUT|DELETE) [^"]*" (403|404) .*$
ignoreregex =
2. 配置监狱(Jail)
目的: 定义封禁规则,告诉 Fail2Ban 监控哪个日志文件、使用哪个过滤器、以及如何封禁。
文件路径:
/etc/fail2ban/jail.local配置内容:
代码段
[nginx-bad-requests]
enabled = true
filter = nginx-bad-requests
logpath = /opt/1panel/apps/openresty/openresty/log/access.log
banaction = iptables-allports
bantime = 3600 ; 封禁时间 (秒),此处为 1 小时
maxretry = 5 ; 最大尝试次数
findtime = 600 ; 查找时间 (秒),10 分钟内失败 5 次即封禁
四、 验证与部署
1. 过滤器有效性验证 (专业性体现)
使用
fail2ban-regex工具来测试过滤器是否能匹配日志。命令:
Bash
sudo fail2ban-regex /opt/1panel/apps/openresty/openresty/log/access.log /etc/fail2ban/filter.d/nginx-bad-requests.conf结果解读: 如果
matched行数大于 0,说明过滤器有效。
2. 重启服务并检查状态
告知读者如何通过 1Panel 或 SSH 重启 Fail2Ban 服务。
SSH 命令:
Bash
sudo systemctl restart fail2ban检查 Jail 状态: 确保 Jail 被正确加载,并查看封禁列表。
Bash
sudo fail2ban-client status nginx-bad-requests
五、 进阶建议 (Advanced Tips)
推荐使用
nginx-badbots: 对于 SemrushBot 等已知 User-Agent 的恶意行为,内置的nginx-badbots过滤器往往更具针对性。读者可以考虑同时启用两个 Jail 或仅启用此 Jail。bantime警告: 提醒读者不要将bantime设置为-1(永久封禁),以免造成误封难以恢复。白名单 (Ignore IP): 提示读者将自己的 IP 或可信的爬虫 IP (如 Googlebot) 加入
jail.local文件的ignoreip列表中,防止误封。
六、 总结 (Conclusion)
总结 Fail2Ban 带来的好处:减少服务器负载、提升安全性。
呼吁读者定期检查日志和 Fail2Ban 状态。
评论区