运营维护 [Cloudflare]Caddy防cc

LixWorth

此身可是永远十七岁的青春美少女
管理成员
版主
  • 二周年纪念
  • 正版用户
  • 论坛元老
概括

这是一个根据awk拆分Caddy生成的日志,将请求一段时间内超过限制次数请求的IP进行储存,然后使用curl提交到 CF API,自动banip
肯定会有比这种方法更便捷的方案,但是这个有现成的例子,只要稍加修改就可以用,所以何乐不为呢?(其实是懒和希望白嫖小星星)

使用方法
适用于:Caddy 1.04
  • Caddy 需要安装 realIP 插件
  • 开启Caddy的日志
    代码:
    log log / /usr/local/caddy/log/web.log "{remote} - {user} [{when}] {when_unix} \"{method} {uri} {proto}\" {status} {size} \"{>Referer}\" \"{>User-Agent}\""
  • 自定义你的脚本(记得一定一定要替换API)https://raw.githubusercontent.com/lixworth/CFBlockIP/master/cf-blockip.sh
  • 添加定时任务(比如可以使用宝塔面板的定时任务)
  • 1584597142137.png
  • 所需API*2(点击图片即可传送)
  • 1584597031744.png
  • 1584596975544.png

源码解析
被某巨佬要求写(水)的内容长一些,那我就简单分析一下源码吧

代码:
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}'`
这是从获取到ip的log_ip_top文件中,查找出有没有同个ip超过5次请求(测试专用),若有的话,最后使用curl请求cloudflare的api。这个次数建议设置为60,1分钟限制60次的请求,可以大概率不会被误封

效果展示
1584596772710.png
相关链接

请务必给我颗小星星吖!

 

附件

由版主最后编辑:
  • 喜欢
反馈: YYTINTEL-2333

推广

Document

新主题 新资源 新回复