服务器深夜告警?可能是攻击前兆!

凌晨三点,刺耳的告警铃声把你从梦中惊醒:服务器CPU 100%,内存耗尽!你手忙脚乱地登录服务器,发现某个进程疯狂占用资源。是程序Bug?还是业务突增?排查半天,最后在角落的日志里发现蛛丝马迹——你的服务器正在遭受攻击!这种资源被“悄悄”耗尽的攻击,往往比直接的流量洪峰更难察觉,危害却同样巨大。本文将深入探讨这类资源消耗型攻击的原理,并提供一个实用的监控脚本,助你早发现、早处置。

一、资源消耗型攻击:服务器“慢性中毒”

这类攻击的核心不是瞬间打垮网络带宽,而是通过持续消耗服务器关键资源(CPU、内存、进程数、磁盘IO、数据库连接),导致服务逐渐不可用。常见类型:

  1. 进程/连接耗尽攻击:

    • 原理: 攻击者快速建立大量TCP连接(如HTTP半连接、数据库连接)或启动大量进程/线程,但不完成正常交互,使服务器达到最大连接/进程限制,拒绝为真实用户服务。
    • 现象: netstat 显示大量 SYN_RECV, ESTABLISHED(但无数据传输), TIME_WAIT 状态连接;ps/top 显示进程数激增;应用报“Too many open files”或“Connection pool exhausted”错误。
    • 隐蔽性: 初期资源消耗缓慢上升,易与正常业务增长混淆;攻击停止后残留的连接/进程需要时间释放,影响持续。
  2. CPU/内存耗尽型攻击:

    • 原理:
      • 恶意计算: 利用服务器执行高复杂度运算(如故意构造消耗CPU的加密/解密、正则匹配)。
      • 内存泄漏诱导: 通过特定请求触发应用程序的内存泄漏Bug。
      • 文件描述符耗尽: 大量打开文件但不关闭,间接导致内存耗尽或新连接失败。
    • 现象: top/htop 显示某个用户或进程持续高占CPU/MEM;系统 Load Average 飙升;free 显示可用内存持续减少直至OOM Killer触发。
    • 隐蔽性: 单个请求消耗可能不大,但海量请求累加效果显著;内存泄漏初期不易察觉。
  3. 磁盘IO型攻击:

    • 原理: 疯狂写入日志文件、临时文件,或进行大量小文件读写,耗尽磁盘IOPS或空间。
    • 现象: iostat 显示磁盘利用率持续100%;df 显示磁盘空间骤减;应用报“No space left on device”。
    • 隐蔽性: 磁盘写操作相对CPU/内存消耗更不易被实时监控注意到,直到空间告警或IO阻塞。

二、实战:Bash脚本监控关键资源指标,触发预警

被动等待告警太迟。以下Bash脚本定期检查关键资源指标(CPU Load, 内存使用率, TCP连接数, 进程数),在超过设定阈值时发出告警(示例为打印到屏幕和syslog,可集成邮件/微信告警)。

#!/bin/bash
# resource_monitor.sh - 关键服务器资源消耗监控告警脚本# 配置告警阈值 (根据服务器配置调整)
LOAD_THRESHOLD=5.0         # 15分钟平均负载告警阈值
MEM_PERCENT_THRESHOLD=90   # 内存使用率百分比告警阈值
TCP_CONN_THRESHOLD=3000    # ESTABLISHED状态TCP连接数告警阈值
PROCESS_THRESHOLD=1000     # 总进程数告警阈值# 获取当前时间戳
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")# 1. 获取15分钟平均负载
LOAD_15=$(uptime | awk -F 'load average: ' '{print $2}' | awk -F, '{print $3}' | tr -d ' ')
# 转换为浮点数比较
LOAD_15_FLOAT=$(echo "$LOAD_15" | bc -l)# 2. 获取内存使用率百分比 (使用free命令)
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEM_USED=$(free -m | awk '/Mem:/ {print $3}')
# 计算使用率百分比 (保留整数)
MEM_PERCENT=$(( (MEM_USED * 100) / MEM_TOTAL ))# 3. 获取ESTABLISHED状态TCP连接数 (更关注活动连接)
TCP_ESTABLISHED=$(ss -ant | grep 'ESTAB' | wc -l)# 4. 获取总进程数
PROCESS_COUNT=$(ps -e --no-headers | wc -l)# 初始化告警信息变量
ALARM_MESSAGE=""# 检查阈值并构建告警信息
if (( $(echo "$LOAD_15_FLOAT > $LOAD_THRESHOLD" | bc -l) )); thenALARM_MESSAGE+="[高负载] 15分钟负载: $LOAD_15 (阈值: $LOAD_THRESHOLD)\n"
fiif [ "$MEM_PERCENT" -gt "$MEM_PERCENT_THRESHOLD" ]; thenALARM_MESSAGE+="[高内存] 内存使用率: ${MEM_PERCENT}% (阈值: ${MEM_PERCENT_THRESHOLD}%)\n"
fiif [ "$TCP_ESTABLISHED" -gt "$TCP_CONN_THRESHOLD" ]; thenALARM_MESSAGE+="[高连接] ESTABLISHED连接数: $TCP_ESTABLISHED (阈值: $TCP_CONN_THRESHOLD)\n"
fiif [ "$PROCESS_COUNT" -gt "$PROCESS_THRESHOLD" ]; thenALARM_MESSAGE+="[高进程] 总进程数: $PROCESS_COUNT (阈值: $PROCESS_THRESHOLD)\n"
fi# 如果有告警,则输出并记录到syslog
if [ -n "$ALARM_MESSAGE" ]; thenecho -e "=== 资源告警 ($TIMESTAMP) ===\n$ALARM_MESSAGE"logger -t "ResourceMonitor" -p local0.warning "$(echo -e "资源告警:\n$ALARM_MESSAGE")"
fi# 可选:定期输出到控制台或日志文件查看
echo "[$TIMESTAMP] Load15: $LOAD_15, Mem%: ${MEM_PERCENT}%, Conn: $TCP_ESTABLISHED, Procs: $PROCESS_COUNT" >> /var/log/resource_monitor.log

使用说明:

  1. 将脚本保存为 resource_monitor.sh
  2. 赋予执行权限:chmod +x resource_monitor.sh
  3. 修改脚本开头的阈值 (LOAD_THRESHOLD, MEM_PERCENT_THRESHOLD, TCP_CONN_THRESHOLD, PROCESS_THRESHOLD) 以适应你的服务器规格。
  4. 使用 cron 定时任务定期执行(例如每分钟):
    • 编辑crontab:crontab -e
    • 添加一行:* * * * * /path/to/resource_monitor.sh >/dev/null 2>&1
  5. 告警信息:
    • 会在超过阈值时打印到标准输出(如果cron配置了邮件发送,会收到邮件)。
    • 会记录到系统syslog (/var/log/syslog/var/log/messages),标签为 ResourceMonitor,优先级 local0.warning
    • 所有采样点的数据会追加记录到 /var/log/resource_monitor.log(可选,用于趋势查看)。
  6. 进阶集成: 可以将 logger 行替换为调用邮件发送脚本、微信/钉钉机器人API等实现实时告警推送。

三、从监控到防御:构建资源保护屏障

监控是发现问题的眼睛,但要有效预防资源耗尽型攻击,需要更主动的防御策略:

  • 应用层智能限速与资源隔离: 针对慢速CC攻击、恶意计算等,需要在应用层或网关层实施精细化的访问控制和资源限制。群联AI云防护不仅能识别恶意流量进行阻断,其智能限速引擎可以精准区分正常用户和恶意爬虫/攻击工具。它能根据IP、Session、URL等多个维度动态设置请求速率、并发连接数、请求内容长度等限制,有效防止单个或少量攻击者耗尽服务器进程、连接或CPU资源。其资源隔离机制也能确保一个被攻击的应用不会拖垮同服务器上的其他服务。
  • 超大流量攻击的终极防线: 当攻击规模超出单点防御能力,特别是超大流量DDoS攻击直接冲击服务器带宽和基础设施时,本地资源监控和WAF可能失效。此时必须将攻击流量引流高防IP服务正是为此而生。通过将域名解析或业务IP指向群联提供的高防IP地址,所有访问流量首先经过其全球分布式清洗中心。中心拥有海量带宽和先进的清洗设备,能够实时检测并过滤掉攻击流量,仅将纯净的正常流量转发回你的源服务器。这相当于在攻击者和你的真实服务器之间筑起了一道“护城河”,无论攻击流量多大、类型多复杂,源服务器都能保持稳定运行,资源不再被无谓消耗。

总结:

资源消耗型攻击如同服务器的“慢性毒药”,初期症状隐匿,一旦爆发后果严重。建立完善的资源监控体系(如本文的脚本)是及时发现异常的关键。然而,要真正做到预防,必须主动出击:在应用层利用群联AI云防护的智能限速和资源隔离能力,精准扼杀耗尽资源的恶意请求;在基础设施层,为关键业务部署高防IP,确保在面对超大流量冲击时,源服务器的核心资源(带宽、连接处理能力)不被耗尽。只有将监控、智能应用防护和高防清洗有机结合,才能让你的服务器在复杂的网络环境中保持健康稳定,远离“深夜告警”的困扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88607.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重学前端003 --- CSS 颜色

文章目录文档声明head颜色模型div根据在这里 Freecodecamp 实践&#xff0c;记录笔记总结。 文档声明 在文档顶部添加 DOCTYPE html 声明 <!DOCTYPE html>head title 元素为搜索引擎提供了有关页面的额外信息。 它还通过以下两种方式显示 title 元素的内容&#xff1a…

学弟让我帮忙写一个学生管理系统的后端,我直接上科技

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、飞算AI简介 二、系统开发 2.1 需求提出 2.2 系统模块的设计 2.3 数据库表格设计 2.4 接口规范设计 2.5 源码生成 三、总结 学弟这两天有一个小组合作的任务&#xff0c;应该是培训吧要写一个学生管理…

《P3038 [USACO11DEC] Grass Planting G》

题目描述 给出一棵有 n 个节点的树&#xff0c;有 m 个如下所示的操作&#xff1a; 将两个节点之间的 路径上的边 的权值均加一。 查询两个节点之间的 那一条边 的权值&#xff0c;保证两个节点直接相连。 初始边权均为 0。 输入格式 第一行两个整数 n,m&#xff0c;含义…

NestJS

文章的地址 NestJShttps://equinox-primrose-ceb.notion.site/NestJS-22d4b8031e0f80b39fc7fe1ff111f802 不产生测试的.spec.ts文件的配置 "generateOptions": {"spec": false }创建模型 nest g m xx 创建服务 nest g s xx 创建处理 nest g c xx CRU…

vue入门学习教程

一、介绍 vue是一款用于构建用户界面的 JavaScript 框架。基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 二、使用和安装 方法1&#xff1a;在html代码中直接使用<script>导入&…

C++类对象多态基础语法【超详细】

文章目录前言1. 虚函数1.1 现象1.2 多态1.3 析构函数1.4 override和final1.5 重载、隐藏、重写对比2. 抽象类2.1 抽象类特性2.2 抽象类的应用场景3. 多态实现的底层原理4. 静态绑定和动态绑定5. 总结前言 多态是面向对象三大特性之一&#xff0c;也是细节最多的语法之一。学习…

Flask 入门到实战(3):用 SQLAlchemy 优雅操作数据库

深入理解 Flask ORM&#xff1a;用 SQLAlchemy 优雅操作数据库一、前言&#xff1a;什么是 ORM&#xff1f;为什么要用它&#xff1f; 传统数据库操作要写 SQL&#xff0c;比如&#xff1a; SELECT * FROM users WHERE id 1;而使用 ORM 后&#xff0c;你可以这样写&#xff1a…

源表=电源+数字表?一文看懂SMU源表 2025-04-14

源表(Source Meter Unit, SMU)广泛用于半导体器件、材料、医疗、发光器件与光通信等行业,测量器件的伏安(I-V)特性曲线、绝缘材料的电阻值(电阻率)、电容的绝缘电阻(漏电流)、光电器件的暗电流或者L-I-V等。 源表的名称已经清晰的告诉我们,它包含了高精度电源输出和…

单片机STM32F103:DMA的原理以及应用

STM32F103系列微控制器&#xff08;基于ARM Cortex-M3内核&#xff09;集成了**DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;**控制器&#xff0c;用于在存储器与外设、存储器与存储器之间高效传输数据&#xff0c;减少CPU的干预&#xff0c;从而…

Webview 中可用的 VS Code 方法

在 VS Code Webview 的 HTML 中&#xff0c;不能直接调用 VS Code 的 API&#xff08;如 vscode.window.showInformationMessage&#xff09;&#xff0c;但可以通过 acquireVsCodeApi() 获取一个受限的 vscode 对象&#xff0c;用于与插件主程序通信。以下是详细说明和示例&am…

Qt:布局管理器Layout

目录 布局管理器 QVBoxLayout QHBoxLayout QGirdLayout QFormLayout Spacer 布局管理器 在以往的界面操作上&#xff0c;都是程序员手动拖动控件来布局&#xff0c;这种方式有一些不足之处&#xff0c;比如不能很好的把握控件之间的距离&#xff0c;以及控件的大小&…

【Java编程动手学】深入剖析Java网络编程:原理、协议与应用

文章目录一、引言二、计算机网络基础1、计算机网络的概念2、网络地址的重要性三、套接字编程&#xff1a;网络通信的基石1、套接字的概念2、TCP通信编程示例四、TCP通信编程&#xff1a;可靠的数据传输1、TCP协议的特点2、实际应用中的TCP通信五、UDP通信编程&#xff1a;高效的…

vue3.2 前端动态分页算法

文章目录背景思路页面情况核心代码小结效果背景 1. 后台接口只是动态返回一个数组的数据&#xff0c;前端需要根据数据量的大小判断是否需要分页&#xff0c;页面高度固定2. 页面根据页数大小有不同的展示a. 只有一页 头部 内容 统计 尾部b. 多页i. 第一页 头部 内容 尾…

UC浏览器PC版自2016年后未再更新不支持vue3

win uc浏览器&#xff0c;点击页面触发异常。UC浏览器PC版自2016年后未再更新&#xff08;最新版本停留在Chromium 50内核&#xff09;。其内置内核版本较低&#xff08;如Trident/Blink旧版&#xff09;&#xff0c;无法支持Vue 3等现代前端框架的语法特性&#xff08;如ES6、…

亚古数据:澳大利亚公司的ABN和ACN号码是什么?

在跨国商业的迷宫中&#xff0c;了解目标市场的公司注册细节是一项不可或缺的技能。对于与中国企业有业务往来的朋友们来说&#xff0c;澳大利亚这片充满机遇的土地上&#xff0c;两个缩写——ABN与ACN&#xff0c;如同解锁合作之门的密钥&#xff0c;显得尤为重要。今天&#…

LangChain框架 Prompts、Agents 应用

目录 (Prompts)提示作用 Prompts 常见操作 基础 PromptTemplate 使用 Few-shot 提示模板 ChatPromptTemplate (对话提示模板) (Agents)代理作用 Agents 常见操作 基础 Agent 使用 自定义工具 Agent 高级应用示例 带记忆的对话代理 使用本地模型的代理 结构化输出代…

模拟实现unordered_map

1.定义unordered_map 是 C 标准库中的哈希表容器&#xff0c;特点是无序存储、平均 O (1) 时间复杂度的插入 / 查找 / 删除操作。其核心原理是通过哈希函数将关键字映射到哈希桶&#xff08;bucket&#xff09;&#xff0c;再通过链表或红黑树处理哈希冲突。2.实现原理1. 哈希表…

史上最详细Java并发多线程(面试必备,一篇足矣)

第一章&#xff1a;线程基础 1.1 线程与进程 进程&#xff1a;系统资源分配的基本单位&#xff0c;拥有独立的内存空间 线程&#xff1a;CPU调度的基本单位&#xff0c;共享进程内存空间 关系&#xff1a;一个进程可包含多个线程&#xff0c;线程切换成本远低于进程 1.2 线程的…

【DataFlow】数据合成流水线工具

1.整体解读 核心思想&#xff1a;以数据为中心的AI&#xff08;Data-Centric AI&#xff09; DataFlow 的核心目标是通过一系列自动化“流水线”&#xff08;Pipelines&#xff09;来处理和生成高质量的数据&#xff0c;从而提升大语言模型&#xff08;LLM&#xff09;在特定领…

Hangfire 调用报错解决方案总结

System.ArgumentNullException: 值不能为 null 错误在使用 Hangfire 时确实是一个常见问题&#xff0c;特别是在配置 Hangfire 服务器时。问题分析这个错误通常发生在以下情况&#xff1a;没有正确配置 Hangfire 服务器队列配置缺失或不正确连接字符串配置问题解决方案要点正确…