根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁

本文主要是介绍根据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的脚本为网站管理员提供了一个有效的工具来应对恶意流量和攻击。通过合理的配置和使用,可以大大降低恶意流量对网站的影响,提高网站的安全性和稳定性。希望这款脚本能成为您网站安全防护的有力武器!

这篇关于根据web访问日志,封禁请求量异常的IP,如IP在半小 时后恢复正常则解除封禁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是