Project Icon

PoW-Shield

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

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

PoW Shield

描述

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个并发连接。之后,错误率和延迟会

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号