前言
昨天在网上找Cloudflare自动脚本提交攻击(恶意)IP 到防火墙的脚本,发现都是有瑕疵的,都是统计整个日志时间段的 IP,不能在设定的统计时间段内准确列出恶意 IP,现修改了下脚本发出来分享给大家。 此脚本利用脚本分析网站日志,从日志中搜集异常 IP,然后使用 Cloudflare API 批量将恶意 IP 添加到 Cloudflare 的防火墙当中。
使用说明
原版脚本
下面是 wafou 的原版代码
#/bin/bash
#日志文件,你需要改成你自己的路径logfile=/data/wwwlogs/last_minutes=1#开始时间 1 分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)start_time= date +“%Y-%m-%d %H:%M:%S” -d ‘-1 minutes’echo $start_time#结束时间现在stop_time=`date +“%Y-%m-%d %H:%M:%S”`echo $stop_timecur_date=“`date +%Y-%m-%d`”echo $cur_date#过滤出单位之间内的日志并统计最高 ip 数,请替换为你的日志路径tac $logfile/sky.ucblog.net_nginx.log | awk -v st=“$start_time” -v et=“$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_top10ip_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.log,这里为了测试设置 2,你需要改成其它的数字for line in $ipdoecho $line >> $logfile/black.txtecho $line# 这里还可以执行 CF 的 API 来提交数据到 CF 防火墙done# 填 Cloudflare Email 邮箱CFEMAIL=“freehao123@gmail.com”# 填 Cloudflare API keyCFAPIKEY=“xxxxxxxxxxxxxxxxxxxxxxxx”# 填 Cloudflare Zones ID 域名对应的 IDZONESID=“xxxxxxxxxxxxxxxxxxxxxxxxxxx”# /data/wwwlogs/black.txt 存放恶意攻击的 IP 列表# IP 一行一个。IPADDR=$(</data/wwwlogs/black.txt)# 循环提交 IPs 到 Cloudflare 防火墙黑名单# 模式(mode)有 block, challenge, whitelist, js_challengefor IPADDR in ${IPADDR[@]}; doecho $IPADDRcurl -s -X POST “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”:”CC Attatch”}’done# 删除 IPs 文件收拾干净
rm -rf /data/wwwlogs/black.txt
改版脚本
下面是博主修改后的代码
#/bin/bash
# 日志文件,你需要改成你自己的路径logfile=/home/wwwlogs/last_minutes=1# 开始时间 1 分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)start_time=`date -d“$last_minutes minutes ago” +“%H:%M:%S”`echo $start_time# 结束时间(现在)stop_time=`date +“%H:%M:%S”`echo $stop_time# 过滤出单位之间内的日志并统计最高 ip 数,替换为你的日志路径tac $logfile/xxx.log | awk -v st=“$start_time” -v et=“$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_top10ip_top=`cat $logfile/log_ip_top10 | head -1 | awk ‘{print $1}’`ip=`cat $logfile/log_ip_top10 | awk ‘{if($1>70)print $2}’`# 单位时间[1 分钟]内单 ip 访问次数超过 70 次的 ip 记录入 black.txtfor line in $ipdoecho $line >> $logfile/black.txtecho $linedone# 这里还可以执行 CF 的 API 来提交数据到 CF 防火墙# 填 Cloudflare Email 邮箱CFEMAIL=“xxx@gmail.com”# 填 Cloudflare API keyCFAPIKEY=“xxxxxxxxxxxxxxxxxxxxxxxx”# 填 Cloudflare Zones ID 域名对应的 IDZONESID=“xxxxxxxxxxxxxxxxxxxxxxxxxx”# /home/wwwlogs/black.txt 存放恶意攻击的 IP 列表# IP 一行一个。IPADDR=$(</home/wwwlogs/black.txt)# 循环提交 black.txt 到 Cloudflare 防火墙黑名单# 模式(mode)有 block(屏蔽), challenge(验证码), whitelist(白名单), js_challenge(js 人机验证,俗称:5 秒盾)for IPADDR in ${IPADDR[@]}; doecho $IPADDRcurl -s -X POST “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”:”CC Attatch”}’done# 删除 black.txt 文件收拾干净
rm -rf /home/wwwlogs/black.txt
下载脚本
wget https://dl.yunloc.com/Shell/cf-block-attack-ip.sh && chmod +x cf-block-attack-ip.sh
需要设置一个定时任务,让脚本每钟检测一次
* * * * * /bin/bash /root/cf-block-attack-ip.sh >> /home/wwwlogs/oult.log
结语
部分内容参考自114源码版权所有。本站文章可自由引用,但请注明来源。
1.本网站资源来源于网络收集,如有侵权,请联系站长进行删除处理。请发送邮件至:chensi2024@foxmail.com,我们将第一时间处理!
2.资源所需价格并非资源售卖价格,是收集、整理、编辑详情以及本站运营的适当补贴,并且本站不提供任何免费技术支持 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
3.所有资源仅限于参考和学习,版权归原作者所有,更多请阅读网站声明。
4.如下载链接失效,请在当前页留言或私信管理员,24小时必处理结束!
5.本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解。
6.本站提供的资源仅限用于学习交流和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险以及产生法律纠纷与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除。