- 注册
- 2018/03/04
- 消息
- 49
- 金粒
- 19,500金粒
概括
这是一个根据awk拆分Caddy生成的日志,将请求一段时间内超过限制次数请求的IP进行储存,然后使用curl提交到 CF API,自动banip
肯定会有比这种方法更便捷的方案,但是这个有现成的例子,只要稍加修改就可以用,所以何乐不为呢?(其实是懒和希望白嫖小星星)
使用方法
适用于:Caddy 1.04
源码解析
被某巨佬要求写(水)的内容长一些,那我就简单分析一下源码吧
tac是从文本web.log结尾(也就是最新请求的日志),反序到开始进行获取日志,然后通过awk筛选出所执行脚本的1分钟时间内(从start_time 到 end_time)的ip,加以记录到log_ip_top
这是从获取到ip的log_ip_top文件中,查找出有没有同个ip超过5次请求(测试专用),若有的话,最后使用curl请求cloudflare的api。这个次数建议设置为60,1分钟限制60次的请求,可以大概率不会被误封
效果展示

相关链接
请务必给我颗小星星吖!
这是一个根据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
- 添加定时任务(比如可以使用宝塔面板的定时任务)
- 所需API*2(点击图片即可传送)
源码解析
被某巨佬要求写(水)的内容长一些,那我就简单分析一下源码吧
代码:
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
代码:
ip=`cat $logfile/log_ip_top | awk '{if($1>5) print $2}'`
效果展示

相关链接
请务必给我颗小星星吖!
附件
最后由版主编辑于: