• wordpress CMS主题:ssmay主题wordpress CMS主题:ssmay主题
  • 首页 > Linux系统运用 > Linux如何防止大量404访问和恶意多连接?

    Linux如何防止大量404访问和恶意多连接?

    作者: 分类:Linux系统运用 点击: 387 次
    wordpress CMS主题:ssmay主题

      由于我个人博客本身没有做过url更改,但是在检查日志的时候发现大量404访问记录。访问的路径还千奇百怪。本人水平有限,也不知道是什么样的工具或者蜘蛛会大量访问这种地址。于是乎,想起了网上流行的防止CC的脚本是不是可以改造下。如果某个IP地址访问404页面大于多少次后,就将该IP拉黑。在一天的某个时段定时释放。

      脚本

      需设置Log地址、ip多少访问连接拉黑(num)及ip访问404页面多少次拉黑(ipnum));


      #!/bin/bash
      #脚本名称:ShengBao Scripts
      #版本 :0.1
      #支持网址:http://shengbao.org
      #更新说明
      ##############################设置###########################
      num=20
      ipnum=500
      logfile=/data/wwwlogs/shengbao.org_nginx.log
      whitelist=`cat <<eof
      #############################白名单###########################

      200
      Baidu
      360
      ce.baidu.com
      .xml
      .html
      spider
      index.php
      yunjiasu
      google
      bing
      sougou
      haosou
      ##########################shengbao.org########################

      eof`
      function check () {

      iplist=`netstat -an |grep -w ^tcp.*:"80\|443"|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1>str){print $2}}'`

      loglist=`cat $logfile|grep -i -v "$whitelist" |grep 404|awk -F ' ' '{print $1}'|sort|uniq -c|sort -nr |awk -v str=$ipnum '{if ($1>str){print $2}}'`

      echo -e "$iplist \n" >> /tmp/iplist

      echo -e "$loglist \n" >> /tmp/loglist

      if [ -f /tmp/fireip ];then

      fireiptmp=`grep -vwf /tmp/loglist /tmp/iplist`

      echo -e "$fireiptmp \n" >>/tmp/fireiptmp

      # fireip=`cat /tmp/fireiptmp /tmp/fireip | awk '!a[$0]++ {print $0}'`

      fireip=`grep -vwf /tmp/fireip /tmp/fireiptmp `

      if [[ ! -z $fireip ]];then

      echo -e "$fireip \n" >> /tmp/fireip

      fi

      else

      fireip=`grep -Fv /tmp/iplist /tmp/loglist`

      fireip=`grep -vwf /tmp/iplist /tmp/loglist`

      echo -e "$fireip \n" > /tmp/fireip

      fi

      echo

      if [[ ! -z $fireip ]];then

      for black_ip in $fireip

      do

      if [ -f/usr/bin/systemctl ];then

      iptables -nL | grep $black_ip > /dev/null ||( firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address="$black_ip" reject ")

      firewall-cmd --reload

      else

      iptables -nL | grep $black_ip > /dev/null ||(iptables -I INPUT -s $black_ip -j DROP )

      fi

      done

      fi

      }

      function uncheck () {

      if [ -f /tmp/fireip ];then

      unfireip=`cat /tmp/fireip`

      for writ_ip in $unfireip

      do

      if [ -f/usr/bin/systemctl ];then

      firewall-cmd --permanent --remove-rich-rule="rule family='ipv4' source address="$writ_ip" reject "

      firewall-cmd --reload

      else

      iptables -nL | grep $writ_ip ||(iptables -I INPUT -s $writ_ip -j ACCEPT )

      fi

      done

      else

      echo "fire_ip null"

      fi

      rm -rf /tmp/fireip

      rm -rf /tmp/fireiptmp

      rm -rf /tmp/loglist

      rm -rf /tmp/iplist

      }

      if [[ $1 == unip ]];then

      uncheck

      exit

      fi

      while true;do

      check >/dev/null

      done

      Linux如何防止大量404访问和恶意多连接?

      运行

      执行命令:crontab -e

      */1 * * * * /bin/bash /root/checkip.sh

      停止运行:fg调用后台脚本到前台,crtl+c结束。

      释放ip地址: sh checkip unip

      (转自:https://shengbao.org/263.html )



      QQ二维码

    文章作者:steam
    本文地址:http://wanlimm.com/77201808226651.html
    版权所有 © 转载时必须以链接形式注明作者和原始出处!

    上一篇:
    下一篇:
    wordpress CMS主题:ssmay主题

    或许你会感兴趣的文章:

    一条回应:“Linux如何防止大量404访问和恶意多连接?”

    1. lwhtarena说道:

      这个教程还是非常不错的哦。

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    This site uses Akismet to reduce spam. Learn how your comment data is processed.