news 2026/4/18 12:54:22

Fail2ban + Nginx/Apache 防 Web 暴力破解配置清单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Fail2ban + Nginx/Apache 防 Web 暴力破解配置清单

它是一款 Linux 系统下的入侵防御工具,核心作用是监控系统日志、识别恶意访问行为,并自动封禁对应的 IP 地址,常用于保护 SSH、FTP、Web 服务等。

一、核心工作原理

  1. 监控日志:Fail2ban 会实时读取指定服务的日志文件(比如 SSH 的/var/log/auth.log)。
  2. 匹配规则:通过预设的正则表达式,识别失败的登录尝试(如 SSH 密码错误、Web 暴力破解)。
  3. 触发封禁:当某个 IP 的失败次数在设定时间内达到阈值,就会调用系统防火墙(如iptables/ufw)封禁该 IP,封禁时长可自定义。
  4. 自动解封:封禁时间到期后,会自动从防火墙规则中移除该 IP,恢复访问。

二、安装与基础配置(以 Debian/Ubuntu 为例)

1. 安装 Fail2ban

bash

运行

sudo apt update sudo apt install fail2ban -y
2. 启动并设置开机自启

bash

运行

sudo systemctl start fail2ban sudo systemctl enable fail2ban
3. 核心配置文件说明
配置文件路径作用
/etc/fail2ban/fail2ban.conf全局配置(日志级别、默认封禁时长等,一般无需修改)
/etc/fail2ban/jail.conf预设规则模板(包含 SSH、Apache 等服务的默认配置)
/etc/fail2ban/jail.d/自定义规则目录(推荐在此新建.conf文件覆盖默认配置,避免修改jail.conf

三、快速配置 SSH 防护(最常用场景)

  1. 新建自定义配置文件,避免修改默认配置:

    bash

    运行

    sudo nano /etc/fail2ban/jail.d/ssh.conf
  2. 写入以下内容并保存:

    ini

    [sshd] enabled = true # 开启防护 port = ssh # 防护的端口(默认22) filter = sshd # 使用的规则过滤器(预设) logpath = /var/log/auth.log # 监控的日志文件 maxretry = 3 # 最大失败次数 findtime = 600 # 统计时间窗口(10分钟) bantime = 3600 # 封禁时长(1小时,0为永久封禁) ignoreip = 127.0.0.1/8 # 忽略的IP(可添加自己的办公IP)
  3. 重启 Fail2ban 生效:

    bash

    运行

    sudo systemctl restart fail2ban

四、常用命令

  1. 查看当前封禁的 IP 列表:

    bash

    运行

    sudo fail2ban-client status sshd
  2. 手动解封某个 IP:

    bash

    运行

    sudo fail2ban-client set sshd unbanip 192.168.1.100
  3. 手动封禁某个 IP:

    bash

    运行

    sudo fail2ban-client set sshd banip 192.168.1.100

五、常见问题与解决

  • 封禁后无法访问自己的 IP:在ignoreip中添加自己的 IP,或者手动执行解封命令。
  • 服务不生效:检查日志路径是否正确、防火墙是否正常运行(如iptables -L查看规则)。
  • 适配不同防火墙:默认用iptables,如需用ufw,需在jail.conf中设置banaction = ufw

这份配置针对Web 登录页面暴力破解(如 WordPress 后台、自定义登录页)和404 洪水攻击,分别适配 Nginx 和 Apache 服务。

前置条件

  1. 已安装 Fail2ban(参考之前的安装步骤)
  2. Web 服务日志路径正确且可被 Fail2ban 读取
  3. 防火墙(iptables/ufw)正常运行

一、 Nginx 防护配置

场景 1:防护 WordPress 登录页(wp-login.php

  1. 新建自定义规则文件

    bash

    运行

    sudo nano /etc/fail2ban/jail.d/nginx-wordpress.conf
  2. 写入配置内容

    ini

    [nginx-wp-login] enabled = true port = http,https # 同时防护80和443端口 filter = nginx-wp-login # 对应filter目录下的规则文件 logpath = /var/log/nginx/access.log # Nginx访问日志路径,根据实际情况修改 maxretry = 5 # 5次失败尝试 findtime = 900 # 15分钟内 bantime = 3600 # 封禁1小时 ignoreip = 127.0.0.1/8 # 忽略本地IP,可添加自己的办公IP
  3. 创建过滤规则文件Fail2ban 需要正则规则来匹配失败登录日志,新建 filter 文件:

    bash

    运行

    sudo nano /etc/fail2ban/filter.d/nginx-wp-login.conf
    写入以下内容(匹配wp-login.php的 403/401 错误):

    ini

    [Definition] failregex = ^<HOST> -.*GET /wp-login.php.* (403|401) ignoreregex =

场景 2:防护通用 Web 登录页(自定义 401 错误)

如果是自研登录页,以返回401 Unauthorized为例:

  1. 新建 jail 配置文件/etc/fail2ban/jail.d/nginx-login.conf

    ini

    [nginx-login] enabled = true port = http,https filter = nginx-login logpath = /var/log/nginx/access.log maxretry = 3 findtime = 600 bantime = 7200 ignoreip = 127.0.0.1/8
  2. 新建过滤规则/etc/fail2ban/filter.d/nginx-login.conf

    ini

    [Definition] failregex = ^<HOST> -.*POST /login.* 401 ignoreregex =

二、 Apache 防护配置

场景 1:防护 WordPress 登录页

  1. 新建 jail 配置文件

    bash

    运行

    sudo nano /etc/fail2ban/jail.d/apache-wordpress.conf
    写入内容:

    ini

    [apache-wp-login] enabled = true port = http,https filter = apache-wp-login logpath = /var/log/apache2/access.log # Apache默认日志路径,根据实际修改 maxretry = 5 findtime = 900 bantime = 3600 ignoreip = 127.0.0.1/8
  2. 新建过滤规则文件

    bash

    运行

    sudo nano /etc/fail2ban/filter.d/apache-wp-login.conf
    写入正则匹配规则:

    ini

    [Definition] failregex = ^<HOST> -.*GET /wp-login.php.* (403|401) ignoreregex =

场景 2:防护 404 洪水攻击

针对大量请求不存在页面的攻击行为:

  1. 新建 jail 配置/etc/fail2ban/jail.d/apache-404.conf

    ini

    [apache-404] enabled = true port = http,https filter = apache-404 logpath = /var/log/apache2/access.log maxretry = 20 # 短时间内20次404触发封禁 findtime = 300 # 5分钟窗口 bantime = 3600 ignoreip = 127.0.0.1/8
  2. 新建过滤规则/etc/fail2ban/filter.d/apache-404.conf

    ini

    [Definition] failregex = ^<HOST> -.* 404 ignoreregex =

三、 生效与验证步骤

  1. 重启 Fail2ban 服务

    bash

    运行

    sudo systemctl restart fail2ban
  2. 查看防护规则状态

    bash

    运行

    # 查看所有启用的jail sudo fail2ban-client status # 查看某个具体规则的封禁IP(以nginx-wp-login为例) sudo fail2ban-client status nginx-wp-login
  3. 手动测试封禁(可选)多次访问受防护的登录页并输入错误密码,然后执行上述状态命令,查看自己的 IP 是否被封禁。

四、 常见问题解决

  1. 规则不生效
    • 检查日志路径是否正确:cat /var/log/nginx/access.log确认日志正常生成
    • 验证正则规则:fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-wp-login.conf
  2. 误封正常 IP
    • ignoreip中添加该 IP
    • 手动解封:sudo fail2ban-client set nginx-wp-login unbanip 你的IP
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:18:12

Truffle智能合约开发全流程实践

Truffle智能合约开发全流程实践 在当今区块链应用快速发展的背景下&#xff0c;构建一个完整的去中心化应用&#xff08;DApp&#xff09;已不再是仅限于极客的实验项目。越来越多的开发者希望掌握从智能合约编写到前端交互的全栈能力。而以太坊生态中&#xff0c;Truffle 作为…

作者头像 李华
网站建设 2026/4/18 11:57:14

当前工作设备系统整体启动模型总结

一、整体启动链路总结 系统从上电到业务运行,完整执行路径为: init / ttyFIQ0└─ /app/startup (Shell 脚本进程)└─ ./startapp.sh└─ init_module srosXXX└─ srosXXX 进程└─ 主线程进入 main()└─ OsixCreateTask 创建多个线程二、startup 的角色与职…

作者头像 李华
网站建设 2026/4/18 6:14:16

手机也能跑AutoGLM?揭秘个人设备私有化部署的3大核心技巧

第一章&#xff1a;Open-AutoGLM怎么部署到自己手机上将 Open-AutoGLM 部署到个人手机上&#xff0c;可以通过 Termux 等安卓终端模拟器实现本地运行。该方法无需 Root 权限&#xff0c;适合大多数 Android 设备。准备工作 在手机上安装 Termux&#xff08;可通过 F-Droid 获取…

作者头像 李华
网站建设 2026/4/18 10:53:25

BQ3588C开发板编译踩坑实录:环境配置与常见错误解决

BQ3588C开发板编译踩坑实录&#xff1a;环境配置与常见错误解决 在尝试为国产高性能开发板构建开源鸿蒙系统时&#xff0c;你有没有经历过那种“明明照着文档一步步来&#xff0c;却处处报错”的无力感&#xff1f;尤其是在面对一个尚处于生态建设初期的操作系统——比如 OpenH…

作者头像 李华
网站建设 2026/4/18 8:28:27

深度学习框架YOLOV8模型训练厨余垃圾检测数据集__(实为 __四类生活垃圾检测数据集 构建基于深度学习YOLOV8厨余垃圾检测系统 智慧环保建设,推动垃圾分类智能化落地

厨余垃圾检测数据集 14964张 4类yolo格式 【垃圾四类检测YOLO数据集】共【14964】张&#xff0c;按照8比2划分为训练集和验证集&#xff0c;其中训练集【11971】张&#xff0c;验证集【2993】张&#xff0c;模型分为【4】类&#xff0c;分类为&#xff1a;【‘可回收垃圾’, ‘…

作者头像 李华
网站建设 2026/4/18 1:24:31

光栅衍射主极大个数与大学物理衍射要点解析

光栅衍射主极大个数与大学物理衍射要点解析在光学实验中&#xff0c;当你用一束红光照射一个细密的光栅&#xff0c;屏幕上出现的不再是简单的明暗条纹&#xff0c;而是一系列明亮、锐利且对称分布的亮斑——这些就是光栅衍射的主极大。它们的位置并非随机&#xff0c;而是由一…

作者头像 李华