通过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
开源改变生活
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架