0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

封ip脚本进化的解决办法

阿铭linux 来源:阿铭linux 2023-06-11 17:03 次阅读

上次给大家分享过一个封IP脚本,点这里看。我搞那个脚本的目的是为了把访问量太大的IP地址给封掉,然后每隔半小时解封。其实,它并没有解决问题。服务器CPU使用率还是跟之前一样,非常有规律。

经过几天的观察和日志分析,得出一个结论,大概率是最近服务器上来采集数据的量比之前大了,毕竟近期AI很热,好多组织在搞大模型,采集数据是根本。

这些人就有点不道德了,又不是不让你采集,你再把频率降低一些,分散一些,只要不影响到我们的业务,就没人管你,但你现在把我们的服务器给拖垮了,影响到客户访问和使用,这样谁都不好不是。

分析过程中,也找到了一些规律,有一些IP是一个IP段,很分散,所以单个IP访问量并不大,但是整个IP段就非常明显了。

6d314764-05d9-11ee-962d-dac502259ad0.png

所以,我想了想,决定把脚本改造一下,针对IP段来进行分析并封IP。思路是:分析过去1小时的访问日志,然后把访问日志中的IP截取出来,取IP的前三个数字,只要这三个数字一样的IP都算一个,这样再计算总次数。把总次数超过1600次的IP段给找出来。此时可不能直接封IP段,因为会误伤,所以还需要根据IP段,再去过滤出中招的IP地址,针对这些IP地址再去封掉。而解封则每隔2小时来一次。

脚本如下,关键步骤是有注释的。

#! /bin/bash
## 把访问量比较大的IP段封掉,如果2小时内被封的IP没有请求或者请求很少,需要解封
## 作者:阿铭
## 日期:2023-05-27
## 版本:v1.1


#定义1小时以前的时间,用于过滤1小时以前的日志
t1=`date -d "-1 hour" +%Y:%H:`
log=/data/logs/nginx/access.log


block_ip()
{
##白名单ip/ip段,自己的IP,正经蜘蛛的IP
w_ip="^66.249.|^220.181.|^116.179."


    ##截取一小时以前的日志
egrep"$t1[0-5][0-9]:"$log>/tmp/tmp_last_hour.log
    ##将所有ip都过滤出来,存到临时文件
    awk '{print $1}' /tmp/tmp_last_hour.log > /tmp/tmp_last_hour_ip.log


    ##处理IP,只留前面三位,排序、去重,获取多于1600次请求的ip段,这个数字可以根据实际情况来调整
    awk -F '.' '{print $1"."$2"."$3"."}' /tmp/tmp_last_hour_ip.log|sort |uniq -c |sort -n |awk '$1 > 1600 {print $2}' > /tmp/bad_ip_hour.list


    #当ip数大于0时,才会用iptables封掉它
    ip_n=`wc -l /tmp/bad_ip_hour.list|awk '{print $1}'`
    if [ ${ip_n} -ne 0 ]
    then
        for ip in `cat /tmp/bad_ip_hour.list`
        do
            #封ip,不能直接封ip段
            for ip2 in `grep "^$ip" /tmp/tmp_last_hour_ip.log|sort -n|uniq`
            do
                /usr/sbin/iptables -I INPUT -s $ip2 -j REJECT
            done
        done
        #将这些被封的IP记录到日志里
        echo "`date` 封掉的IP段有:" >> /tmp/block_ip2.log
        cat /tmp/bad_ip_hour.list >> /tmp/block_ip2.log
    fi
}


unblock_ip()
{
    #首先将包个数小于5的ip段记录到一个临时文件里,把它们标记为白名单IP
    /usr/sbin/iptables -nvL INPUT|grep REJECT |awk '$1<5 {print $8}' > /tmp/good_ip2.list
    n=`wc -l /tmp/good_ip2.list|awk '{print $1}'`
    if [ $n -ne 0 ]
    then
        for ip in `cat /tmp/good_ip2.list`
        do
            /usr/sbin/iptables -D INPUT -s $ip -j REJECT
        done
        echo "`date` 解封的IP段有:" >> /tmp/unblock_ip2.log
        cat /tmp/good_ip2.list >> /tmp/unblock_ip2.log
    fi
    #当解封完白名单IP后,将计数器清零,进入下一个计数周期
    /usr/sbin/iptables -Z
}


#取当前时间的小时
t=`date +%H`
t2=$[$t%2]


#每2小时执行解封IP的函数,其他时间只执行封IP的函数
if [ $t2 -eq 0 ]
then
   unblock_ip
   block_ip
else
   block_ip
fi

上完脚本后,观察了一天,CPU使用率终于降低到可接受范围了。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10816

    浏览量

    210957
  • 服务器
    +关注

    关注

    12

    文章

    8986

    浏览量

    85122

原文标题:问题终于解决了--封ip脚本的进化

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    关于TCP/IP门禁系统有哪些安全问题?有什么解决办法

    关于TCP/IP门禁系统有哪些安全问题?有什么解决办法
    发表于 05-31 06:04

    经典网络故障及解决办法

    经典网络故障及解决办法 IP与MAC绑定的难题问:我的计算机原来采用公网固定IP地址。为了避免被他人盗用,使用“arp -s ip mac”命令对MAC地址和
    发表于 08-06 14:09 1396次阅读

    华硕笔记本声卡驱动无法安装的解决办法

    华硕笔记本声卡驱动无法安装的解决办法
    发表于 01-18 10:10 3533次阅读

    声卡硬件维修的常见问题及解决办法

    声卡硬件维修的常见问题及解决办法 常见故障一:声卡无声   出现这种故障常见的原因有:
    发表于 02-23 14:25 2519次阅读

    误码特性,误码产生的机理及解决办法

    误码特性,误码产生的机理及解决办法
    发表于 03-19 17:10 2245次阅读

    UPS电源输入跳闸浅析及解决办法

    UPS电源输入跳闸浅析及解决办法解析
    发表于 11-10 16:42 89次下载
    UPS电源输入跳闸浅析及<b class='flag-5'>解决办法</b>

    Matlab编程常见错误与解决办法

    Matlab编程常见错误与解决办法求人不如求己
    发表于 03-16 15:58 0次下载

    压榨辊轴承位磨损有哪些解决办法

    压榨辊轴承位磨损有哪些解决办法
    发表于 01-19 09:45 4次下载

    电梯IP五方对讲的问题和解决办法的介绍

    梯云物联:深圳电梯IP五方对讲有什么问题和解决办法
    发表于 04-11 18:16 5696次阅读

    ESP32勘误表及解决办法

    电子发烧友网站提供《ESP32勘误表及解决办法.pdf》资料免费下载
    发表于 09-23 11:51 0次下载
    ESP32勘误表及<b class='flag-5'>解决办法</b>

    电脑右键管理打开失败的解决办法

    此电脑右键管理打不开怎么办 电脑右键管理打开失败的解决办法
    发表于 09-28 09:56 0次下载

    硬盘故障的3个终极解决办法

    电子发烧友网站提供《硬盘故障的3个终极解决办法.pdf》资料免费下载
    发表于 10-20 10:46 0次下载
    硬盘故障的3个终极<b class='flag-5'>解决办法</b>

    细碎机轴承位磨损问题的解决办法

    【设备故障】细碎机轴承位磨损问题的解决办法
    发表于 10-27 16:36 0次下载

    Protel99 与WIN10系统冲突解决办法

    PROTEL99 与WIN10系统冲突解决办法
    的头像 发表于 11-20 09:30 3845次阅读
    Protel99 与WIN10系统冲突<b class='flag-5'>解决办法</b>

    常见MCU故障及解决办法

    微控制器单元(MCU)是现代电子设备中的核心组件,负责处理和控制各种功能。然而,由于各种原因,MCU可能会出现故障。以下是一些常见的MCU故障及其解决办法: 1. 电源问题 故障现象: MCU无法
    的头像 发表于 11-01 13:41 397次阅读