• Linux
  • 自动找到CC攻击IP,然后提交到 Cloudflare 防火墙

是真的被CC烦了,所以写了个脚本,自动寻找CC IP,然后提交到CF防火墙:

#/bin/bash
# 日志文件,你需要改成你自己的路径
logfile=/var/log/nginx
last_minutes=5
# 开始时间 5 分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
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/access.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>60)print $2}'`
# 单位时间[5 分钟]内单 ip 访问次数超过 60 次的 ip 记录入 black.txt
for line in $ip
do
echo $line >> $logfile/black.txt
echo $line
done
# 这里还可以执行 CF 的 API 来提交数据到 CF 防火墙
# 填 Cloudflare Email 邮箱
CFEMAIL="email@email.com"
# 填 Cloudflare API key
CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxx"
# 填 Cloudflare Zones ID 域名对应的 ID
ZONESID="xxxxxxxxxxxxxxxxxxxxxxxx"
# /var/log/nginx/black.txt 存放恶意攻击的 IP 列表
# IP 一行一个。
IPADDR=$(</var/log/nginx/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 /var/log/nginx/black.txt

配置一下 cron 自动运行脚本,比如有傻逼每天晚6点以后就攻击这个社区,那么就可以配置18点-23点,每隔30分钟运行一次这个脚本。

crontab -e
0,30 18-23 * * * bash /root/ccattatch.sh
/etc/init.d/cron restart

有误屏蔽的小伙伴请在下面留下你IP的前两位,比如 173.63 * *,俺会在CF上解禁。

已经 修改 规则为 直链 应该不会被绑了

sicm 这个IP没有被屏蔽。应该是cf的规则太严导致的。俺已经调低了

9 天 后
21 天 后

如果不用cf的cdn,也可以把cc你网站的IP提交到iptables进行封禁,添加下面代码:

for i in `cat $logfile/black.txt`;
    do iptables -I INPUT -s $i -j DROP;
done
24 天 后

./ccattatch.sh: line 42: syntax error: unexpected end of file
姥爷,这是啥子问题啊