首页域名资讯 正文

Shell分析Nginx日志 找出被阻止的IP

2024-11-18 3 0条评论

在日常运维中会发现流量突增现象或者服务器负载升高等现象,为找到原因,需要使用nginx limit模块 对访问的Ip进行限制,然后可以分析日志。

配置nginx限制IP访问,可配置多个zone。

1      limit_req _zone $ binary_remote_addr zone = allips : 10m rate = 20r / s ;

对产生的nginx日志进行分析 脚本。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 #!/bin/bash # Author:ttBoy # website:www.trustauth.cn ##提供默认日志路径和名称 logsFile = “日志名称” ##配置多个zoneName zoneName = “allips name2 name3” ##生产临时文件存放目录 mkdir . / cache $ $ ##日志分析函数 fenxi ( ) { for zone in $ zoneName ; do      printf “\n当前报告是{ $zone }限制产生的:\n”      grep “$zone” $ logFile > . / cache $ $ / $ zone . log           printf “%-7s|%-12s|%-19s|%-20s|%-36s|%s\n” “序号” “次数” “IP地址” “IP归属” “时间范围”           ucount = 0 ;      ##过滤出访问的IP地址并排序去重,保证结果是由访问次数高到低排序      ip_list = $ ( egrep o “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” cache $ $ / $ zone . log | sort | uniq c | sort n r | awk ‘{print $2}’ )           for ip in $ ip_list ;      do          grep $ ip cache $ $ / $ zone . log > . / cache $ $ / temp . $ $ . log          tstart = ` cut c 19 . / cache $ $ / temp . $ $ . log | head 1 `          tend = ` cut c 19 . / cache $ $ / temp . $ $ . log | tail 1 `          let ucount ++          Attempts = ` cat . / cache $ $ / temp . $ $ . log | wc l `          time_range = “$tstart” “$tend”          ##通过138找到ip地址归属          ip138 = ` curl s “http://trustauth.cn/ips138.asp?ip=$ip&action=2” | iconv f gb2312 t utf 8 | grep | awk F ‘[<> ]+’ ‘{print substr($7,6)}’ `          ipwhere = ` echo $ ip138 | awk ‘{print $7}’ `          printf “%-5s|%-10s|%-17s|%-20s|%-33s|%s\n” “$ucount” “$Attempts” “$ip” “$ipwhere” “$time_range”      done done } ##可以手动输入日志文件或者执行默认分析 if [ “$1” = “” ] ; then      for logFile in $ logsFile ;      do          if [ f “$logFile” ]          then          printf “\n#############################################################\n”          printf “\n当前分析的日志文件: $logFile ,以下是生成的报告:\n”          else          echo “日志文件出错,请检查文件”          fi          echo “当前日志分析时间: `date`”          fenxi      done else      logFile = $ 1      printf “\n################################################################\n”      printf “\n当前分析的日志文件: $logFile ,以下是生成的报告:\n”      echo “当前日志分析时间: `date`”      fenxi fi rm rf cache $ $ /

 

文章转载来自:trustauth.cn

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/150754.html 发布于 2024-11-18
文章转载或复制请以超链接形式并注明出处。