chatgpe脚本系列 - 分析nginx攻击日志,并自动加入防火墙黑名单
脚本内容
#!/bin/bash
# 日志文件路径
LOG_FILE="/var/log/nginx/access.log"
# Fail2Ban 过滤器路径
FILTER_FILE="/etc/fail2ban/filter.d/nginx-http-auth.conf"
# 记录黑名单的日志文件
BLACKLIST_LOG="./auto_defender_ban_ips.log"
# 执行间隔
SLEEP_TIME=60
# 每分钟执行
while true; do
# 获取所有攻击 IP
ATTACK_IPS=$(fail2ban-regex "$LOG_FILE" "$FILTER_FILE" --print-all-missed | awk -F" " '{print $2}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort | uniq)
echo $ATTACK_IPS
for IP in $ATTACK_IPS; do
# 加入防火墙黑名单
firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"$IP\" port port=\"443\" protocol=\"tcp\" reject"
# 检查是否成功添加规则
if [ $? -eq 0 ]; then
# 记录添加时间和 IP 到日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - Blocked IP: $IP" >> "$BLACKLIST_LOG"
else
echo "Failed to block IP: $IP" >> "$BLACKLIST_LOG"
fi
done
# 重新加载防火墙规则
firewall-cmd --reload
# 每次循环后等待 1 分钟
sleep $SLEEP_TIME
done
2025-06-05 升级版本
通过文件配置白名单:ip_white_list.txt,格式:每行一个ip地址。如果在白名单中有此ip, 自动移除规则,并跳过加入规则;
需要把以下两个脚本放到一个目录中,并运行 auto_defender.sh
manager_ip_white_list.sh
#!/bin/bash
IP_WHITE_LIST_FILE=ip_white_list.txt
function remove_white_ip()
{
if [[ ! -f "$IP_WHITE_LIST_FILE" ]];then
echo "ip白名单文件不存在: $IP_WHITE_LIST_FILE, 创建空文件"
touch $IP_WHITE_LIST_FILE
else
while IFS= read -r IP;do
if [[ -z "$IP" || "$IP" =~ ^# ]]; then
echo "$IP is empty or commented, skip.."
continue
fi
if ! [[ "$IP" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
echo "$IP format error, skip.."
continue
fi
echo "check IP:$IP firewall status"
if firewall-cmd --list-all | grep -q "$IP"; then
echo "发现 IP $IP 在防火墙规则中,正在移除规则..."
firewall-cmd --permanent --remove-rich-rule="rule family=\"ipv4\" source address=\"$IP\" port port=\"443\" protocol=\"tcp\" reject"
firewall-cmd --permanent --remove-rich-rule="rule family=\"ipv4\" source address=\"$ip\" port port=\"80\" protocol=\"tcp\" reject"
fi
done < "$IP_WHITE_LIST_FILE"
firewall-cmd --reload
fi
}
remove_white_ip
manager_ip_white_list.sh
#!/bin/bash
# 日志文件路径
LOG_FILE="/var/log/nginx/access.log"
# Fail2Ban 过滤器路径
FILTER_FILE="/etc/fail2ban/filter.d/nginx-http-auth.conf"
# 记录黑名单的日志文件
BLACKLIST_LOG="./auto_defender_ban_ips.log"
# 执行间隔
SLEEP_TIME=60
IP_WHITE_LIST_FILE=ip_white_list.txt
# 每分钟执行
while true; do
# 自动删除白名单ip中的所有ip规则
bash manager_ip_white_list.sh
# 获取所有攻击 IP
ATTACK_IPS=$(fail2ban-regex "$LOG_FILE" "$FILTER_FILE" --print-all-missed | awk -F" " '{print $2}' | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | sort | uniq)
echo $ATTACK_IPS
for IP in $ATTACK_IPS; do
if [[ -f "$IP_WHITE_LIST_FILE" ]];then
if grep -qFx "$IP" "$IP_WHITE_LIST_FILE"; then
echo "IP $IP 在白名单 ($IP_WHITE_LIST_FILE) 中,禁止将 IP 添加到防火墙!"
continue
fi
fi
# 加入防火墙黑名单
firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"$IP\" port port=\"443\" protocol=\"tcp\" reject"
firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"$IP\" port port=\"80\" protocol=\"tcp\" reject"
# 检查是否成功添加规则
if [ $? -eq 0 ]; then
# 记录添加时间和 IP 到日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - Blocked IP: $IP" >> "$BLACKLIST_LOG"
else
echo "Failed to block IP: $IP" >> "$BLACKLIST_LOG"
fi
done
# 重新加载防火墙规则
firewall-cmd --reload
# 每次循环后等待 1 分钟
sleep $SLEEP_TIME
done
chatgpe脚本系列 - 分析nginx攻击日志,并自动加入防火墙黑名单的更多相关文章
- elk收集分析nginx access日志
elk收集分析nginx access日志 首先elk的搭建按照这篇文章使用elk+redis搭建nginx日志分析平台说的,使用redis的push和pop做队列,然后有个logstash_inde ...
- 采集并分析Nginx访问日志
日志服务支持通过数据接入向导配置采集Nginx日志,并自动创建索引和Nginx日志仪表盘,帮助您快速采集并分析Nginx日志. 许多个人站长选取了Nginx作为服务器搭建网站,在对网站访问情况进行分析 ...
- 使用hive分析nginx访问日志方法
以下案例是使用hive分析nginx的访问日志案例,其中字段分隔通过正则表达式匹配,具体步骤如下: 日志格式: 192.168.5.139 - - [08/Jun/2017:17:09:12 +080 ...
- python脚本分析nginx访问日志
日志格式如下: 223.74.135.248 [11/May/2017:11:19:47 +0800] "POST /login/getValidateCode HTTP/1.1" ...
- 利用GoAccess分析Nginx访问日志
原文链接:https://blog.csdn.net/yown/article/details/56027112 需求:及时得到线上用户访问日志分析统计结果,以便给开发.测试.运维.运营人员提供决策! ...
- GoAccess安装及分析nginx实时日志
GoAccess是一个基于终端的快速日志分析器.其核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器(如果您希望通过SSH快速分析访问日志,或者只是喜欢在终端中工作),终端输出是默 ...
- ELK7.4.0分析nginx json日志
ELK7.4.0单节点部署 环境准备 安装系统,数据盘设置为/srv 内核优化参考 我们需要创建elk专用的账号,并创建所需要的目录并授权 useradd elk; mkdir /srv/{app,d ...
- 命令分析nginx访问日志的用法
awk分析日志常用高级使用命令方法 分析访问日志(Nginx为例) 日志格式: '$remote_addr - $remote_user [$time_local] "$request&qu ...
- 使用 loki grafana 分析nginx 请求日志
loki 是类似prometheus 的log 可视化展示.收集系统,已经集成在grafana 6.0 版本中了 说明: 测试环境使用了docker-compose 运行 环境准备 docker-co ...
- logstash 分析nginx 错误日志
[root@dr-mysql01 frontend-error]# cat logstash_error.conf input { file { type => "zj_fronten ...
随机推荐
- angular项目中修改nz-zorro组件库字体大小
有时候我们开发时使用到的组件库,可能样式不是符合我们的需求,我试着从谷歌调试工具获取组件的类,给他设置样式,如下我设置tabset的样式 .ant-tabs-nav .ant-tabs-tab { f ...
- Oracle配置和性能优化方法
性能是衡量软件系统的一个重要部分,可能引起性能低下的原因很多,如CPU/内存/网络资源不足,硬盘读写速度慢,数据库配置不合理,数据库对象规划或存储方式不合理,模块设计对性能考虑不足等. 1 ...
- 部署负载均衡:LVS-DR群集(直连路由模式)
部署负载均衡:LVS-DR群集(直连路由模式) 文章目录 部署负载均衡:LVS-DR群集(直连路由模式) 一.LVS-DR数据包流向分析 二.LVS-DR中的ARP问题 三.LVS 负载均衡群集-DR ...
- 从零开始:在Qt中使用OpenGL绘制指南
本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用,想要学习 OpenGL 的朋友,建议访问经典 OpenGL 学习网站:LearnOpenGL CN 本篇文章 ...
- 主存的扩展及其CPU的连接——位扩展
其初始状态 进行读操作: 输入对应地址,将MREQ端设置为低电平,此时片选端有效,r/w端为高电平,所以写使能端无效,然后通过数据线和数据总线,CPU读取数据. 进行写操作: 输入对应地址,将R/W设 ...
- STM32F4_HAL_CAN总线注意事项
如果CAN总线没有连接其他设备,即HL是悬空状态,则发送会失败,下图的Error_Handler需要屏蔽,否则会造成系统卡顿,或影响其他功能模块的使用 /* ********************* ...
- Linux浅谈(四)----中断&异常
简介 CPU中断时操作系统中的两个重要概念,都作用于改变CPU执行的正常流程. 当出现某些特殊情况(如外部设备请求服务.定时器时间到等)时,CPU 暂停当前正在执行的程序,转去执行处理这些特殊情况的程 ...
- Wolfram常用计算
1.方程与方程组 例1:求解方程 参考表达式: solve x^3 + 2x^2 - 6x + 5 = 0 real 求解所有根 例2:求解方程: 参考表达式: solve ax^2+bx+c=0 注 ...
- robotframework:运用JavaScript进行定位元素以及页面操作
在ui自动化时,有些特殊情况需要用到js操作,在进行js操作前要先进行js元素定位.一.js元素定位 1.id定位 document.getElementById("id") 2. ...
- React项目报错:Element type is invalid: expected a string可能的原因
React项目报错:Element type is invalid: expected a string 起因:React使用Antd组件库,因为某些原因实在用不下去了,代码不变直接改成Tdesig ...