此脚本利用脚本分析网站日志,从日志中搜集异常 IP,然后使用 Cloudflare API 批量将恶意 IP 添加到 Cloudflare 的防火墙当中。
#/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_top10 ip_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.txt for line in $ip do echo $line >> $logfile/black.txt echo $line done # 这里还可以执行 CF 的 API 来提交数据到 CF 防火墙 # 填 Cloudflare Email 邮箱 CFEMAIL="xxx@gmail.com" # 填 Cloudflare API key CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxx" # 填 Cloudflare Zones ID 域名对应的 ID ZONESID="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[@]}; do echo $IPADDR curl -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://www.7198.net/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
最新评论
十塊年費是直接從這張卡裡的外幣按匯率扣?
有人申请成功了吗?我的已经两天了,没有消息,没有收到成功邮件。信用卡扣了款!