Caddy防CC

正文索引 [隐藏]

前言

某个猫咪苦于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 次是做测试用的。)