chatgpt脚本系列 - 通过分析nginx日志检测可疑的攻击行为

news/2025/2/11 12:22:19/文章来源:https://www.cnblogs.com/brian-sun/p/18709514

analysis_nginx.sh

#!/bin/bash# 定义日志文件的路径
ACCESS_LOG="/var/log/nginx/access.log"
ERROR_LOG="/var/log/nginx/error.log"# 定义阈值
THRESHOLD=100  # 同一 IP 地址发起的超过此数量的请求视为异常
TIME_FRAME=600  # 以秒为单位的时间范围(例如,10 分钟)# 获取最近 TIME_FRAME 内的日志记录
RECENT_LOG=$(date --date="$TIME_FRAME seconds ago" +"%Y-%m-%dT%H:%M:%S")# 检查是否存在潜在攻击的 IP
echo "检测来自相同 IP 的大量请求..."
suspicious_ips=$(awk -v timeframe="$RECENT_LOG" '$4 > timeframe {print $1}' $ACCESS_LOG | sort | uniq -c | sort -nr | awk -v threshold=$THRESHOLD '$1 > threshold {print $2}')if [ -z "$suspicious_ips" ]; thenecho "没有检测到异常的大量请求。"
elseecho "发现潜在攻击的 IP 地址:"echo "$suspicious_ips"
fi# 检查多次失败的登录尝试(假设访问 /wp-login.php 等为失败登录尝试)
echo "检测多次失败的登录尝试..."
failed_logins=$(grep -i "login" $ACCESS_LOG | awk '{print $1}' | sort | uniq -c | sort -nr | awk -v threshold=$THRESHOLD '$1 > threshold {print $2}')if [ -z "$failed_logins" ]; thenecho "没有检测到多次失败的登录尝试。"
elseecho "发现多次失败的登录尝试 IP 地址:"echo "$failed_logins"
fi# 检查访问不存在或敏感文件的情况
echo "检测访问不存在或敏感文件的情况..."
sensitive_files=("admin" "wp-admin" "phpmyadmin" "etc/passwd" "error.log" "access.log")
for file in "${sensitive_files[@]}"; domatches=$(grep "$file" $ACCESS_LOG)if [ ! -z "$matches" ]; thenecho "发现访问敏感文件 '$file' 的记录:"echo "$matches"fi
done# 检查 error.log 中的错误记录
echo "分析 error.log 中的错误记录..."
error_entries=$(grep -iE "error|failed|denied" $ERROR_LOG)if [ -z "$error_entries" ]; thenecho "没有发现错误记录。"
elseecho "发现以下错误记录:"echo "$error_entries"
fi# 统计各个 IP 的访问频次
echo "统计各个 IP 的访问频次..."
awk '{print $1}' $ACCESS_LOG | sort | uniq -c | sort -nr > ip_frequency.txtecho "访问频次统计已完成,结果保存在 ip_frequency.txt 文件中。"
echo "前 10 个访问频次最高的 IP:"
head -n 10 ip_frequency.txtecho "日志分析完成。"

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

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

相关文章

mysql 系统变量

前言 简单介绍一下mysql的系统变量 正文 当我们之间查看mysql的系统变量的时候呢? 我们使用show variables,这样我们就可以查看到系统变量。 但是这样显然是没有意义的。可以看到很多很多的系统变量,如果想查具体的,那么就是: SHOW VARIABLES LIKE default_storage_engine又…

批量PDF文件转Word,免费!

今天推荐一款免费的PDF文件转换工具,它包括了PDF压缩、PDF转Word、PDF转Excel、提取PDF中图片等功能,下载地址在文末。 操作步骤 1、打开PDF转换工具,点击菜单PDF转Word,如下图2、添加需要转换的PDF文件,支持批量添加多个文件一起进行转换,如果一个目录下面的所有文件都需…

【博主亲测可用】科学计算软件:Wolfram Mathematica 14.2.0(附软件包及安装教程)

软件介绍 Wolfram Mathematica 14.2.0是一款功能全面且强大的数学计算与分析软件,它在大数据处理、人工智能集成、符号数组功能扩展、图形和可视化改进以及性能提升方面都有显著的增强。这些改进不仅使用户能够更高效地进行数据分析和科学计算,还极大地提升了用户体验。无论是…

硅基流动

使用硅基流动+Cherry ai部署 硅基流动网站:https://cloud.siliconflow.cn/i/OIItglHJ 邀请码:OIItglHJ 首次注册免费2000万Tokens Cherry ai网站:https://cherry-ai.com/download第一步,登入硅基流动网站,注册后 在左边选择api密钥,右上角选择新建api密钥新建后点击密钥…

Windows系统安装Ollama超简教程(附DeepSeek R1实战)

一、Ollama下载指引 官网地址:https://ollama.com/download选择Windows版本直接下载(推荐64位系统),安装包745MB左右,支持Win10/11系统。点击"Download for Windows"按钮即可开始下载。 二、安装过程详解双击下载的OllamaSetup.exe点击install之后,一路下一步就…

部署milvus2.5.3(standalone模式)

环境:os:Centos 7milvus:2.5.31.创建部署目录mkdir -p /home/middle/milvus2.准备docker-compose.yml配置文件内如如下: 我这里使用的是自己的镜像,需要根据自己环境情况进行修改[root@host135 milvus]# more docker-compose.yml version: 3.5services:etcd:container_name: m…

[书]清华大学DeepSeek:从入门到精通

通过网盘分享的文件:清华大学DeepSeek:从入门到精通.pdf等3个文件链接: https://pan.baidu.com/s/1y0-b3seTz7gMTTuPxYS7Vg?pwd=xd25 提取码: xd25一共三本资料

六. UML

UML 一. 事物 1.结构事物 结构事物是UML模型中的名词。它们通常是模型的静态部分,描述概念或物理元素。结构事物包括类(Class)、接口(Interface)、协作(Collaboration)、用例(Use Case)、主动类(Active Class)、构件(Component)、制品( Artifact)和结点(Node)。 各种结构事物的…

探索 QuestPDF:全平台支持、多功能、专业级的 .NET PDF 库

QuestPDF 是一个用于生成 PDF 文件的 .NET 库,它提供了一个简洁的 API 和灵活的布局选项,使得在 .NET 应用程序中创建 PDF 文件变得更加简单。 支持多平台,支持的功能有合并文档 附加文件 提取页面 加密/解密 扩展元数据 限制访问 针对 Web 进行优化 叠加层 / 底层安装 第一…

Java 中堆内存和栈内存上的数据分布和特点

说到 Java 中内存我们一般笼统地划分为堆内存(Heap)和栈内存(Stack),那么哪些数据被放置在堆内存?哪些数据被放置在栈内存?这些数据的分布有什么特点吗?博客:https://www.emanjusaka.com 博客园:https://www.cnblogs.com/emanjusaka 公众号:emanjusaka的编程栈by em…

AspNetCore 实战:三种流式响应机制详解

在现代Web应用中,实时数据传输和高效的数据流处理变得越来越重要。AspNetCore 提供了多种流式响应机制,以满足不同场景下的需求。 在使用ChatGpt,deepseek的适合有没有想过ai的逐字显示回答是怎么实现的,下面将介绍三种主要的流式响应来实现此功能。 Server-Sent Events (S…

java中反射-字节码和类加载器

多态的一个表现 子类类型赋值给父类 Father f1 = New Son() 调用子类方法报错。 调用父类方法OK。这个就是多态 一个对象能用什么方法,并不是取决于 它有什么方法。 而是取决于引用变量的类型(也就是取决于它声明的类型,Father类型) 它能够用的方法,一定是Father中的方法。 …