最近总是看到一个可爱的小狼来验证是否为机器人(心都要化了)

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点星真的撑不下去

好人一生平安。

meow~