User nginx 写一个脚本,分析nginx的日志,自动将访问攻击路径的IP,放到nginx的黑名

本文主要是介绍User nginx 写一个脚本,分析nginx的日志,自动将访问攻击路径的IP,放到nginx的黑名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

要编写一个脚本分析 Nginx 日志并自动把特定路径访问者的 IP 地址加入黑名单,我们可以采用以下策略:

  1. 分析日志:定期分析 Nginx 日志文件以找到访问特定路径的 IP 地址。
  2. 更新黑名单:将这些 IP 地址添加到 Nginx 的黑名单配置中。
  3. 重新加载 Nginx 配置:每次更新黑名单后,重新加载 Nginx 配置以使更改生效。

首先,你需要确定 Nginx 日志的路径和格式。假设日志路径为 /var/log/nginx/access.log,并且使用的是 Nginx 的默认日志格式。

下面是一个基于 Bash 脚本的示例,它会分析日志,寻找访问 /sensitive-path 的 IP 地址,并将其添加到黑名单:

#!/bin/bash# 日志文件路径
LOG_PATH="/var/log/nginx/access.log"
# 黑名单配置文件路径
BLACKLIST_PATH="/etc/nginx/blacklist.conf"# 用于存储临时 IP 列表的文件
TEMP_IP_LIST="/tmp/temp_ip_list.txt"# 定义包含敏感关键字的数组
declare -a PATHS=("/etc/passwd" "/exec/" "/ad" "/sql" "/webservices" "/sh-swssjf-api/.elasticbeanstalk/")# 清空临时 IP 列表文件
> $TEMP_IP_LIST# 遍历所有敏感路径
for path in "${PATHS[@]}"
do# 搜索访问这些路径的 IP 地址,并追加到临时文件awk -v path="$path" '$7 ~ path {print $1}' $LOG_PATH | sort | uniq >> $TEMP_IP_LIST
done# 对 IP 列表去重
sort $TEMP_IP_LIST | uniq > $TEMP_IP_LIST.tmp
mv $TEMP_IP_LIST.tmp $TEMP_IP_LIST# 更新 Nginx 黑名单配置
while IFS= read -r ip
do# 检查 IP 是否已在黑名单中if ! grep -q $ip $BLACKLIST_PATH; then# 将 IP 添加到黑名单配置文件echo "deny $ip;" >> $BLACKLIST_PATHfi
done < "$TEMP_IP_LIST"# 重新加载 Nginx 配置使黑名单生效
nginx -s reload

说明:

  • 脚本首先使用 awk 分析日志文件,提取出访问 /sensitive-path 的 IP 地址,并去重后存储在一个临时文件中。
  • 然后,脚本读取临时文件中的每个 IP 地址,检查其是否已经在黑名单配置文件中。如果不在,就将其添加进去。
  • 最后,使用 nginx -s reload 命令重新加载 Nginx 配置,使得黑名单立即生效。

注意事项:

  • 确保 Nginx 的黑名单配置(/etc/nginx/blacklist.conf)已经包含在你的 Nginx 主配置文件中,通常在 http 块内包含如下:
    include /etc/nginx/blacklist.conf;
    
  • 此脚本需要适当的权限运行,可能需要 sudo 权限。
  • 根据实际日志格式和 Nginx 配置,可能需要调整脚本中的命令和路径。

这篇关于User nginx 写一个脚本,分析nginx的日志,自动将访问攻击路径的IP,放到nginx的黑名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904798

相关文章

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过