侧边栏壁纸
  • 累计撰写 68 篇文章
  • 累计创建 22 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用 Fail2Ban 保护 1Panel 中的 OpenResty 服务

七月流火
2025-11-27 / 0 评论 / 0 点赞 / 9 阅读 / 0 字

🎯 标题:

实战指南:使用 1Panel Fail2Ban 抵御 OpenResty/Nginx 恶意扫描和暴力破解

一、 引言 (Introduction)

1. 痛点与背景

  • 描述您的服务器遇到的问题:日志中出现大量的 403 Forbidden404 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 状态。

0

评论区