前言
某个猫咪苦于Caddy没有防CC脚本,于是自己撸了一个
自动读取caddy log文件中的IP进行屏蔽,自动提交Cloudflare
效果
先来看效果:
准备
获取CF Key:
安装Caddy
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh http.realip
注意:一定要安装http.realip
这个插件
使用说明
启动:/etc/init.d/caddy start
停止:/etc/init.d/caddy stop
重启:/etc/init.d/caddy restart
查看状态:/etc/init.d/caddy status
查看Caddy启动日志:tail -f /tmp/caddy.log
安装目录:/usr/local/caddy
Caddy配置文件位置:/usr/local/caddy/Caddyfile
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/xxx.xxx(域名)/
获取脚本
Gayhub:https://github.com/lixworth/CFBlockIP
-臭猫咪的网站:www.cattery.work
wget https://raw.githubusercontent.com/laoxong/lxongOther/master/Bash/caddy-anit-cc.sh
配置Caddy
配置文件必须出现:
log / /usr/local/caddy/log/web.log "{remote} - {user} [{when}] {when_unix} \"{method} {uri} {proto}\" {status} {size} \"{>Referer}\" \"{>User-Agent}\""
realip {
from 0.0.0.0/0
}
例子:
moec.top{
root /www/wwwroot/moec
timeouts none
gzip
log / /usr/local/caddy/log/web.log "{remote} - {user} [{when}] {when_unix} \"{method} {uri} {proto}\" {status} {size} \"{>Referer}\" \"{>User-Agent}\""
realip {
from 0.0.0.0/0
}
}
配置脚本
修改配置文件的Cloudflare帐号
# 填 Cloudflare 帐号的 Email 邮箱
CFEmail=""
# 填 Cloudflare 帐号的 Global API Key
GlobalAPIKey=""
# 填 Cloudflare 域名对应的 Zone ID
ZoneID=""
配置自动任务
在终端执行crontab -e
在弹出的文本编辑器添加
* * * * * 脚本地址
上面指的是每分钟执行一次
脚本解释
tac $logfile/web.log | awk -v st="$start_time" -v et="$end_time" '{if(($8 > st || $8 == st) && ($8 < et || $8 == et)) {print $3}}' | sort | uniq -c | sort -nr > $logfile/log_ip_top
tac是从文本web.log结尾(也就是最新请求的日志),反序到开始进行获取日志,然后通过awk筛选出所执行脚本的1分钟时间内(从start_time 到 end_time)的ip,加以记录到log_ip_top
修改拦截频率
ip=`cat $logfile/log_ip_top | awk '{if($1>5) print $2}'`
单位时间[1分钟]内相同ip访问次数超过 n 次自动加入到 Cloudflare 防火墙. (这里 5 次是做测试用的。)