1.我们需要找到恶意ip
,可以利用脚本分析在一分钟单个IP
访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过60
次,你可以设置为更小),即认定为恶意IP
。宝塔面板的shell
脚本如下:
#/bin/bash #日志文件,如不是宝塔面板可以根据需要改成你自己的路径 logfile=/www/wwwlogs/ last_minutes=1 #开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义) start_time=date+"%Y-%m-%d%H:%M:%S"-d'-1minutes' echo$start_time #结束时间现在 stop_time=`date+"%Y-%m-%d%H:%M:%S"` echo$stop_time cur_date="`date+%Y-%m-%d`" echo$cur_date #过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径 tac$logfile/www.xxxx.com.log|awk-vst="$start_time"-vet="$stop_time"'{t=substr($2,RSTART+14,21);if(t>=st&&t<=et){print$0}}'|awk'{print$1}'|sort|uniq-c|sort-nr>$logfile/log_ip_top10 ip_top=`cat$logfile/log_ip_top10|head-1|awk'{print$1}'` ip=`cat$logfile/log_ip_top10|awk'{if($1>2)print$2}'` #单位时间[1分钟]内单ip访问次数超过2次的ip记录入black.txt,这里为了测试设置了2,你需要改成其它的数字 forlinein$ip do echo$line>>$logfile/black.txt echo$line #这里还可以执行CF的API来提交数据到CF防火墙 done
使用以下代码就可以将恶意IP
批量添加到Cloudflare
的防火墙了,替换为你的Cloudflare API
。
#!/bin/bash #Author:podipod.com #Date:2020 #填CloudflareEmail邮箱 CFEMAIL="[email protected]" #填CloudflareAPIkey CFAPIKEY="xxxxxxxxxxxxxxxx" #填CloudflareZonesID域名对应的ID ZONESID="xxxxxxxxxxxxxxxxxxxx" #/www/wwwlogs/black.txt存放恶意攻击的IP列表 #IP一行一个。 IPADDR=$(</www/wwwlogs/black.txt) #循环提交IPs到Cloudflare防火墙黑名单 #模式(mode)有block,challenge,whitelist,js_challenge forIPADDRin${IPADDR[@]};do echo$IPADDR curl-s-XPOST"https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules"\ -H"X-Auth-Email:$CFEMAIL"\ -H"X-Auth-Key:$CFAPIKEY"\ -H"Content-Type:application/json"\ --data'{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CCAttatch"}' done #删除IPs文件收拾干净 rm-rf/data/wwwlogs/black.txt
#/bin/bash #日志文件,你需要改成你自己的路径 logfile=/www/wwwlogs/ last_minutes=1 #开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义) start_time=date+"%Y-%m-%d%H:%M:%S"-d'-1minutes' echo$start_time #结束时间现在 stop_time=`date+"%Y-%m-%d%H:%M:%S"` echo$stop_time cur_date="`date+%Y-%m-%d`" echo$cur_date #过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径 tac$logfile/www.www.xxxx.com.log|awk-vst="$start_time"-vet="$stop_time"'{t=substr($2,RSTART+14,21);if(t>=st&&t<=et){print$0}}'|awk'{print$1}'|sort|uniq-c|sort-nr>$logfile/log_ip_top10 ip_top=`cat$logfile/log_ip_top10|head-1|awk'{print$1}'` ip=`cat$logfile/log_ip_top10|awk'{if($1>2)print$2}'` #单位时间[1分钟]内单ip访问次数超过2次的ip记录入black.txt,这里为了测试设置了2,你需要改成其它的数字 forlinein$ip do echo$line>>$logfile/black.txt echo$line #这里还可以执行CF的API来提交数据到CF防火墙 done #填CloudflareEmail邮箱 CFEMAIL="[email protected]" #填CloudflareAPIkey CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #填CloudflareZonesID域名对应的ID ZONESID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" #/www/wwwlogs/black.txt存放恶意攻击的IP列表 #IP一行一个。 IPADDR=$(</www/wwwlogs/black.txt) #循环提交IPs到Cloudflare防火墙黑名单 #模式(mode)有block,challenge,whitelist,js_challenge forIPADDRin${IPADDR[@]};do echo$IPADDR curl-s-XPOST"https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules"\ -H"X-Auth-Email:$CFEMAIL"\ -H"X-Auth-Key:$CFAPIKEY"\ -H"Content-Type:application/json"\ --data'{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CCAttatch"}' done #删除IPs文件收拾干净 rm-rf/www/wwwlogs/black.txt
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!