码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2018-10-09 15:39:07      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:文件中   NPU   inpu   tables   tab   条件   标记   author   bash   

在日常运维中,难免碰到大流量,造成网站无法访问或者影响缓慢的情况;
如果没有购买高防产品,则可以通过shell暂时缓解;

#!/bin/bash
##############################################
#Author: Liuzhengwei - 1135960569@qq.com
#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

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

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

标签:文件中   NPU   inpu   tables   tab   条件   标记   author   bash   

原文地址:http://blog.51cto.com/liuzhengwei521/2296272

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!