美文网首页
CentOS 6 自动封、解IP

CentOS 6 自动封、解IP

作者: Amazing慕丶涵 | 来源:发表于2022-08-23 17:25 被阅读0次

    对于web服务器来说,出现最普遍的问题就是网站访问慢甚至访问不到,到服务器上查看后得出的结论是,这个网站被CC攻击了。

    什么是CC攻击?

    CC攻击属于DDos攻击的一种,攻击者会利用大量被劫持的“肉鸡”对攻击目标网站发起请求,并且频率很快,这样会导致目标网站的服务器承受不住请求压力而瘫痪。

    如何判断是否为CC攻击?

    CC攻击虽然看起来跟正常的访问没有什么区别,但如果我们仔细分析访问日志还是可以找到一些线索,比如某个IP访问频次很高,或者某几个IP的user_agent是固定的等等特性,有的甚至会去模仿正规的搜索引擎,比如,把自己伪装成百度的“蜘蛛爬虫”。当遇到CC攻击时,只要你肯花费一些精力来分析访问日志,终究是可以找到发起CC攻击的真凶,然后封掉他们的IP就行了。

    具体自动封IP和解IP需求如下:

    1)每分钟分析一次访问日志 /data/logs/access_log ;
    2)把访问量高于100的IP封掉;
    3)封过的IP都要记录到一个日志文件中;
    4)每隔30分钟检查一次被封的IP,把没有请求或者请求很少的IP解封;
    5)解封的IP记录到另外一个日志文件中。
    

    访问日志如下:

    111.172.10.215 - - [18/Aug/2022:14:03:49 +0800] "GET /case/8654.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    117.57.56.95 - - [18/Aug/2022:14:03:54 +0800] "GET /zxglxq/2068.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    116.209.56.89 - - [18/Aug/2022:14:03:49 +0800] "GET /zxglxq/6690.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    125.87.82.184 - - [18/Aug/2022:14:03:51 +0800] "GET /zxglxq/66.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    111.172.10.215 - - [18/Aug/2022:14:03:49 +0800] "GET /shijing/house/3/p/2/space/6/style/2.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    220.179.211.51 - - [18/Aug/2022:14:03:49 +0800] "GET /shijing/p/1/space/3/style/7.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    125.87.94.136 - - [18/Aug/2022:14:03:48 +0800] "GET /zxglxq/42.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    119.101.54.115 - - [18/Aug/2022:14:03:49 +0800] "GET /zxglxq/3020.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    125.87.80.140 - - [18/Aug/2022:14:03:49 +0800] "GET /shijing/p/56/space/3.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    116.209.56.89 - - [18/Aug/2022:14:03:50 +0800] "GET /zxgl2/p/14/pid/4.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    27.150.86.139 - - [18/Aug/2022:14:03:50 +0800] "GET /case/9388.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    111.172.10.215 - - [18/Aug/2022:14:03:49 +0800] "GET /case/7559.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    116.209.56.89 - - [18/Aug/2022:14:03:52 +0800] "GET /zxglxq/6433.html HTTP/1.1" 404 - "https://www.jzzs.com.cn/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler ; EmbeddedWB 14.52 from: http://www.bsalsa.com/ EmbeddedWB 14.52; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
    

    参考脚本如下:

    #!/bin/bash
    #把访问量很大的IP封掉,如果30分钟内被封IP的请求几乎没有就解封IP
    #定义1分钟以前的时间,用于过滤1分钟以前的日志
    t1=`date -d "-1 min" +%Y:%H:%M`
    log=/data/logs/access_log
    block_ip()
    { 
        egrep "$t1:[0-5]+" $log > /tmp/tmp_last_min.log
        #把1分钟内访问量高于100的IP记录到一个临时文件中
        awk '{print $1}' /tmp/tmp_last_min.log |sort -n |uniq -c |sort -n |awk '$1>100 {print $2}' > /tmp/bad_ip.list
        #计算IP的数量
        n=`wc -l /tmp/bad_ip.list |awk '{print $1}'`
        #当ip数大于0时,才会用iptables封掉它
        if [ $n -ne 0 ];then
            for ip in `cat /tmp/bad_ip.list`
            do
                iptables -I INPUT -s $ip -j REJECT
            done
            #将这些被封IP记录到日志里
            echo "`date` 封掉的IP有:" >> /tmp/block_ip.log
            cat /tmp/bad_ip.list >> /tmp/block_ip.log
        fi
    }
    unblock_ip()
    { 
        #首先将包个数小于5的ip记录到一个临时文件里,把他们标记为白名单IP
        iptables -nvL INPUT |sed '1d' |awk '$1<5 {print $8}' > /tmp/good_ip.list
        n=`wc -l /tmp/good_ip.list |awk '{print $1}'`
        if [ $n -ne 0 ];then
            for ip in `cat /tmp/good_ip.list`
            do
                iptables -D INPUT -s $ip -j REJECT
            done
            echo "`date` 解封的IP有:" >> /tmp/unblock_ip.log
            cat /tmp/good_ip.list >> /tmp/unblock_ip.log
        fi
        #当解封完白名单IP后,将计数器清零,进入下一个技术周期
        iptables -Z
    }
    #取当前时间的分钟数
    t=`date +%M`
    #当分钟数为00或30时(即每隔30分钟),执行解封IP的函数,其他时间只执行封IP的函数
    if [ $t == "00" ] || [ $t == "30" ];then
        unblock_ip
        block_ip
    else
        block_ip
    fi
    

    编写定时任务(计划任务)

    * * * * * /bin/bash /usr/local/sbin/blockip.sh &>/tmp/blockip.log
    

    相关文章

      网友评论

          本文标题:CentOS 6 自动封、解IP

          本文链接:https://www.haomeiwen.com/subject/ncjogrtx.html