加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

用shell暂时缓解ddos和cc大流量访问的情况

发布时间:2020-12-15 23:23:35 所属栏目:安全 来源:网络整理
导读:在日常运维中,难免碰到大流量,造成网站无法访问或者影响缓慢的情况; 如果没有购买高防产品,则可以通过shell暂时缓解; #!/bin/bash###############################################Author: Liuzhengwei - [email?protected]#WeiXin:1135960569#Last mod
在日常运维中,难免碰到大流量,造成网站无法访问或者影响缓慢的情况;
如果没有购买高防产品,则可以通过shell暂时缓解;

#!/bin/bash
##############################################
#Author: Liuzhengwei - [email?protected]
#WeiXin:1135960569
#Last modified: 2018-10-09 14:31
#Filename: blockip.sh
#Description: 检测每分钟的访问IP,每分钟访问超过100次则进行封禁
#             每30分钟再检测一次,如果被封禁的IP访问量很小时,则解封
##############################################
source /etc/profile
#定义时间,用于过滤出每分钟的日志
time=`date -d "-1 min" +%Y:%H:%M`
log_dir=/usr/local/nginx/logs/access.log
#定义阻塞IP的函数
block_ip(){
  #拉取上一分钟所有的日志,放到指定文件中
  egrep "$time:[0-5]+" $log_dir > /tmp/last_min.log
  #将访问超过100的IP记录下,加入iptables进行阻塞
  awk ‘{print $1}‘ /tmp/last_min.log | sort -n | uniq -c| sort -n | awk ‘$1>100 {print $2}‘ > /tmp/bad_ip.list
  #计算IP的数量
  number=`wc -l /tmp/bad_ip.list | awk ‘{print $1}‘`
  #当ip数大于0时,使用iptables封禁
  if [ $number -gt 0 ];then
    for ip in `cat /tmp/bad_ip.list`;do
      iptables -I INPUT -s $ip -j REJECT
    done
    #记录被封禁的IP
    echo "`date +%F-%T` 封掉的IP有:" >> /tmp/block_ip.log
    cat /tmp/bad_ip.list >> /tmp/block_ip.log
  fi
}
#定义解封IP的函数
unblock_ip(){
  #将包个数小于5的ip记录到文件中,标记为白名单
  iptables -nvL INPUT | sed ‘1d‘ | awk ‘$1<5{print $8}‘ > /tmp/good_ip.list
  #统计白名单IP个数
  number=`wc -l /tmp/good_ip.list | awk ‘{print $1}‘`
  if [ $number -gt 0 ];then
    for ip in `cat /tmp/good_ip.list`;do
      iptables -D INPUT -s $ip -j REJECT
    done
    #记录被解封的IP
    echo "`date +%F-%T` 解封的IP有:" >> /tmp/unblock_ip.log
    cat /tmp/good_ip.list >> /tmp/unblock_ip.log
  fi
  #清空计数器
  iptables -Z
}
#取出当前时间
now=`date +%M`
#每隔30分钟解封符合解封条件的IP,其余时间封禁IP
if [ $now == "00" ] || [ $now == "30" ];then
  unblock_ip
  block_ip
else
  block_ip
fi

加上任务计划,每分钟执行一次即可~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读