欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

一招教你如何防御CC攻击 自己亲自做的 有大用 有大大用

下面是自己亲自做的 删除ip的crontab                    drop ip iptables sh

1) 下在的功能是拒绝ip

# vim /root/drop_ip.sh

#!/bin/bash

#


drop_ip=`tail -5000 /www/wdlinux/httpd-2.2.31/logs/access_log | grep -v "Baiduspider" | grep -v "Sogou web spider" |awk '{a[$1]++}END{for(i in a)if(a[i]>300)print i}'`


 for i in $drop_ip; do

   if [  -n $i   -a   -z "`iptables -nvL |grep $i`"  ];then

    /sbin/iptables -I INPUT -s $i -j DROP

   fi

 done


港台空间修改后的 drop_ip.sh

#!/bin/bash

#

declare -i COUNT=200

drop_ip=`tail -5000 /www/wdlinux/httpd-2.2.31/logs/access_log | grep -v "101.247.127.33" | grep -v "211.149.206.29" | grep -v "admin21232f297" | grep -v '\.jpg \|\.png \|\.gif \|\.js \|\.png \|\.css '  |grep -v '114.217.193.132' | grep -v "Baiduspider" | grep -v "Sogou" | grep -v "YisouSpider" | grep -v "bingbot" | grep -v "360Spider" | grep -v "HaosouSpider" | grep -v "Googlebot"  | awk '{a[$1]++}END{for(i in a)if(a[i]>'$COUNT')print i}'`



 for i in $drop_ip; do

   if [  -n $i ] && ! iptables -nvL | grep $i &>/dev/null ;then

     #echo ${i} `date`  >> /root/getipdate.txt

     /sbin/iptables -D INPUT -s $i -j DROP &> /dev/null  #可能会有重复,我也不懂,我们删除掉它吧

     /sbin/iptables -I INPUT -s $i -j DROP

     for  file in /home/wwwroot/*/public_html/public ;do

        if [ -d "$file" -a -f "${file}/.htaccess" ] && echo $i | grep '[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*\.[[:digit:]]*' &> /dev/null;then

                        # echo $i

                        HTACCESS=${file}/.htaccess

                        if ! grep $i $HTACCESS &>/dev/null;then

                          sed -i '/SetEnvIf X-Forwarded-for "0.0.0.0"/a \SetEnvIf X-Forwarded-for '\"$i\"' DenyAccess ' $HTACCESS

                          sed -i  's/\r$//g' $HTACCESS

                       fi

        fi

    done

   fi

 done




 


chmod +x /root/drop_ip.sh

crontab 里面

*/5 * * * * /bin/bash /root/drop_ip.sh   每隔5分钟执行,把过多的ip拒绝掉



下面是国内空间第二次改版后的drop_ip.sh

#!/bin/bash

#


declare -i COUNT=50

TIME=`date +%s`

TIME1=$[$TIME-60]

TIME1=`date +":%H:%M:" -d @$TIME1`

TIME2=$[$TIME-120]

TIME2=`date +":%H:%M:" -d @$TIME2`

TIME3=$[$TIME-180]

TIME3=`date +":%H:%M:" -d @$TIME3`


#百度好像有个 61.135 开头的 或其局域网是10.143开头的,放行吧

drop_ip=`tail -2000 /www/wdlinux/nginx-1.8.1/logs/access.log | grep "${TIME1}\|${TIME2}\|${TIME3}" | grep -v "tj\.4006363560\.com" | grep -v "61\.135" | grep -v "10\.143" | grep -v "112\.80\.44\.250" | grep -v "101\.247\.127\.33" |grep -v "103\.43\.188\.223" | grep -v "211\.149\.205\.29" | grep -v "admin21232f297" | grep -v '\.jpg[ |\?]\|\.png[ |\?]\|\.gif[ |\?]\|\.js[ |\?]\|\.png[ |\?]\|\.css[ |\?]'  |grep -v '114\.217\.193\.132' | grep -v "Baiduspider" | grep -v "Sogou" | grep -v "YisouSpider" | grep -v "bingbot" | grep -v "360Spider" | grep -v "HaosouSpider" | grep -v "Googlebot"  | awk '{a[$1]++}END{for(i in a)if(a[i]>'$COUNT')print i}'`

#echo $TIME1 $TIME2 $TIME3

echo $drop_ip

[ -n "$drop_ip" ] && echo "`date` $drop_ip"  >> drop_ip.txt


 for i in $drop_ip; do

   if [  -n $i ] && ! iptables -nvL | grep $i &>/dev/null ;then

     #echo ${i} `date`  >> /root/getipdate.txt

     /sbin/iptables -D INPUT -s $i -j DROP &> /dev/null  #可能会有重复,我也不懂,我们删除掉它吧

     #echo "/sbin/iptables -I INPUT -s $i -j DROP"

    /sbin/iptables -I INPUT -s $i -j DROP


   fi

 done







2) 下在的功能是清理拒绝的ip,防止iptables 过于臃肿

# vim /root/drop_iptables.sh

#!/bin/bash

#

table=/tmp/iptables.log

/sbin/iptables-save > $table

drop_ip=`cat $table |awk -F'[ /]' '/INPUT.*DROP/{if (NR>6){print $4}}'`

for i in $drop_ip; do

  /sbin/iptables -D INPUT -s $i -j DROP

done


港台空间修改后的 drop_iptables.sh

# vim /root/drop_iptables.sh

#!/bin/bash

#

table=/tmp/iptables.log

/sbin/iptables-save > $table

drop_ip=`cat $table |awk -F'[ /]' '/INPUT.*DROP/{if (NR>6){print $4}}'`

for i in $drop_ip; do

  /sbin/iptables -D INPUT -s $i -j DROP

 # 下面是删除 .htaccess里面的拒绝的ip

  for  file in /home/wwwroot/*/public_html/public ;do

        if [ -d "$file" -a -f "${file}/.htaccess" ];then

                        HTACCESS=${file}/.htaccess

                        sed -i '/'$i'/d' $HTACCESS

                        sed -i  's/\r$//g' $HTACCESS

        fi

  done

done


港台空间第二次修改后的 drop_iptables.sh

#!/bin/bash

#

table=/tmp/iptables.log

/sbin/iptables-save > $table

drop_ip=`cat $table |awk -F'[ /]' '/INPUT.*DROP/{if (NR>6){print $4}}'`

for i in $drop_ip; do

  /sbin/iptables -D INPUT -s $i -j DROP

done

# 下面是删除 .htaccess里面的所有的拒绝的ip

for  file in /home/wwwroot/*/public_html/public ;do

        if [ -d "$file" -a -f "${file}/.htaccess" ];then

                        HTACCESS=${file}/.htaccess

                        sed -i '/SetEnvIf/{/0.0.0.0/!d}' $HTACCESS

                        sed -i 's/\r$//g' $HTACCESS

        fi

done

~








chmod +x /root/drop_iptables.sh

crontab 里面
0 */3 * * * /bin/bash /root/drop_iptables.sh     每隔3小时执行清空拒绝的id,防止iptables过份臃肿





切记 .htaccess 文件的最后包括下面这几行

Order Deny,Allow

 SetEnvIf X-Forwarded-for "0.0.0.0" DenyAccess

Deny from env=DenyAccess

image.png


如果 开启nginx+apache 的话 下面是nginx.conf的配置  wwwlogs 是日志格式  %{X-FORWARDED-FOR}i 是有代理时代理访问的源ip

image.png


如果仅仅是apache开启的话 下而 httpd.conf的配置 common是日志格式 %{X-FORWARDED-FOR}i 是有代理时代理访问的源ip

image.png


DDOS是一种分布式拒绝服务攻击,通常是攻击者使用几百台机器或甚至几万台以上的机器进行试图掩没攻击目标的一种攻击行为,使目标机器在短时间内变成瘫痪现象,一下接收了巨大的数据包,它就算是台巨型机的速度,也不能达到一下子处理几千台或几万台机子攻击目标的现象。而CC攻击是由DDOS攻击衍生而来,当初绿盟科技推广了一款能够抵御DDOS攻击的方法,俗称黑洞(Collapsar),黑客则通过攻击操作数据的网页达到服务器目标机器瘫痪的目的,并且挑衅性的将这种方法称为CC攻击(Challenge Collapsar),即挑战黑洞。就例如几年前12306购票网站,网页打不开的情况,就是因为访问量太大造成。

既然服务器都存在CC攻击的可能性,那么我们就可以写一个脚本来用iptables把连接过多的给删掉。首先方法即使从日志中提取ip,进行分析

vim /usr/local/iptables/drop_ip.sh

#!/bin/bash

drop_ip=`tail -5000 /var/local/nginx/logs/access.log | awk '{a[$1]++}END{for(i in a)if(a[i]>300)print i}' `

if test -n $drop_ip;then

for i in drop_ip

do

if [ -z "`iptables -nvL |grep $i`" ];then

/sbin/iptables -I INPUT -s $i -j DROP

fi

done

fi

定期执行

crontab -e

*/5 * * * * sh /usr/local/iptables/drop_ip.sh

为了防止防火墙规则过于臃肿我们需要把一些过时的规则给删掉

vim /usr/local/iptables/drop_iptables.sh

#!/bin/bash

table=/tmp/iptables.log

iptables-save > $table

drop_ip=`cat $table |awk -F'[ /]' /DROP/'{if (NR>8){print $4}}'`

for i in $drop_ip

do

/sbin/iptables -D INPUT -s $i -j DROP

done

//定期执行此脚本

crontab -e

0 */3 * * * sh /usr/local/iptables/drop_iptables.sh


来自  https://baijiahao.baidu.com/s?id=1588212564531694639&wfr=spider&for=pc

普通分类: