PoW-Shield

PoW-Shield

工作量证明机制实现的应用层DDoS防护工具

PoW Shield是一款基于工作量证明机制的应用层DDoS防护工具。它作为代理服务器验证请求合法性,无需用户操作即可完成验证,提供比传统验证码更流畅的体验。该工具还集成了速率限制、IP黑名单和Web应用防火墙功能,为Web服务提供全面保护。

PoW ShieldDDoS防护代理服务工作量证明应用层安全Github开源项目
<img height=auto width=100% src="https://yellow-cdn.veclightyear.com/87312a0a/61c1587e-36aa-4d08-a5c9-0d396b3c3871.jpg" alt="PoW Shield"> <div align="center"> <img src="https://yellow-cdn.veclightyear.com/87312a0a/d36b6f48-003c-4cc4-95e3-1ca87ffbaf06.svg"> <img src="https://yellow-cdn.veclightyear.com/87312a0a/11b10e67-b20a-4bda-b2d4-13808f059b09.svg"> <img src="https://yellow-cdn.veclightyear.com/87312a0a/c01d0466-25e0-4922-9d56-2cce5903a5fc.svg"> <a href="https://hub.docker.com/r/ruisiang/pow-shield"> <img src="https://img.shields.io/docker/image-size/ruisiang/pow-shield/latest?label=docker%20image%20size"> </a> </div> <div align="center"> <img src="https://img.shields.io/github/repo-size/ruisiang/pow-shield?color=orange"> <a href="https://deepsource.io/gh/RuiSiang/PoW-Shield/?ref=repository-badge"> <img src="https://deepsource.io/gh/RuiSiang/PoW-Shield.svg/?label=active+issues&show_trend=true&token=yoFuBlRVaXTzIVkgAB6aSUf3"> </a> <a href="https://deepsource.io/gh/RuiSiang/PoW-Shield/?ref=repository-badge"> <img src="https://deepsource.io/gh/RuiSiang/PoW-Shield.svg/?label=resolved+issues&show_trend=true&token=yoFuBlRVaXTzIVkgAB6aSUf3"> </a> </div>

描述

PoW Shield通过在后端服务和终端用户之间充当使用工作量证明的代理,提供OSI应用层的DDoS保护。该项目旨在为一般的反DDoS方法(如谷歌的ReCaptcha,一直是一个令人头疼的问题)提供一种替代方案。访问由PoW Shield保护的网络服务从未如此简单,只需访问URL,您的浏览器将自动为您完成剩余的验证。

PoW Shield旨在提供以下捆绑在单个网络应用/Docker镜像中的服务:

  • 工作量证明认证
  • 速率限制和IP黑名单
  • 网络应用防火墙

(新)LinkedIn上的文章

在Pentester Academy TV上展示

Medium上的故事

特性

  • 网络服务结构
  • 代理功能
  • PoW实现
  • Docker化
  • IP黑名单
  • 速率限制
  • 单元测试
  • WAF实现
  • 多实例同步(Redis)
  • SSL支持

通过PoW Phalanx控制器支持:

  • 多实例管理
  • 白名单令牌
  • 黑名单IP同步
  • 动态难度控制
  • 仪表板

Go语言的替代实现PoW-Shield-Go(进行中)用于压力测试和未来的优化生产版本。

工作原理

基本上,PoW Shield作为实际网络应用/服务前面的代理工作。它通过工作量证明进行验证,只将授权流量代理到实际服务器。该代理易于安装,并能够通过WAF保护低安全性应用。

当用户浏览受PoW Shield保护的网络服务时,后台发生以下情况:

  1. 服务器生成一个随机的十六进制编码"前缀",并将其与PoW Shield页面一起发送给客户端。
  2. 客户端的浏览器JavaScript然后尝试暴力破解一个"nonce",当与前缀附加时,可以生成一个SHA256哈希,其前导零位数多于服务器指定的"难度"D。即SHA256(前缀 + nonce)=0...0xxxx(二进制,前导0的数量大于D)
  3. 客户端JavaScript然后将计算出的nonce发送到服务器进行验证,如果验证通过,服务器为客户端生成一个cookie以通过认证。
  4. 服务器开始代理现在已认证的客户端流量到服务器,并启用WAF过滤。

配置

您可以通过以下方法配置PoW Shield。

  • nodejs: .env(示例:.env.example)
  • docker-compose: docker-compose.yaml(示例:docker-compose.example.yaml)
  • docker run: -e 参数

环境变量

变量类型默认值描述
PORT通用3000PoW Shield监听的端口
SESSION_KEY通用用于cookie签名的密钥,出于安全原因使用唯一密钥,否则任何人都可以伪造您的签名cookie
BACKEND_URL通用代理认证流量的位置,接受IP和URL(接受protocol://url(:port)或protocol://ip(:port))
DATABASE_HOSTRedis127.0.0.1redis服务主机
DATABASE_PORTRedis6379redis服务端口
DATABASE_PASSWORDRedisnullredis服务密码
POWPoWon开启/关闭PoW功能(如果不是暂时关闭,为什么要使用这个项目呢?)
NONCE_VALIDITYPoW60000指定nonce生成后必须提交到服务器的最长秒数(用于强制难度变化和过滤过时的nonce)
DIFFICULTYPoW13问题难度,生成的哈希中前导0位的数量(0:极易 ~ 256:不可能,13(默认)需要浏览器大约5秒计算)
RATE_LIMIT速率限制on开启/关闭速率限制功能
RATE_LIMIT_SAMPLE_MINUTES速率限制60指定会话/IP的统计数据重置前的分钟数
RATE_LIMIT_SESSION_THRESHOLD速率限制100单个会话可以发出的请求数量,超过后触发令牌撤销
RATE_LIMIT_BAN_IP速率限制on开启/关闭IP封禁功能
RATE_LIMIT_IP_THRESHOLD速率限制500单个会话可以发出的请求数量,超过后触发IP封禁
RATE_LIMIT_BAN_MINUTES速率限制15IP封禁持续的分钟数
WAFWAFon开启/关闭WAF功能
WAF_URL_EXCLUDE_RULESWAF扫描请求URL时排除的规则,使用','分隔规则编号,使用'-'指定范围(例如:1,2-4,5,7-10)
WAF_HEADER_EXCLUDE_RULESWAF14,33,80,96,100扫描请求头时排除的规则,使用','分隔规则编号,使用'-'指定范围(例如:1,2-4,5,7-10)
WAF_BODY_EXCLUDE_RULESWAF扫描请求体时排除的规则,使用','分隔规则编号,使用'-'指定范围(例如:1,2-4,5,7-10)
SSLSSLoff开启/关闭SSL功能
SSL_CERT_PATHSSLtests/ssl/mock-cert.pemSSL证书路径
SSL_KEY_PATHSSLtests/ssl/mock-key.pemSSL密钥路径
SOCKETSocketoff开启/关闭socket功能
SOCKET_URLSocketPoW Phalanx控制器的位置,接受IP和URL(接受protocol://url:port或protocol://ip:port)
SOCKET_TOKENSocketPoW Phalanx控制器的订阅令牌

使用方法

Nodejs

先决条件

  • Docker ^19.0.0
  • Nodejs ^14.0.0
# 克隆仓库 git clone https://github.com/RuiSiang/PoW-Shield.git # 安装依赖 npm install # 配置设置 cp -n .env.example .env # 编辑 .env nano .env # 转译 npm run build ############################################# # 使用数据库(redis)运行,推荐且更快 # # 先安装redis # # sudo apt-get install redis-server # ############################################# npm start ############################################# ############################################# # 不使用数据库运行(模拟redis) # ############################################# npm run start:standalone # linux npm run start:standalone-win # windows ############################################# # 测试功能(可选) npm test

Docker (仓库)

#################################################### # 使用数据库(redis)的Docker运行,推荐且更快 # #################################################### docker run -p 3000:3000 -e BACKEND_URL="http://example.com" -d ruisiang/pow-shield #################################################### #################################################### # 不使用数据库的Docker运行(模拟redis) # #################################################### docker run -p 3000:3000 -e BACKEND_URL="http://example.com" -e NODE_ENV="standalone" -d ruisiang/pow-shield #################################################### #################################################### # Docker Compose # #################################################### # 复制docker-compose.example.yaml cp -n docker-compose.example.yaml docker-compose.yaml # 编辑docker-compose.yaml nano docker-compose.yaml # 启动容器 docker-compose -f docker-compose.yaml up ####################################################

压力测试

注意:这只适用于非容器化版本的PoW Shield,运行测试时您的系统可能会出现不稳定。

# 开始压力测试 npm run stress # 如果您在.env中更改了PORT变量,您还应该在压力测试脚本中更改目标变量 nano scripts/stress.sh

以下测试在i7-10870H CPU的单线程上进行,每个并发参数的测试时间为60秒。

大量GET请求

并发连接数平均延迟错误率每秒请求数
6415.3ms0.00004188
12830.2ms0.00004229
25660.4ms0.00004235
512122.6ms0.01424166
1024261.7ms0.17663894
20481966.5ms0.49791027
40964685ms0.7179838

Nonce洪水攻击

并发连接数平均延迟错误率每秒请求数
6415.6msN/A4094
12831.5msN/A4058
25661.5msN/A4159
512129.5msN/A3945
1024264.4msN/A3858
2048592.1msN/A3407
40961212.6msN/A3322

从上面的样本中,我们可以看到PoW Shield的适当最大负载估计约为512个并发连接。之后,错误率和延迟会

编辑推荐精选

Keevx

Keevx

AI数字人视频创作平台

Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。

即梦AI

即梦AI

一站式AI创作平台

提供 AI 驱动的图片、视频生成及数字人等功能,助力创意创作

扣子-AI办公

扣子-AI办公

AI办公助手,复杂任务高效处理

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

下拉加载更多