根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁
在网络安全日益受到重视的今天,如何有效防范恶意流量和攻击成为了每个网站管理员必须面对的问题。恶意流量不仅会影响网站的正常运行,还可能导致服务器崩溃,给网站带来不可估量的损失。为了应对这一问题,我们特别推出了一款实用的Bash脚本,能够自动封禁请求量异常的IP,并在半小时后恢复正常时解除封禁。下面,让我们一起来详细了解一下这个脚本的工作原理和使用方法吧!
脚本概述
这款脚本通过分析Web访问日志,自动找出请求量异常的IP地址,并利用iptables进行封禁。当IP在半小时后恢复正常时,脚本会自动解除封禁。这样,既能有效防范恶意流量,又能避免误封正常用户的IP。
完整脚本:
#!/bin/bash ################################################################################ #####根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁 ################################################################################ ####logfile=/data/log/access.log#显示一分钟前的小时和分钟d1=`date -d "-1 minute" +%H%M`d2=`date +%M`ipt=/sbin/iptablesips=/tmp/ips.txtblock(){#将一分钟前的日志全部过滤出来并提取IP以及统计访问次数grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ips #利用for循环将次数超过100的IP依次遍历出来并予以封禁for i in `awk '$1>100 {print $2}' $ips`do$ipt -I INPUT -p tcp --dport 80 -s $i -j REJECTecho "`date +%F-%T` $i" >> /tmp/badip.logdone}unblock(){ #将封禁后所产生的pkts数量小于10的IP依次遍历予以解封for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print$1}'|sort -nr`do$ipt -D INPUT $adone$ipt -Z}#当时间在00分以及30分时执行解封函数if [ $d2 -eq "00" ] || [ $d2 -eq "30" ]then #要先解再封,因为刚刚封禁时产生的pkts数量很少 unblockblockelseblockfi
脚本详解
-
设置日志文件路径和工具路
logfile=/data/log/access.logipt=/sbin/iptablesips=/tmp/ips.txt
这里我们设置了Web访问日志文件的路径、iptables工具的路径以及一个临时文件用于存储提取出的IP地址和访问次数。
-
提取并封禁异常IP
在block函数中,脚本首先通过grep和awk命令提取出一分钟前的日志中的IP地址,并统计每个IP的访问次数。然后,利用awk命令筛选出访问次数超过100的IP地址,并通过iptables进行封禁。
block(){grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ipsfor i in `awk '$1>100 {print $2}' $ips`do$ipt -I INPUT -p tcp --dport 80 -s $i -j REJECTecho "`date +%F-%T` $i" >> /tmp/badip.logdone}
这段代码的工作原理如下:
-
使用
grep命令从日志文件中提取出包含特定时间戳的行。 -
通过
awk命令提取IP地址,并使用sort和uniq命令进行排序和去重。 -
再次使用
awk命令筛选出访问次数超过100的IP地址。 -
利用iptables的
-I INPUT命令将这些IP地址添加到INPUT链的开头,并设置REJECT策略,阻止这些IP地址的访问请求。 -
将被封禁的IP地址和时间戳记录到
/tmp/badip.log文件中,以便后续跟踪和审查。
-
解封恢复正常的IP
在unblock函数中,脚本通过iptables查看当前INPUT链的规则,找出那些被封禁后产生的数据包数量小于10的IP地址,并予以解封。
unblock(){for a in `$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print $1}'|sort -nr`do$ipt -D INPUT $adone$ipt -Z}
这段代码的工作原理如下:
-
使用
iptables -nvL INPUT --line-numbers命令查看INPUT链的详细规则和行号。 -
通过
grep命令筛选出目标地址为0.0.0.0/0的规则,即那些被封禁的IP地址。 -
使用
awk命令提取出数据包数量小于10的规则的行号。 -
利用iptables的
-D INPUT命令将这些规则从INPUT链中删除,从而解封对应的IP地址。 -
最后,使用
iptables -Z命令将iptables的计数器清零。
-
定时执行解封和封禁操作
脚本的最后部分是一个条件判断语句,用于在特定的时间(每小时的00分和30分)执行解封操作,并在其他时间执行封禁操作。这样可以确保被封禁的IP地址在半小时后恢复正常访问。
使用方法
-
将以上脚本保存为一个文件(例如:
block_unblock_ips.sh)。 -
为脚本添加执行权限:
chmod +x block_unblock_ips.sh。 -
将脚本添加到cron定时任务中,以便每小时自动执行。例如,在crontab文件中添加以下行:
0,30 * * * * /path/to/block_unblock_ips.sh。这将确保脚本在每小时的00分和30分执行一次。 -
根据需要调整脚本中的日志文件路径、iptables路径以及其他相关配置。
-
运行脚本并观察其效果。如果发现误封或漏封的情况,可以适当调整访问次数的阈值或其他相关参数。
结语
这款自动封禁和解封异常IP的脚本为网站管理员提供了一个有效的工具来应对恶意流量和攻击。通过合理的配置和使用,可以大大降低恶意流量对网站的影响,提高网站的安全性和稳定性。希望这款脚本能成为您网站安全防护的有力武器!
相关文章:
根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁
在网络安全日益受到重视的今天,如何有效防范恶意流量和攻击成为了每个网站管理员必须面对的问题。恶意流量不仅会影响网站的正常运行,还可能导致服务器崩溃,给网站带来不可估量的损失。为了应对这一问题,我们特别推出了一款实用的…...
2.go语言初始(二)
本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作 go 语言中的运算符 在 go 语言中,基本数据类型主要包括以下几类:整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型(byte…...
MQTT对比HTTP
吞吐量:根据3G网络的测量结果,MQTT的吞吐量比HTTP快93倍。这意味着在相同的网络条件下,MQTT能够更有效地传输数据,从而在处理大量数据或实时数据传输时具有更高的效率。架构与模式:MQTT基于发布/订阅模型,提…...
暴力数据结构之二叉树(堆的相关知识)
1. 堆的基本了解 堆(heap)是计算机科学中一种特殊的数据结构,通常被视为一个完全二叉树,并且可以用数组来存储。堆的主要应用是在一组变化频繁(增删查改的频率较高)的数据集中查找最值。堆分为大根堆和小根…...
死锁调试技巧:工作线程和用户界面线程
有人碰到了一个死锁问题,找到我们想请我们看看,这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们,可能是因为我们经常会和窗口管理器打交道吧。 下面,我们来看看死锁的两个线程。 >> 请移步至 …...
蓝桥杯-外卖店优先级(简单写法)
“饱了么”外卖系统中维护着 N 家外卖店,编号 1∼N。 每家外卖店都有一个优先级,初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订…...
VueRouter使用总结
VueRouter 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。在使用 VueRouter 时,开发者可以定义路由映射规则,并在 Vue 组件中通过编程式导航或声明式导航的方式控制页面的跳转和展示。以下是 VueRouter 使用的…...
Flink checkpoint 源码分析- Checkpoint snapshot 处理流程
背景 在上一篇博客中我们分析了代码中barrier的是如何流动传递的。Flink checkpoint 源码分析- Checkpoint barrier 传递源码分析-CSDN博客 最后跟踪到了代码org.apache.flink.streaming.runtime.io.checkpointing.CheckpointedInputGate#handleEvent 现在我们接着跟踪相应…...
Leaflet.canvaslabel在Ajax异步请求时bindPopup无效的解决办法
目录 前言 一、场景重现 1、遇到问题的代码 2、问题排查 二、通过实验验证猜想 1、排查LayerGroup和FeatureGroup 2、排查Leaflet.canvaslabel.js 三、柳暗花明又一村 1、点聚类的办法 2、歪打正着 总结 前言 在上一篇博客中介绍了基于SpringBoot的全国风景区WebGIS按…...
Go 处理错误
如果你习惯了 try catch 这样的语法后,会觉得处理错误真简单,然后你再来接触 Go 的错误异常,你会发现他好复杂啊,怎么到处都是 error,到处都需要处理 error。 首先咱们需要知道 Go 语言里面有个约定,就是一…...
python读取excel数据写入mysql
概述 业务中有时会需要解析excel中的数据,按照要求处理后,写入到db中; 用python处理这个正好简便快捷 demo 没有依赖就 pip install pymysql一下 import pymysql from pymysql.converters import escape_string from openpyxl import loa…...
flutter日期选择器仅选择年、月
引入包:flutter_datetime_picker: 1.5.0 封装 import package:flutter/cupertino.dart; import package:flutter/material.dart; import package:flutter_datetime_picker/flutter_datetime_picker.dart;class ATuiDateTimePicker {static Future<DateTime> …...
素数筛详解c++
一、埃式筛法 代码 二、线性筛法(欧拉筛法) 主要的思想就是一个质数的倍数(倍数为1除外)肯定是合数,那么我们利用这个质数算出合数,然后划掉这个合数,下次就可以不用判断它是不是质数,节省了大量的时间。 …...
【Python超详细的学习笔记】Python超详细的学习笔记,涉及多个领域,是个很不错的笔记
获取笔记链接 Python超详细的学习笔记 一,逆向加密模块 1,Python中运行JS代码 1.1 解决中文乱码或者报错问题 import subprocess from functools import partial subprocess.Popen partial(subprocess.Popen, encodingutf-8) import execjs1.2 常用…...
TINA 使用教程
常用功能 分析-电气规则检查:短路,断路等分析- 直流分析 交流分析 瞬态分析 视图-分离曲线 由于输出的容性负载导致的振荡 增加5欧电阻后OK 横扫参数 添加横扫曲线的电阻,选择R3:8K-20K PWL和WAV文件的支持 示例一:…...
weblogic 任意文件上传 CVE-2018-2894
一、漏洞简介 在 Weblogic Web Service Test Page 中存在一处任意文件上传漏洞, Web Service Test Page 在"生产模式"下默认不开启,所以该漏洞有一定限制。利用该 漏洞,可以上传任意 jsp 文件,进而获取服务器权限。 二…...
我的第一个网页:武理天协
1. html代码 1.1 首页.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>武理天协</title><link rel"stylesheet" href"./style.css"><link rel"stylesh…...
机器学习笔记 KAN网络架构简述(Kolmogorov-Arnold Networks)
一、简述 在最近的研究中,出现了号称传统多层感知器 (MLP) 的突破性替代方案,重塑了人工神经网络 (ANN) 的格局。这种创新架构被称为柯尔莫哥洛夫-阿诺德网络 (KAN),它提出了一种受柯尔莫哥洛夫-阿诺德表示定理启发的函数逼近的方法。 与 MLP 不同,MLP 依赖于各个节…...
基于网络爬虫技术的网络新闻分析(二)
目录 2 系统需求分析 2.1 系统需求概述 2.2 系统需求分析 2.2.1 系统功能要求 2.2.2 系统IPO图 2.2 系统非功能性需求分析 3 系统概要设计 3.1 设计约束 3.1.1 需求约束 3.1.2 设计策略 3.1.3 技术实现 3.3 模块结构 3.3.1 模块结构图 3.3.2 系统层次图 3.3.3…...
Java--初识类和对象
前言 本篇讲解Java类和对象的入门版本。 学习目的: 1.理解什么是类和对象。 2.引入面向对象程序设计的概念 3.学会如何定义类和创建对象。 4.理解this引用。 5.了解构造方法的概念并学会使用 考虑到篇幅过长问题,作者决定分多次发布。 面向对象的引入 J…...
Linux端口占用排查:工具与实战技巧
1. 网络端口占用排查的必要性遇到"Address already in use"错误提示时,每个Linux系统管理员都会心头一紧。这种端口冲突问题不仅影响服务启动,还可能导致关键业务中断。我刚入行时就曾因为Nginx和Apache争抢80端口,导致公司官网瘫痪…...
科技服务机构如何提升服务专业性与客户对接效率?
观点作者:科易网-国家科技成果转化(厦门)示范基地 在数智时代浪潮下,科技服务机构面临着前所未有的机遇与挑战。数据成为关键资源,重塑了创新主体间的关系,科技成果向产业应用的转化链条发生了根本变革。然…...
▲基于DQPSK调制解调+LDPC编译码+扩频解扩通信链路matlab误码率仿真
目录 1.本系统整体构架 2.各个模块基本原理 2.1 DQPSK原理简介 2.2 DQPSK解调原理 2.3 LDPC编译码 2.4 扩频技术原理 3.仿真结果 4.完整程序下载 1.本系统整体构架 整个程序,我们采用如下的流程图实现: 2.各个模块基本原理 2.1 DQPSK原理简介 …...
怎样评估数据化管理?数据化管理如何持续改进?
在数据这个行当工作了这么多年,我经常会和不同公司的朋友聊天。大家刚开始做数据化管理时总是干劲十足,买工具、建报表、做大屏。但一两年后,常常陷入一种困惑:钱花了,屏挂了,但感觉业务还是老样子。这时候…...
android studio 解决git用户名和用户邮箱不一致的问题
原因:公司git代码提交,应该用的是公司的账号和邮箱,不要使用私人名称和邮箱;1、查看自己本地的git用户名、邮箱配置1.1、在用户目录下,文件名:.gitconfig1.2、打开后:[user]name zhangjian.***…...
我被TRO了,到底该选和解还是应诉?
很多跨境卖家第一次遭遇TRO(临时限制令)时,往往是懵的:店铺被冻结、资金被锁、链接下架,一夜之间业务几乎停摆。这个时候最核心的问题只有一个——到底该和解,还是应诉?先说结论:没有…...
机器人运动规划:轨迹规划算法核心综述
前言在机器人和自动驾驶领域,“路径规划”(Path Planning)和“轨迹规划”(Trajectory Planning)是两个常被提及的概念。路径规划:解决“怎么走”的问题,关注空间几何路径,不含时间属…...
Cats定律测试终极指南:如何确保类型类实例的正确性
Cats定律测试终极指南:如何确保类型类实例的正确性 【免费下载链接】cats Lightweight, modular, and extensible library for functional programming. 项目地址: https://gitcode.com/gh_mirrors/ca/cats Cats是一个轻量级、模块化、可扩展的函数式编程库&…...
为什么选择Apache NetBeans?完整对比主流IDE的优势与特色
为什么选择Apache NetBeans?完整对比主流IDE的优势与特色 【免费下载链接】netbeans Apache NetBeans 项目地址: https://gitcode.com/gh_mirrors/ne/netbeans Apache NetBeans是一款由Apache软件基金会开发的开源集成开发环境(IDE)&a…...
2025届学术党必备的降重复率助手实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于AI生成文本展现出的高频特性,我们可运用如下一系列指令来实现去机械化的目标…...
