最近总是看到一个可爱的小狼来验证是否为机器人(心都要化了)
Anubis 是一个开源的 Web 应用安全防护工具,主要用于防止恶意访问、爬虫抓取和自动化攻击,同时保证合法用户和搜索引擎的正常访问。它通过 前置 JS 验证挑战(类似 Cloudflare 的 JS challenge) 来区分真实用户与自动化请求。
Anubis官网: https://anubis.techaro.lol/
Anubis Github开源: https://github.com/TecharoHQ/anubis
🔹 核心功能
1. JS 挑战/验证机制
对陌生或可疑访问者发送 JavaScript 挑战(其实就是用PoW验证是否为真正的浏览器,相当于在浏览器里面小挖了一下矿)
只有通过验证的请求才会转发到后台服务
有效防止 Bot、爬虫和小挖矿脚本
2. 访问控制与白名单
可指定搜索引擎 UA(Bing、Baidu、IndexNow)放行
支持 IP 黑名单/白名单、限速、封禁策略
3. 防爬虫与反爬保护
自动检测异常请求行为
可配置访问速率限制(Rate Limit)
对攻击者自动封禁一定时间
4. 灵活的后端转发
Anubis 作为 反向代理,前端请求先到 Anubis,再转发到实际 Web 服务(如 Halo、WordPress 等)
可以无缝接入现有服务,不影响原有功能
🔹 使用场景
保护博客、论坛或 Web 应用免受恶意访问和爬虫
在不影响搜索引擎收录的情况下拦截陌生 UA
提供 JS 挑战、验证码或速率限制,防止小挖矿/刷流量行为
与 Caddy、Nginx 或其他反向代理结合使用
🔹 部署方式
支持前端反代配置,兼容 HTTPS、多个后端服务
可在测试环境直接启用 ANUBIS_ALWAYS_CHALLENGE=true 强制所有请求验证,方便调试
以docker为例,使用caddy反向代理
拉取 Anubis 镜像
docker pull ghcr.io/techarohq/anubis:latest
配置 Docker Compose
anubis:
image: ghcr.io/techarohq/anubis:latest
container_name: anubis
expose:
- "8000"
environment:
ANUBIS_SECRET_KEY: anubispassword
ANUBIS_BACKEND: http://halo:8090
ANUBIS_LOG_LEVEL: info
ANUBIS_CHALLENGE_MODE: javascript
ANUBIS_CHALLENGE_DIFFICULTY: medium
ANUBIS_ALLOW_AGENTS: bingbot,baiduspider,IndexNow
restart: always
depends_on:
- halo
caddy:
image: docker.io/library/caddy:latest
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy-data:/data
- ./caddy-config:/config
restart: always
depends_on:
- anubis
配置 Caddy 反代到 Anubis
Caddyfile 示例:
blog.minecraftglz.top {
reverse_proxy anubis:8000
}
所有请求先经过 Anubis,再转发到 Halo
启动容器,测试 Anubis
白名单 UA(搜索引擎)
curl -I -A "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" https://blog.minecraftglz.top
应直接返回 Halo 页面(200 OK),不触发 challenge
陌生 UA(触发挑战)
curl -I -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://blog.minecraftglz.top
应该返回 challenge 页面(JS 验证)
⚠ 注意:如果你使用了 CDN(腾讯 EdgeOne),curl 可能返回 404 或被 CDN 拦截,需要 绕过 CDN 或在本地 hosts 指向服务器 IP 测试。
常用环境变量
变量 功能
ANUBIS_SECRET_KEY 安全密钥
ANUBIS_BACKEND 转发到的后端服务地址
ANUBIS_CHALLENGE_MODE 验证类型:javascript/hash
ANUBIS_CHALLENGE_DIFFICULTY 挑战难度:easy/medium/hard
ANUBIS_ALLOW_AGENTS 白名单 UA,逗号分隔
ANUBIS_ALWAYS_CHALLENGE true 强制所有请求验证,用于测试
ANUBIS_LOG_LEVEL 日志级别:info/debug
作者在他的博客中也说,这个可爱小狼其实是作者对互联网开源项目的一种感谢,他不想只是白嫖。
也有人质疑这个程序浪费了他们的时间,但这也带来了意外的传播效果,许多人正是因为看到有人抱怨这个动漫形象,才知道了Anubis的存在和可用性。
在房租、食品价格和硬件成本不断上涨的今天,作者需要资金支持,现实靠的是钱,光靠GitHub点星真的撑不下去。
好人一生平安。