根据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 REJECT echo "`date +%F-%T` $i" >> /tmp/badip.log done}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 $a done $ipt -Z}#当时间在00分以及30分时执行解封函数if [ $d2 -eq "00" ] || [ $d2 -eq "30" ]then #要先解再封,因为刚刚封禁时产生的pkts数量很少 unblockblockelseblockfi

脚本详解

  1. 设置日志文件路径和工具路

logfile=/data/log/access.log  ipt=/sbin/iptables  ips=/tmp/ips.txt

这里我们设置了Web访问日志文件的路径、iptables工具的路径以及一个临时文件用于存储提取出的IP地址和访问次数。

  1. 提取并封禁异常IP

block函数中,脚本首先通过grepawk命令提取出一分钟前的日志中的IP地址,并统计每个IP的访问次数。然后,利用awk命令筛选出访问次数超过100的IP地址,并通过iptables进行封禁。​​​​​​​

block()  {      grep '$d1:' $logfile|awk '{print $1}'|sort -n|uniq -c|sort -n > $ips      for i in `awk '$1>100 {print $2}' $ips`      do          $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT          echo "`date +%F-%T` $i" >> /tmp/badip.log      done  }

这段代码的工作原理如下:

  • 使用grep命令从日志文件中提取出包含特定时间戳的行。

  • 通过awk命令提取IP地址,并使用sortuniq命令进行排序和去重。

  • 再次使用awk命令筛选出访问次数超过100的IP地址。

  • 利用iptables的-I INPUT命令将这些IP地址添加到INPUT链的开头,并设置REJECT策略,阻止这些IP地址的访问请求。

  • 将被封禁的IP地址和时间戳记录到/tmp/badip.log文件中,以便后续跟踪和审查。

  1. 解封恢复正常的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 $a      done      $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的计数器清零。

  1. 定时执行解封和封禁操作

脚本的最后部分是一个条件判断语句,用于在特定的时间(每小时的00分和30分)执行解封操作,并在其他时间执行封禁操作。这样可以确保被封禁的IP地址在半小时后恢复正常访问。

使用方法

  1. 将以上脚本保存为一个文件(例如:block_unblock_ips.sh)。

  2. 为脚本添加执行权限:chmod +x block_unblock_ips.sh

  3. 将脚本添加到cron定时任务中,以便每小时自动执行。例如,在crontab文件中添加以下行:0,30 * * * * /path/to/block_unblock_ips.sh。这将确保脚本在每小时的00分和30分执行一次。

  4. 根据需要调整脚本中的日志文件路径、iptables路径以及其他相关配置。

  5. 运行脚本并观察其效果。如果发现误封或漏封的情况,可以适当调整访问次数的阈值或其他相关参数。

结语

这款自动封禁和解封异常IP的脚本为网站管理员提供了一个有效的工具来应对恶意流量和攻击。通过合理的配置和使用,可以大大降低恶意流量对网站的影响,提高网站的安全性和稳定性。希望这款脚本能成为您网站安全防护的有力武器!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/13152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

u3d的ab文件注意事项

//----------------LoadAllAB.cs--------------------- using System.Collections;using UnityEngine;namespace System.IO{public class LoadAllAB : MonoBehaviour{ //读取本地string path "Assets/Actors/lznh/ab/animation/t_bl/";// Use this for initiali…

SQL注入之数据库基础

数据库基础 创建数据库 create 数据库名称;创建表 create table if not exists mobile(ID int(10) primary key auto_increment comment 手机编号 主键自增,Brand varchar(50) not null comment 手机品牌 非空约束,Model varchar(50) not null comment 手机型号 非空约束,Pr…

Keil手动安装编译器V5版本

V5编译器下载&#xff1a;免积分下载 新版的keil不会自动帮你安装V5版本的编译器&#xff0c;但是很多教程很多比赛所用单片机都是V5的编译器&#xff0c;所以用来开以前的或者开源的很多东西编译直接一大堆报错。 吐槽说完了接下来教你怎么解决 打开installer&#xff08;在…

vue使用postcss-pxtorem实现自适应

安装&#xff1a; npm install postcss-pxtorem -Dvue.config.js文件设置&#xff1a; css: {loaderOptions: {scss: {additionalData: import "~element-ui/packages/theme-chalk/src/common/var.scss";import"/styles/variables.scss";},postcss: {po…

OpenGL ES 面试高频知识点(二)

说说纹理常用的采样方式? 最邻近点采样(GL_NEAREST)和双线性采样(GL_LINEAR)。 GL_NEAREST 采样是 OpenGL 默认的纹理采样方式,OpenGL 会选择中心点最接近纹理坐标的那个像素,纹理放大的时候会有锯齿感或者颗粒感。 **GL_LINEAR 采样会基于纹理坐标附近的纹理像素,计…

搞大事!法国邀请芬兰公司建量子工厂

法国当地时间5月13日&#xff0c;法国总统马克龙宣布启动2024年度“选择法国”&#xff08;Choose France&#xff09;商业峰会。今年峰会召开前&#xff0c;法国赢得了创纪录的150亿欧元外国投资承诺&#xff0c;覆盖从人工智能到制药和能源等领域。 而涉及到量子领域最重磅的…

python数据处理与分析入门-pandas使用(4)

往期文章&#xff1a; pandas使用1pandas使用2pandas使用3 pandas使用技巧 创建一个DF对象 # 首先创建一个时间序列 dates pd.date_range(20180101, periods6) print(dates)# 创建DataFrame对象&#xff0c;指定index和columns标签 df pd.DataFrame(np.random.randn(6,4), …

el-select下拉框 添加 el-checkbox 多选框,支持全选、取消全选

el-select下拉框 添加 el-checkbox 多选框&#xff0c;支持全选、取消全选 前言一、实现思路二、实现代码1.模板代码2. css 样式3.js 代码 DEMO 演示总结 前言 实现效果预览 提示&#xff1a;本内容基于element-ui 组件实现&#xff0c;如果使用其他组件库、可参考下面实现方…

「AIGC算法」线性回归模型

线性回归是统计学和机器学习中一种常用的监督学习算法&#xff0c;用于预测连续数值型的输出。线性回归模型试图找到特征变量&#xff08;或称自变量&#xff09;与目标变量&#xff08;因变量&#xff09;之间的线性关系。 线性回归的两种主要类型&#xff1a; 简单线性回归&a…

学习Nginx(三):命令与信号

命令及选项 1. 显示帮助信息&#xff1a; [rootRockyLinux9 ~]# nginx -h nginx version: nginx/1.26.0 Usage: nginx [-?hvVtTq] [-s signal] [-p prefix][-e filename] [-c filename] [-g directives]选项:-?,-h : 显示帮助信息-v : 显示版本信息-V …

Error in debuggerConnector: connect ECONNREFUSED问题解决

最近重新开始electron开发&#xff0c;两三年前写的代码几乎看不懂了。。然后debug一下&#xff0c;直接报错了&#xff1a; Debugger listening on ws://127.0.0.1:20793/d146ffdb-c3b8-4480-a8d8-d04bb643c7c1 For help, see: https://nodejs.org/en/docs/inspector Error i…

关于GitHub仓库建立及提交问题

文章目录 前言GitHub仓库创建token令牌的获取GitHub克隆到本地GitHub上传文件 前言 为了整一个GitHub仓库然后上传文件&#xff0c;笔者看了不下100篇博客&#xff0c;20段教程&#xff0c;最后在两位大佬的帮助下&#xff0c;才整明白了&#x1f62d; 先提前说一嘴从 2021年8月…

网络爬虫安全:90后小伙,用软件非法搬运他人原创视频被判刑

目录 违法视频搬运软件是网络爬虫 如何发现偷盗视频的爬虫&#xff1f; 拦截违法网络爬虫 央视《今日说法》栏目近日报道了一名程序员开发非法视频搬运软件获利超700多万&#xff0c;最终获刑的案例。 国内某知名短视频平台报警称&#xff0c;有人在网络上售卖一款视频搬运…

刘邦的创业团队是沛县人,朱元璋的则是凤阳;要创业,一个县人才就够了

当人们回顾刘邦和朱元璋的创业经历时&#xff0c;总是会感慨他们起于微末&#xff0c;都创下了偌大王朝&#xff0c;成就无上荣誉。 尤其是我们查阅史书时&#xff0c;发现这二人的崛起班底都是各自的家乡人&#xff0c;例如刘邦的班底就是沛县人&#xff0c;朱元璋的班底是凤…

大模型技术介绍和实现流程以及向量库的介绍

多模态大模型&#xff1a;&#xff08;Multimodal Models&#xff09;指能够处理和生成多种类型数据&#xff08;如文本、图像、音频等&#xff09;的机器学习模型。该模型整合了来自不同模态的数据&#xff0c;从而提高了任务执行的准确性和广度。 一、多模态大模型 任务步骤…

分布式搜索-elaticsearch基础 概念

什么是elaticsearch: 倒排索引&#xff1a;就是将要查询的内容分成一个个词条&#xff0c;在将词条文档id存入&#xff0c;词条是唯一的。 文档词条总结: mysql和Elasticsearch概念对比: 架构: 基本概念总结:

Linux上执行内存中的脚本和程序

在Linux中可以不需要有脚本或者二进制程序的文件在文件系统上实际存在&#xff0c;只需要有对应的数据在内存中&#xff0c;就有办法执行这些脚本和程序。 原理其实很简单&#xff0c;Linux里有办法把某块内存映射成文件描述符&#xff0c;对于每一个文件描述符&#xff0c;Lin…

一线互联网大数据面试题核心知识库(100万字)

本面试宝典涵盖大数据面试高频的所有技术栈&#xff0c;包括Liunx&Shell基础&#xff0c;Hadoop&#xff0c;Zookpeer&#xff0c;Flume&#xff0c;Kafka&#xff0c;Hive&#xff0c;Datax&#xff0c;Maxwell&#xff0c;DolphinScheduler&#xff0c;Spark Core&SQ…

光伏行业该如何起步?

随着全球对可再生能源的需求日益增长&#xff0c;光伏行业作为其中的佼佼者&#xff0c;正迎来前所未有的发展机遇。然而&#xff0c;对于新进入者或希望在这一领域有所建树的企业来说&#xff0c;如何起步并稳健发展是一个值得深思的问题。以下是一些关于光伏行业起步的建议。…

MySQL-事务篇

文章目录 何为事务&#xff1f;什么是事务的ACID特性&#xff1f;并发事务带来了哪些问题&#xff1f;不可重复读和幻读有什么区别&#xff1f;并发事务的控制方式有哪些&#xff1f;SQL标准定义了哪些事务隔离级别&#xff1f;MYSQL的隔离级别是基于锁实现的吗&#xff1f; 何…