• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

运营维护 [Cloudflare]Caddy防cc

LixWorth

此身可是永远十七岁的青春美少女

管理成员
版主
开发者
注册
2018/03/04
消息
49
金粒
19,500金粒
概括

这是一个根据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
相关链接

请务必给我颗小星星吖!

 

附件

  • PKN$N6VAZ@3F$(B8IKBTQ_8.png
    PKN$N6VAZ@3F$(B8IKBTQ_8.png
    307.9 KB · 查看: 22,966
  • 1584596936498.png
    1584596936498.png
    5.3 KB · 查看: 4
最后由版主编辑于:
补充一点,log_ip_top 会自动清空,log_ip_top 会自动清空,log_ip_top 会自动清空并不是没有记录
 

在线会员

  • 杨柳河边8oh
  • 没钱的山海
  • 传奇
  • Sh1roCu
  • ender的罗小黑
  • Daemony
  • isuo
  • 云里雾里
  • EternalSoot
  • Caldron
  • 78_91Vip
  • 老飞机
  • SilverEar949601
  • Yoyo666
  • Xhl_laser
  • 从宛才
  • 匡博弈
后退
顶部 底部