首页 > 系统相关 >通过Nginx日志检测异常ip并封禁

通过Nginx日志检测异常ip并封禁

时间:2024-08-23 19:26:43浏览次数:12  
标签:封禁 http log Nginx ip access nginx txt

需求来源

从攻防演练中获得灵感,不需要使用其他防火墙即可实现异常ip拦截

nginx.conf增加配置

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for""$upstream_addr"';
 access_log  /var/log/nginx/access.log  main;   

相关说明解释:
r e m o t e a d d r 与 remote_addr 与 remotea​ddr与http_x_forwarded_for 用以记录客户端的ip地址
$http_x_forwarded_for 这个似乎取不到值!!!
$remote_user :用来记录客户端用户名称
$time_local : 用来记录访问时间与时区
$request : 用来记录请求的url与http协议
$status : 用来记录请求状态;成功是200
$body_bytes_s ent :记录发送给客户端文件主体内容大小
$http_referer :用来记录从那个页面链接访问过来的
$http_user_agent :记录客户端浏览器的相关信息
其实nginx access日志的格式不是一成不变的,是可以自定义的
在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式

shell脚本内容

#!/bin/bash
nginx_access_log=<nginx_log_path>
ip=<nginx_log_path>/ip.txt
# 输出当前时间一个小时前的时间,并转为 02/Aug/2024:11:36,不加en_US.UTF-8时间会变成中文
current_time=$(LC_TIME=en_US.UTF-8 date -d "1 hour ago" "+%d/%b/%Y:%H")
# 输出当前时间一分钟前的时间
grep "\[$current_time" $nginx_access_log | awk '{print $1}' | sort | uniq -c  > ip.txt
for i in $(awk '{print $1}' ip.txt)
do
  if [ $i -gt 500 ]; then # 设置的阈值为一小时500
    denyip=$(grep -F $i ip.txt | awk '{print $2}')  # 获取请求量超过500的ip
    iptables -I INPUT -s $denyip -j DROP  # iptables添加黑名单
    echo $denyip > denyip.txt # 记录写入黑名单的ip
  fi
done

测试

请求测试系统

while true; do curl http://127.0.0.1; done

在这里插入图片描述

查看nginx日志

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c

在这里插入图片描述

查看被封禁的ip

在这里插入图片描述

标签:封禁,http,log,Nginx,ip,access,nginx,txt
From: https://blog.csdn.net/weixin_43514003/article/details/141472746

相关文章

  • Docker安装Nginx
    第一步:拉取镜像可指定版本,也可不写,则为默认最新版本第二步:拷贝配置文件首先运行容器dockerrun-d--namenginx-p8082:8082nginx然后复制配置文件到宿主机文件夹,此处的宿主文件夹为自己手动创建,即为D:/usr/nginx/conf#将容器nginx.conf文件复制到宿主机dock......
  • 重头开始嵌入式第二十六天(Linux系统编程 进程间通信 IPC)
    目录IPC进程间通信1.管道通信管道的特性使用流程无名管道1.创建并打开管道:2.无名管道的读写:3.关闭管道: close();4.使用例子:有名管道1、创建:mkfifo2、打开有名管道 open3、管道的读写: 文件IO4、关闭管道:5、卸载管道:remove();IPC进程间通信进程间通信(In......
  • HCIP可以直接考吗?一文带你了解HCIP考试攻略
    如今,各种专业认证成为了衡量技术人员能力的重要标尺。其中,华为认证ICT专家HCIP作为业界公认的权威认证之一。那么,HCIP是否可以直接考呢?下面小编将为你详细解答,并带你深入了解HCIP认证。一、HCIP认证的报考条件虽然HCIP没有强制要求考生必须先通过HCIA(华为认证ICT工程师......
  • 批量检测微信小程序封禁状态的示例代码以及接口
    以下是一个PHP脚本示例,演示了如何批量检查多个微信小程序的封禁状态。您只需要将示例中的`appid1`,`appid2`,`appid3`替换为您实际的小程序应用ID,即可获取各个小程序的状态信息。```php<?php//需要检查的小程序AppID列表$appIds=array('appid1','appid2','a......
  • [2027届]NOIP2024模拟赛#5
    %%%Larunatrecy比赛链接榜:打得还行吧。T1光理解题意就看了10min,理解以后写了写有手就行的暴力。赛后发现输出-1能多拿10分,惨痛错过呜呜呜。正解的话,我们给每个节点定义两个指标:\(a:\)即使加入一条入边也依旧存在一种合法的\(W\)。\(b:\)即使加入一条出边也依旧存......
  • docker对的tomcat、mysql、redis、nginx的安装
    本章篇章主要讲解了docker对常用软件的安装说明总体步骤:搜索镜像、拉取镜像、查看镜像、启动镜像、停止容器、移除容器tomcatdockerseachertomcat//也可以在dockerhub上面查找tomcat镜像dockerpulltomcat从dockerhub上拉取tomcat镜像到本地dockerimages//查看是否......
  • 【JavaScript系列】认识浏览器
    一、浏览器的工作原理1.1域名与IP地址1.2入口文件index.html二、认识浏览器内核2.1什么是浏览器内核2.2常见的浏览器内核三、浏览器渲染整体过程3.1HTML的解析过程3.2解析生成CSS规则3.3构建RenderTree3.3.1注意事项......
  • 【JavaScript系列】原型继承和原型链
    原创IT知识一享原型继承在JavaScript中,每个函数都有一个特殊的属性叫做prototype(原型)。当你用new关键字来创建一个对象实例时,这个实例会自动关联到构造函数的prototype上。constPerson=function(firstName,birthYear){this.firstName=firstName;this.bi......
  • [2027届]NOIP2024模拟赛#4
    比赛链接先看榜:倒数呜呜呜。T1最简单的一道题,但是我在看到T2以后就先鸽了,然后就一直鸽了……简单来想,每次询问只会改变两个数字,所以与处理之后直接和最后的数字一一对应后就可以做到正确的复杂度。T2就是这道题,卡了我3H……一开始看到的时候直接思路明确。但是规律找的......
  • 01JavaScript
    JavaScript基础-第1天了解变量、数据类型、运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程。体会现实世界中的事物与计算机的关系理解什么是数据并知道数据的分类理解变量存储数据的“容器”掌握常见运算符的使用,了解优先级关系知道JavaS......