首页
关于我们
友链链接
壁纸下载
更多
统计中心
热点搜索
图床上传
推荐
剩余价值
磁链清理
IP定位
Search
1
[Win DD包] wes7-x86-cn-精简,安装后仅占用1.55G存储空间
25,608 阅读
2
v2rayN基础使用教程、配置说明、添加订阅、路由选择
11,201 阅读
3
保姆级教程!甲骨文ARM DD成Debian10并升级内核成5.10
6,251 阅读
4
鸿蒙Next也能科学上网?Clash Meta for harmorny next os
5,795 阅读
5
N1教程:Openwrt安装docker webui界面(基于flippy openwrt n1固件)
5,327 阅读
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
MV频道
登录
Search
标签搜索
vps
typecho
linux
bench
mysql
cloudflare
nginx
lnmp
ssl
empirecms
openwrt
google
centos
docker
n1
301
qbittorrent
telegram
free
onedrive
V+变量
累计撰写
292
篇文章
累计收到
224
条评论
首页
栏目
Linux学堂
网站建设
网络资源
主题插件
固件工具
主机评测
MV频道
页面
关于我们
友链链接
壁纸下载
统计中心
热点搜索
图床上传
推荐
剩余价值
磁链清理
IP定位
搜索到
1
篇与
的结果
2025-08-22
在用户的浏览器里挖矿——Anubis 网站防护工具配置教程
一、项目背景Anubis工作模式类似于Cloudflare的Javascript挑战,拦截请求之后,用户需要通过挑战之后才能继续访问。而Anubis需要客户端完成一定难度的Hash计算,简单说就是挖矿。客户端需要进行一定负载的计算,计算出正确结果之后才能进入网站。这对于正常用户的客户端来说并不算是什么,在难度2-4下,大概率计算时间小于2秒钟,一闪而过用户感知小。在难度5-6时,浏览器需要进行10-30秒以上的计算。在CC攻击的时候,攻击者会控制大量的无头浏览器进行攻击,使用Anubis之后,会在攻击者的无头浏览器中执行Hash计算,高难度的Hash计算会拖垮攻击者的服务器,从而降低攻击频率。项目官网我在本地Debian12 + NGINX系统中已经跑通,随后我会发表一篇博客详细描述配置PS;Anubis有非常强大的功能,包括针对不用GEOIP、不同AS的规则,正在进一步探索中。PPS;试了下难度设置为6,大概1分钟才计算完成,期间CPU(i5-13490H)占用80%左右。二、工作原理1 AnubisAnubis是一个网站防护工具,其工作原理类似常见的Cloudflare验证,会在用户进入网站之前对客户端进行检查。客户端需要完成一定难度的Hash计算,服务器验证计算结果后放行,Hash计算代表了客户端可能需要执行几千几万次的计算,而服务器验证执行执行一次,对服务器开销小。当有网络爬虫、CC攻击想进入源站是,需要在攻击者的客户端(比如无头浏览器中)进行一定量的Hash计算,攻击者一般会在一台物理机中运行多个配置了代理的无头浏览器,这些Hash计算会拖垮攻击者的服务器,从而迫使攻击者放弃或减低攻击频率。现代设备通常都具有一定的限制算力,这些任务对于这些客户端来说,通常只需要几毫秒或几秒中即可完成,用户只需要等待一段时间,不需要进行任何操作,成功后会自动进入实际后端服务。2.工作原理Hash计算和经典的比特币挖矿一致,客户端需要使用一个确定的字符串加上任意数字,进行 sha256 计算,得到的 64 为hash值的前x个数为 0,x就是difficultyconst hash = await sha256(`${challenge}${nonce}`);整体流程客户端第一次访问时,会根据访问者的IP、ASN、User-Agent,服务器的工作负载,计算出一个数值 weight,之后通过 weight 匹配不同难度的Hash计算任务给客户端。客户端完成计算后,由服务器进行验证,成功之后放行到真正的后端服务,同时返回 Set-Cookies 以保存一段时间验证结果,当用户下次访问时,可复用上次的验证结果。3.与NGINX搭配![[Pasted image 20250821210211.png]]流量从 80/443 端口进入之后,先交给Anubis进行拦截,延迟完成之后在交还回NGINX进行后续流程。在单个服务器内通过unix socks进行交互。三、安装/配置教程此处以Debian 12 系统为例1 安装Anubis1)下载并安装(1)请在Github获取最新的版本号wget -O /tmp/anubis.deb https://github.com/TecharoHQ/anubis/releases/download/v1.21.3/anubis_1.21.3_amd64.deb && apt install /tmp/anubis.deb(2)不能直连Github,可以使用加速域名,或者手动下载上传到服务器wget -O /tmp/anubis.deb https://ghfast.top/https://github.com/TecharoHQ/anubis/releases/download/v1.21.3/anubis_1.21.3_amd64.deb && apt install /tmp/anubis.deb(3)修改 /etc/anubis/default.env,内容如下BIND=/run/anubis/instance.sock BIND_NETWORK=unix SOCKET_MODE=0666 TARGET=unix:///run/nginx/nginx.sock(4)复制默认策略文件,暂不修改cp /usr/share/doc/anubis/botPolicies.yaml /etc/anubis/botPolicies.yaml2)systemd运行(1)创建service文件vi /etc/systemd/system/anubis.service[Unit] Description=Anubis Bot Protection After=network.target [Service] EnvironmentFile=/etc/anubis/default.env ExecStart=/usr/bin/anubis \ -bind /run/anubis/instance.sock \ -bind-network unix \ -socket-mode 0666 \ -target unix:///run/nginx/nginx.sock \ -metrics-bind 127.0.0.1:9091 \ -metrics-bind-network tcp \ -policy-fname /etc/anubis/botPolicies.yaml Restart=always User=www-data Group=www-data [Install] WantedBy=multi-user.target(2)创建目录mkdir -p /run/anubis /run/nginx(3)修改权限此处的用户和NGINX相同chown www-data:www-data /run/anubis /run/nginx(4)启用Anubissystemctl enable --now anubis.service(5)确保已经成功运行systemctl status anubis2 配置NGINX此处提供一份可用NGINX,请自行修改扩展user root; worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; } http { upstream anubis { server unix:/run/anubis/instance.sock; } server { listen 443 ssl http2; server_name uptime.vio.vin; ssl_certificate /etc/ssl/violet/certs/all.vio.vin.cert.pem; ssl_certificate_key /etc/ssl/violet/certs/all.vio.vin.key.pem; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://anubis; } } server { listen unix:/run/nginx/nginx.sock; server_name uptime.vio.vin; location / { proxy_pass http://10.115.15.178:3001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } }upstream:定义上游服务器为anubis第一个server:监听 443 入站连接,传输给anubis,传输客户端IP用于IP相关策略判断第二个server:anubis验证通过之后,实际反向代理的位置至此,基础配置已完成,默认情况下低分析客户端难度为 2,高风险为 43 Bot策略官网文档:https://anubis.techaro.lol/docs/admin/policies需要调整 botPolicies.yaml 文件默认的botPolicies.yaml 配置文件:https://github.com/TecharoHQ/anubis/blob/main/data/botPolicies.yamlbots中定义了多个规则,可以看到已经通过import导入了一部分规则,这部分的文件可以在 /usr/share/doc/anubis/data/bots 中找到默认的规则如下,可以仿照这些规则写自己的规则1)可配置匹配规则(1)匹配请求头/usr/share/doc/anubis/data/bots/cloudflare-workers.yaml- name: cloudflare-workers headers_regex: CF-Worker: .* action: WEIGH weight: adjust: 15(2)匹配User-Agent/usr/share/doc/anubis/data/bots/headless-browsers.yaml- name: lightpanda user_agent_regex: ^LightPanda/.*$ action: DENY - name: headless-chrome user_agent_regex: HeadlessChrome action: DENY - name: headless-chromium user_agent_regex: HeadlessChromium action: DENY(3)指定表达式/usr/share/doc/anubis/data/bots/aggressive-brazilian-scrapers.yaml- name: deny-aggressive-brazilian-scrapers action: WEIGH weight: adjust: 20 expression: any: # Internet Explorer should be out of support - userAgent.contains("MSIE") # Trident is the Internet Explorer browser engine - userAgent.contains("Trident") # Opera is a fork of chrome now - userAgent.contains("Presto") # Windows CE is discontinued - userAgent.contains("Windows CE") # Windows 95 is discontinued - userAgent.contains("Windows 95") # Windows 98 is discontinued - userAgent.contains("Windows 98") # Windows 9.x is discontinued - userAgent.contains("Win 9x") # Amazon does not have an Alexa Toolbar. - userAgent.contains("Alexa Toolbar") # This is not released, even Windows 11 calls itself Windows 10 - userAgent.contains("Windows NT 11.0") # iPods are not in common use - userAgent.contains("iPod")(4)匹配客户端IP/usr/share/doc/anubis/data/clients/mistral-mistralai-user.yaml# Acts on behalf of user requests # https://docs.mistral.ai/robots/ - name: mistral-mistralai-user user_agent_regex: MistralAI-User/.+; \+https\://docs\.mistral\.ai/robots action: ALLOW # https://mistral.ai/mistralai-user-ips.json remote_addresses: [ "20.240.160.161/32", "20.240.160.1/32", ](5)匹配GEOIP- name: countries-with-aggressive-scrapers action: WEIGH geoip: countries: - BR - CN weight: adjust: 10(6)匹配ASN- name: aggressive-asns-without-functional-abuse-contact action: WEIGH asns: match: - 13335 # Cloudflare - 136907 # Huawei Cloud - 45102 # Alibaba Cloud weight: adjust: 10(7)匹配后动作动作 解释ALLOW 允许,跳过后续所有检查DENY 拒绝访问CHALLENGE 进行客户端挑战WEIGH 修改请求权重ALLOW和DENY不再解释2)CHALLENGE- name: generic-bot-catchall user_agent_regex: (?i:bot|crawler) action: CHALLENGE challenge: difficulty: 16 # impossible report_as: 4 # lie to the operator algorithm: slow # intentionally waste CPU cycles and timename:名称,可自定义user_agent_regex:正则表达式匹配User-Agentaction:动作,立即进行客户端挑战challenge:客户端挑战配置difficulty:难度,16 表示计算出的hash值前 16 位为 0,不可能完成(比特币的前导 0 个数为 19-20),在客户端完成 16 为的计算可能需要几万年甚至更久(攻击者看者 99%的CPU陷入沉思)report_as:用户在界面上看到的难度数值(你甚至可以骗他,这个进度条怎么一直卡在 99%不走呢)algorithm:采用的Hash算法,slow故意折磨CPU3)WEIGH调整请求的权重,正数为增加权重,负数为减少权重,后续会进入到 thresholds 中,针对不同的请求设置不同的CHALLENGE0-10 的权重,进行快速算法,几乎不需要等待- name: mild-suspicion expression: all: - weight > 0 - weight < 10 action: CHALLENGE challenge: algorithm: metarefresh difficulty: 2 report_as: 24)其他根据服务器负载动态调整示例在配置文件中已给出,有需要可以启用 # ## System load based checks. # # If the system is under high load, add weight. # - name: high-load-average # action: WEIGH # expression: load_1m >= 10.0 # make sure to end the load comparison in a .0 # weight: # adjust: 20 ## If your backend service is running on the same operating system as Anubis, ## you can uncomment this rule to make the challenge easier when the system is ## under low load. ## ## If it is not, remove weight. # - name: low-load-average # action: WEIGH # expression: load_15m <= 4.0 # make sure to end the load comparison in a .0 # weight: # adjust: -10
2025年08月22日
12 阅读
0 评论
0 点赞