chatgpt脚本系列 - 通过分析nginx日志检测可疑的攻击行为
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" ]; then
echo "没有检测到异常的大量请求。"
else
echo "发现潜在攻击的 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" ]; then
echo "没有检测到多次失败的登录尝试。"
else
echo "发现多次失败的登录尝试 IP 地址:"
echo "$failed_logins"
fi
# 检查访问不存在或敏感文件的情况
echo "检测访问不存在或敏感文件的情况..."
sensitive_files=("admin" "wp-admin" "phpmyadmin" "etc/passwd" "error.log" "access.log")
for file in "${sensitive_files[@]}"; do
matches=$(grep "$file" $ACCESS_LOG)
if [ ! -z "$matches" ]; then
echo "发现访问敏感文件 '$file' 的记录:"
echo "$matches"
fi
done
# 检查 error.log 中的错误记录
echo "分析 error.log 中的错误记录..."
error_entries=$(grep -iE "error|failed|denied" $ERROR_LOG)
if [ -z "$error_entries" ]; then
echo "没有发现错误记录。"
else
echo "发现以下错误记录:"
echo "$error_entries"
fi
# 统计各个 IP 的访问频次
echo "统计各个 IP 的访问频次..."
awk '{print $1}' $ACCESS_LOG | sort | uniq -c | sort -nr > ip_frequency.txt
echo "访问频次统计已完成,结果保存在 ip_frequency.txt 文件中。"
echo "前 10 个访问频次最高的 IP:"
head -n 10 ip_frequency.txt
echo "查询各个 IP 的归属地..."
while read -r line; do
count=$(echo "$line" | awk '{print $1}')
ip=$(echo "$line" | awk '{print $2}')
response=$(curl -s "http://www.cip.cc/$ip")
location=$(echo "$response" | grep -oP '地址\s*:\s*\K.*?(?=\s*$)')
echo "$count $ip $location"
echo "$count $ip $location" >> ip_with_location.txt
sleep 2
done < ip_frequency.txt
echo "IP 归属地查询已完成,结果保存在 ip_with_location.txt 文件中。"
echo "日志分析完成。"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库