一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban

article/2025/6/30 19:19:34

title: 一次借助ChatGPT抵御恶意攻击的经历,为个人服务器添加自动防御系统Fail2ban
tags:

  • 个人成长
    categories:
  • 杂谈

我有一台个人服务器,托管着自己的WordPress网站,也放了RustDesk这种私有化的远程桌面工具,最近我发现RustDesk特别卡,登录服务器才发现WordPress消耗了大量的资源和带宽

Uploaded image

然后我把现象丢给了GPT4o, GPT4o要求查看我的Nginx日志

image-20250602134232283

sudo tail -f /var/log/nginx/access.log

我将日志贴给gpt后,gpt快速分析了问题

image-20250602134331920

一、 使用 Nginx 限速保护登录接口

为了避免保留破解,我们需要对wp-login.php进行限流

1.1 编辑 nginx.conf,添加限流配置

image-20250602151208740

http {} 区块中添加以下内容:

limit_req_zone $binary_remote_addr zone=login_zone:10m rate=5r/m;

解释如下:

  • $binary_remote_addr:按 IP 建立限流;
  • login_zone:10m:设置一个 10MB 内存的限流区域;
  • rate=5r/m:每个 IP 每分钟最多允许 5 次请求。

📌 注意:必须写在 http {} 块中!

1.2 修改虚拟主机配置,启用登录页限速

location = /wp-login.php {limit_req zone=login_zone burst=3 nodelay;include fastcgi_params;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
参数说明:
  • burst=3:最多允许 3 个突发请求;

  • nodelay:超出限额立即拒绝;

  • 其余参数为 PHP-FPM 常规配置。

二、完整的 Nginx 配置示例(v2fy.com.conf)

为方便参考,这是一份包含 HTTPS、限流、防注入、静态缓存等功能的完整 Nginx 配置 v2fy.com.conf

# 监听 HTTP 端口,将所有请求重定向到 HTTPS
server {listen 80;server_name v2fy.com;location / {return 301 https://$host$request_uri;  # 永久重定向到 HTTPS}
}# 主站点的 HTTPS 配置
server {listen 443 ssl;server_name v2fy.com;# 网站根目录root /usr/share/nginx/v2fy.com;index index.php index.html index.htm;# SSL 证书配置(路径根据你实际证书文件填写)ssl_certificate /etc/nginx/ssl/v2fy.com/fullchain.cer;ssl_certificate_key /etc/nginx/ssl/v2fy.com/v2fy.com.key;# 安全相关的 SSL 设置ssl_session_timeout 5m;                 # 会话缓存时间ssl_protocols TLSv1.2 TLSv1.3;          # 禁用不安全的 TLSv1 和 TLSv1.1ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256';ssl_prefer_server_ciphers on;# 启用 gzip 压缩,提高页面加载速度gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_comp_level 8;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php;gzip_vary off;# 防护 XMLRPC 接口(攻击频发)location = /xmlrpc.php {limit_req zone=xmlrpc_zone burst=5 nodelay;  # 启用速率限制(需在 http{} 中定义 xmlrpc_zone)include fastcgi_params;fastcgi_pass unix:/run/php/php8.2-fpm.sock;  # PHP-FPM socket 路径fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;# access_log 默认为开启,Fail2Ban 可以监控}# 登录页限速,保护登录暴力破解location = /wp-login.php {limit_req zone=login_zone burst=3 nodelay;include fastcgi_params;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}# Feed 接口限速,防止爬虫滥用location = /feed {limit_req zone=feed_zone burst=3 nodelay;}# 屏蔽伪 WordPress UA 发起的 cron 请求location = /wp-cron.php {if ($http_user_agent ~* "WordPress/") {return 403;}include fastcgi_params;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}# 优化 favicon 请求(避免 404 日志)location = /favicon.ico {log_not_found off;access_log off;}# 允许 robots.txt 被搜索引擎访问location = /robots.txt {allow all;log_not_found off;access_log off;}# 缓存常见静态资源,减少带宽和服务器压力location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {expires max;            # 浏览器缓存时间最长log_not_found off;access_log off;}# 网站主页及所有 URL 路由处理(WordPress rewrite)location / {try_files $uri $uri/ /index.php?$args;}# PHP 文件处理规则(fastcgi)location ~ \.php$ {try_files $uri =404;    # 不存在的文件直接返回 404include fastcgi_params;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;}# 反向代理某个接口(如 /wemessage/)location /wemessage/ {proxy_pass http://127.0.0.1:3600;  # 反代本地端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 防止攻击者构造特定路径发起请求if ($request_uri ~* "(appendChild|postLinks|defer|actionURL)") {return 403;}# 拦截含有特殊符号的异常路径(常用于注入、攻击等)if ($request_uri ~* "[\[\]\!\=\,\{\}%]") {return 403;}
}

我们将配置丢给ChatGPT ,继续进行安全增强。

image-20250602140620846

三、进一步强化:启用 Fail2Ban 拉黑恶意 IP

目前,我们已经可以对恶意请求进行限速,限速可以缓解攻击,但无法彻底拦截持续扫描的恶意 IP。此时可借助 Fail2Ban 实现自动封禁。

3.1 什么是 Fail2ban ?

fail2ban 是一个非常实用的开源安全工具,主要功能是自动检测系统日志中的可疑行为(如暴力破解、恶意请求)并临时封禁攻击者的 IP 地址,从而提高服务器的安全性。

功能说明
防止 SSH 暴力破解如果某个 IP 多次尝试登录 SSH 密码失败,会被封禁。
封禁 Nginx/Web 攻击者分析访问日志,如发现频繁 403/404 请求或恶意 URL,就封禁对应 IP。
灵活可配置可自定义规则、封禁时长、阈值、监控哪些日志文件等。
自动解封支持设置封禁时间,比如封 10 分钟后自动解封。

3.2 Fail2ban工作原理(简化流程):

  1. 监控日志文件(如 /var/log/nginx/access.log/var/log/auth.log
  2. 匹配特定的行为(比如 5 分钟内失败登录 5 次、访问特定恶意路径等)
  3. 执行动作:默认是 iptables 封 IP,也可发邮件或执行你自定义的命令

四:配置 Fail2Ban 保护 Nginx

4.1 安装Fail2ban

# 更换国内镜像源(可选)
sudo sed -i 's|http://archive.ubuntu.com/ubuntu|https://mirrors.tuna.tsinghua.edu.cn/ubuntu|g' /etc/apt/sources.list
# 更新软件包索引并安装
sudo apt update
sudo apt install fail2ban -y

4.2 查看fail2ban工作状态

sudo systemctl status fail2ban

4.3 基于默认配置文件,新建本地配置文件

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

在配置文件/etc/fail2ban/jail.local末尾添加以下内容

[nginx-bad-requests]
enabled = true
port    = http,https
filter  = nginx-bad-requests
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 600
bantime = 3600
  • maxretry = 5:10 分钟内出现 5 次匹配就封禁
  • bantime = 3600:封禁 1 小时
  • logpath:你的 nginx 日志路径,可以根据实际调整

4.4 创建过滤器规则

sudo vim /etc/fail2ban/filter.d/nginx-bad-requests.conf

在文件中加入以下内容

[Definition]
failregex = <HOST> -.*"(GET|POST).*?(appendChild|postLinks|defer|actionURL).*HTTP.*"
ignoreregex =

4.5 重启Fail2ban

sudo systemctl restart fail2ban

查看 nginx-bad-requests 规则封禁了多少IP

sudo fail2ban-client status nginx-bad-requests

image-20250602143447680

我们拉长时间段,发现被ban的IP在逐渐增加(从19个IP增加到了33个)

image-20250602154654662

服务器的状态也回归到了正常的水平

image-20250602154840553

总结

本文借助 ChatGPT 的建议,我们快速诊断 Nginx 日志中的恶意请求;利用 Nginx 配置实现接口限速;引入 Fail2Ban 实现动态封禁了33个恶意IP,让个人服务器恢复正常。

借助 AI 和自动化工具,我们可以用更低的成本,保证服务器的安全,优秀的运维工程师,也是善用各类工具,提升服务器的稳定性,AI技术的进步,让并不专精的运维的开发者,也能快速找到合适工具,加固个人服务器,避免不必要的流量和算力浪费。


http://www.hkcw.cn/article/bMwRltnuDX.shtml

相关文章

数论算法入门

目录 模运算 快速幂 gcd和lcm exgcd 同余与逆元 模运算 快速幂 迭代&#xff08;原理&#xff1a;位运算&#xff09; #include <iostream> using namespace std; int power(int a, int n) {int ans 1;while (n){if (n % 2 1){ans * a;}n / 2;a * a;}return ans…

RocketMQ 消息发送核心源码解析:DefaultMQProducerImpl.send () 方法深度剖析

引言 在分布式系统中&#xff0c;消息队列是实现异步通信、服务解耦和流量削峰的关键组件。Apache RocketMQ 作为一款高性能、高可靠的消息中间件&#xff0c;被广泛应用于各类互联网场景。其中&#xff0c;消息发送是最基础也是最重要的功能之一。本文将深入剖析 RocketMQ 中…

计算机视觉NeRF

NeRF与3DGS学习 NeRF计算机视觉的问题NeRF定义神经辐射场场景表示基于辐射场的体渲染分层采样优化神经辐射场 基础知识初始化SFM基础矩阵 & 本质矩阵 & 单应矩阵从已经估得的本质矩阵E&#xff0c;恢复出相机的运动R,tSVD 分解 NeRF NeRF资源 计算机视觉的问题 计算…

分班 - 华为OD统一考试(JavaScript 题解)

华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 针对刷题难&#xff0c;效率慢&#xff0c;我们提供一对一算法辅导&#xff0c; 针对个人情况定制化的提高计划&#xff08;全称1V1效率更高&#xff09;。 看…

CVE-2021-28169源码分析与漏洞复现(Jetty信息泄露)

漏洞概述 漏洞名称&#xff1a;Jetty ConcatServlet 多重解码导致 WEB-INF 敏感信息泄露 漏洞编号&#xff1a;CVE-2021-28169 CVSS 评分&#xff1a;7.5 影响版本&#xff1a; Jetty 9.4.0 - 9.4.39Jetty 10.0.0 - 10.0.1Jetty 11.0.0 - 11.0.1 修复版本&#xff1a;Jetty ≥…

CLion调试无法触发断点

CLion 调试时执行的是cmake-build-release目录中的exe&#xff0c;无法触发断点 这里配置要选择Debug&#xff0c;不要选择Release

2024年数维杯国际大学生数学建模挑战赛C题时间信号脉冲定时噪声抑制与大气时延抑制模型解题全过程论文及程序

2024年数维杯国际大学生数学建模挑战赛 C题 时间信号脉冲定时噪声抑制与大气时延抑制模型 原题再现&#xff1a; 脉冲星是一种快速旋转的中子星&#xff0c;具有连续稳定的旋转&#xff0c;因此被称为“宇宙灯塔”。脉冲星的空间观测在深空航天器导航和时间标准维护中发挥着至…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | Sound Board(音响控制面板)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— SoundBoard 组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ &#x1f3af; 组件目标 实现一个响应式按钮面板&#xff0c;点…

【目标检测数据集】电动车驾驶员戴头盔相关数据集

一、TWHD 数据集 介绍 随着国家惩治行车不戴头盔违法行为的力度不断加大&#xff0c;双轮车&#xff08;电动车与摩托车&#xff09;头盔检测任务也越来越重要。双轮车佩戴头盔检测数据集&#xff08;two wheeler helmet dataset&#xff0c;TWHD&#xff09;收集了来自开源数…

【机器学习基础】机器学习入门核心:数学基础与Python科学计算库

机器学习入门核心&#xff1a;数学基础与Python科学计算库 一、核心数学基础回顾1. 函数与导数2. Taylor公式3. 概率论基础4. 统计量5. 重要定理6. 最大似然估计&#xff08;MLE&#xff09;7. 线性代数 二、Python科学计算库精要1. NumPy&#xff1a;数值计算核心2. SciPy&…

【存储基础】SAN存储基础知识

文章目录 1. 什么是SAN存储&#xff1f;2. SAN存储组网架构3. SAN存储的主要协议SCSI光纤通道&#xff08;FC&#xff09;协议iSCSIFCoENVMe-oFIB 4. SAN存储的关键技术Thin Provision&#xff1a;LUN空间按需分配Tier&#xff1a;分级存储Cache&#xff1a;缓存机制QoS&#x…

缓解颈部不适的营养补给之道

对于颈部常有不适的人群而言&#xff0c;合理的营养补充是维持身体良好状态的重要方式。日常饮食中&#xff0c;蛋白质是不容小觑的营养元素。瘦肉、蛋类、奶类以及豆制品都是优质蛋白质的来源&#xff0c;它们能够帮助增强肌肉力量&#xff0c;为颈部提供更好的支撑。​ 维生…

ck-editor5的研究 (6):进一步优化页面刷新时,保存提示的逻辑

文章目录 一、前言二、实现步骤1. 第一步: 引入 PendingActions 插件2. 第二步&#xff1a;注册事件3. 第三步&#xff1a;点击保存按钮时&#xff0c;控制状态变化 三、测试效果和细节四、总结 一、前言 在上一篇文章中 ck-editor5的研究 (5)&#xff1a;优化-页面离开时提醒…

手机归属地查询接口如何用Java调用?

一、什么是手机归属地查询接口&#xff1f; 是一种便捷、高效的工具&#xff0c;操作简单&#xff0c;请求速度快。它不仅能够提高用户填写地址的效率&#xff0c;还能帮助企业更好地了解客户需求&#xff0c;制定个性化的营销策略&#xff0c;降低风险。随着移动互联网的发展…

列表推导式(Python)

[表达式 for 变量 in 列表] 注意&#xff1a;in后面不仅可以放列表&#xff0c;还可以放range ()可迭代对象 [表达式 for 变量 in 列表 if 条件]

【机器学习|评价指标4】正预测值(PPV)、负预测值(NPV)、假阴性率(FNR)、假阳性率(FPR)详解,附代码。

【机器学习|评价指标4】正预测值&#xff08;PPV&#xff09;、负预测值&#xff08;NPV&#xff09;、假阴性率&#xff08;FNR&#xff09;、假阳性率&#xff08;FPR&#xff09;详解&#xff0c;附代码。 【机器学习|评价指标4】正预测值&#xff08;PPV&#xff09;、负预…

【Delphi】实现在多显示器时指定程序运行在某个显示器上

在多显示器时代&#xff0c;经常会出现期望将程序运行在某个指定的显示器上&#xff0c;特别是在调试程序的时候&#xff0c;期望切换分辨率&#xff0c;单步调试时&#xff0c;此时容易导致互相卡住&#xff0c;非常不方便&#xff0c;但是通过指定程序运行在不同的显示器上就…

渗透实战PortSwigger Labs AngularJS DOM XSS利用详解

本Lab学习到关于AngularJS的 xss 漏洞利用 直接输入回显页面&#xff0c;但是把<>进了 html 编码了 当我们输入{{11}}&#xff0c;没有当作字符处理&#xff0c;而是执行了 {{}} 是多种前端框架&#xff08;如 Vue、Angular、Django 模板等&#xff09;中常见的模板插值语…

配置刷新技术

FPGA 片上三模冗余( TMR) 设计结合配置刷新( Scrubbing) 的防护方法能够有效地提高系统的抗单粒子翻转性能。 三模冗余的方法利用模块三冗余及三取二自动表决来掩蔽错误&#xff0c;但是如果错误积累到一定程度&#xff0c;导致同时有两个或两个以上模块发生翻转错误&#xff0…

计算机科技笔记: 容错计算机设计05 n模冗余系统 其他复杂结构

目录 NMR变体动态冗余系统混合冗余系统筛除新系统 NMR变体 V是表决器 动态冗余系统 优点像N模并行系统&#xff0c;后边加一个故障检测和系统重构百分之90以上的故障都是瞬时故障&#xff0c;检测到故障重新运行即可如果出现老化&#xff0c;可以用Spare-1替代 混合冗余系…