通过Nginx抓取分析异常请求

复制代码
Ng日志格式

log_format access '[$remote_addr] [$remote_port] [$remote_user] [$http_cookie] [$time_local] [$request] [$http_host]'
           '[$request_method] [$http_x_forwarded_for] [$status] [$upstream_status] [$body_bytes_sent] [$http_referer]'
           '[$http_user_agent] [$upstream_addr] [$request_time] [$upstream_response_time]';


nginx.sh

#!/bin/sh
set -eu

#### define
# 可信字符串
trust_str=(
    "favicon"
    "noAuthHome"
    "pages"
)

# 定义访问日志
access_log=/tengine/logs/access-sbf.log

# 过滤时间每隔1小时 22/Feb/2022:10
#interval_hour=$(date +%d/%b/%Y:%H)
interval_hour=$(date +%d/%b/%Y)

# 时间戳
t_str=$(date +%F:%T)

#### main
rm -rf rst/ tmp/

if test ! -d tmp; then
    mkdir -p tmp
fi

if test ! -d rst; then
    mkdir -p rst 
fi 

# 生成可信过滤字符串
filter_str=$(echo ${trust_str[@]}|tr [:space:] '|')

# 过滤当前小时内的访问日志
grep -w "${interval_hour}" ${access_log} >tmp/t_${t_str}

# 过滤出不可信日志
awk -F'[][]' '{print $2,$12,$20}' tmp/t_${t_str} |egrep -vw "${filter_str}/" |sort >tmp/t_${t_str}_v1
#删除空白行
sed '/^  $/d' tmp/t_${t_str}_v1 > tmp/t_${t_str}_v1_new

# 根据ip访问次数排序
cat tmp/t_${t_str}_v1_new | cut -d" " -f1,2|sort |uniq -c|sort -rn >rst/rst_${t_str}

# 异常IP请求信息
ips=`cat tmp/t_${t_str}_v1_new | cut -d" " -f1`
for ip in $ips
do
  grep -ri $ip tmp/t_${t_str}  >> tmp/t_${t_str}_v2
done

#分析异常IP请求信息
awk -F[][] '{print $12,$20}' tmp/t_${t_str}_v2 | sort | uniq -c | sort -rn > tmp/t_${t_str}_v2_new
复制代码

 

posted @   shiyunyier  阅读(359)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示