Skip to content

PFinal-tool/YuyuanWaf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

御渊WAF (YuyuanWaf)

Version License OpenResty Lua PRs Welcome

简体中文English文档变更日志

企业级Web应用防火墙,专注于高性能、易部署、可定制

Image

快速开始文档贡献指南路线图


📖 项目简介

御渊WAF 是一个基于 Lua 和 Nginx (OpenResty) 的高性能 Web 应用防火墙,专注于防爬虫、IP地理位置过滤和常见Web攻击防护。

为什么选择御渊WAF?

高性能 - 基于OpenResty,QPS可达5000+
易部署 - 5分钟快速部署,无需额外依赖
可定制 - 灵活的规则引擎,支持自定义规则
轻量级 - 单worker进程内存占用<200MB
开源免费 - MIT许可证,商业友好

✨ 核心特性

🛡️ 全面防护

  • SQL注入防护 - 多层次检测,支持多种数据库语法
  • XSS防护 - 反射型、存储型、DOM型全覆盖
  • 命令注入防护 - Shell命令和代码注入检测
  • 文件包含防护 - LFI/RFI检测和防护
  • 路径遍历防护 - 防止目录遍历攻击
  • 敏感文件访问控制 - 保护配置文件和备份文件

🤖 强大的反爬虫

  • 多维度检测
    • User-Agent 识别 (10000+爬虫规则)
    • 行为分析 (请求频率、路径模式)
    • HTTP指纹识别
    • 蜜罐陷阱
  • 智能防护策略
    • JS挑战
    • 验证码验证
    • 阶梯式封禁
    • 合法爬虫白名单 (Google, Bing等)

🌍 IP地理位置过滤

  • 国家级和城市级精确过滤
  • 支持黑白名单模式
  • CIDR范围过滤
  • IPv4/IPv6全支持
  • 高性能缓存 (命中率>95%)
  • 基于 MaxMind GeoLite2

⚡ 频率限制和CC防护

  • 多维度限流
    • 单IP限流
    • URI限流
    • 全局限流
  • 灵活的算法
    • 令牌桶算法
    • 滑动窗口算法
    • 漏桶算法
  • CC攻击防护
    • 实时流量分析
    • 自动封禁
    • 动态阈值调整

🚀 高性能设计

  • 单机 QPS > 100,000
  • 平均延迟 < 1ms (缓存命中)
  • CPU占用 < 10%
  • 多层缓存 - shared_dict + Redis
  • 异步处理 - 日志和统计异步化

� 安全说明

重要提示: 本项目进行了全面的安全加固。敏感信息(密码、API令牌等)应该通过环境变量传入,而不是存储在配置文件中。

安全特性

  • ✅ 敏感信息通过环境变量管理(Redis密码、API令牌等)
  • ✅ 配置文件模板与实际配置分离(.example模式)
  • ✅ 自动检测并拒绝硬编码的敏感信息
  • ✅ Git自动忽略敏感文件和配置
  • ✅ IP代理头验证防止IP欺骗
  • ✅ 完整的部署安全指南

相关文档

�🚀 快速开始

系统要求

  • OpenResty >= 1.19.3.1
  • LuaJIT >= 2.1
  • 操作系统: Linux / macOS / FreeBSD

安装

  1. 安装 OpenResty
# macOS
brew install openresty/brew/openresty

# Ubuntu/Debian
wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"
sudo apt-get update
sudo apt-get install -y openresty
  1. 安装依赖
sudo luarocks install lua-cjson
sudo luarocks install lua-resty-redis
sudo luarocks install lua-resty-maxminddb  # GeoIP支持
  1. 下载御渊WAF
cd /usr/local
git clone https://github.com/yourusername/YuyuanWaf.git
cd YuyuanWaf
  1. 配置WAF
# 修改配置文件中的路径
vi conf/waf.conf
vi lua/config.lua
  1. 配置Nginx

在Nginx配置中添加:

# nginx.conf
http {
    # 包含WAF配置
    include /usr/local/YuyuanWaf/conf/waf.conf;
    
    server {
        listen 80;
        server_name example.com;
        
        # 启用WAF
        access_by_lua_block {
            waf.run()
        }
        
        location / {
            proxy_pass http://backend;
        }
    }
}
  1. 启动Nginx
# 测试配置
sudo /usr/local/openresty/nginx/sbin/nginx -t

# 启动
sudo /usr/local/openresty/nginx/sbin/nginx

详细安装说明请查看 INSTALL.md

📝 配置示例

基础配置

-- lua/config.lua

-- WAF运行模式
mode = "protection",  -- off | detection | protection

-- IP过滤
ip_filter = {
    enabled = true,
    blacklist_file = "rules/ip_blacklist.txt",
},

-- GeoIP过滤
geoip = {
    enabled = true,
    blacklist_countries = {"KP", "IR"},  -- 屏蔽国家
},

-- 防爬虫
anti_crawler = {
    enabled = true,
    score_threshold = 70,
    action = "challenge",  -- log | challenge | captcha | block
},

-- 频率限制
rate_limit = {
    enabled = true,
    per_ip = {
        rate = 10,   -- 每秒10次
        burst = 20,  -- 突发20次
    },
},

-- 攻击防护
attack_defense = {
    enabled = true,
    sql_injection = {enabled = true},
    xss = {enabled = true},
    command_injection = {enabled = true},
},

IP黑白名单

# rules/ip_blacklist.txt
192.168.1.100
10.0.0.0/8

# rules/ip_whitelist.txt
127.0.0.1
192.168.1.0/24

国家黑名单

# rules/country_blacklist.txt
KP  # 朝鲜
IR  # 伊朗
SY  # 叙利亚

🎯 使用场景

场景1:防止爬虫采集数据

anti_crawler = {
    enabled = true,
    score_threshold = 70,
    action = "challenge",
    
    ua_check = {enabled = true},
    behavior_analysis = {
        enabled = true,
        request_threshold = 100,  -- 每分钟100次
    },
    js_challenge = {enabled = true},
}

场景2:屏蔽特定国家/地区

geoip = {
    enabled = true,
    blacklist_countries = {"KP", "IR", "SY"},
    
    -- 或使用白名单模式(仅允许特定国家访问)
    whitelist_mode = false,
    whitelist_countries = {"CN", "US", "JP"},
}

场景3:防止CC攻击

rate_limit = {
    enabled = true,
    per_ip = {
        rate = 10,
        burst = 20,
    },
},

cc_defense = {
    enabled = true,
    threshold = 10000,  -- QPS阈值
    action = "challenge",
    auto_ban = {
        enabled = true,
        duration = 3600,  -- 封禁1小时
    },
}

场景4:防止SQL注入和XSS

attack_defense = {
    enabled = true,
    sql_injection = {
        enabled = true,
        check_args = true,
        check_post = true,
    },
    xss = {
        enabled = true,
        check_args = true,
        check_post = true,
    },
}

📊 性能指标

基于实际测试数据:

指标 数值
单机QPS > 100,000
平均延迟 (缓存命中) < 1ms
平均延迟 (缓存未命中) < 5ms
CPU占用 < 10%
内存占用 < 200MB
缓存命中率 > 95%

🗺️ 开发路线图

查看 ROADMAP.md 了解详细的开发计划。

Phase 1: 基础框架 ✅

  • WAF核心引擎
  • 配置管理系统
  • IP黑白名单
  • 基础日志系统

Phase 2: 防护功能 ✅

  • SQL注入防护
  • XSS防护
  • 命令注入防护
  • 文件包含防护
  • 规则引擎

Phase 3: 反爬虫 ✅

  • UA检测
  • 行为分析
  • 频率限制
  • JS挑战/验证码
  • 指纹识别

Phase 4: GeoIP过滤 ✅

  • GeoIP数据库集成
  • 国家黑白名单
  • IP段过滤
  • 缓存优化

📚 文档

🤝 参与贡献

我们欢迎所有形式的贡献!

如何贡献

  1. 报告问题 - 使用Issue模板报告bug或提出功能建议
  2. 提交代码 - 阅读贡献指南了解详细流程
  3. 改进文档 - 帮助我们完善文档
  4. 分享经验 - 在社区讨论中分享你的使用经验

贡献流程

# 1. Fork 本仓库
# 2. 创建特性分支
git checkout -b feature/AmazingFeature

# 3. 提交更改
git commit -m 'feat: add some amazing feature'

# 4. 推送到分支
git push origin feature/AmazingFeature

# 5. 开启 Pull Request

详见 贡献指南

🌟 Star History

Star History Chart

👥 社区

加入讨论

贡献者

感谢所有贡献者!

Image

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件

商业友好

  • ✅ 商业使用
  • ✅ 修改源码
  • ✅ 分发
  • ✅ 私有使用

🙏 致谢

开源项目

灵感来源

感谢以下项目的启发:

  • ModSecurity
  • NAXSI
  • lua-resty-waf

贡献者

感谢所有为本项目做出贡献的开发者!

📊 项目状态

开发活跃度

GitHub commit activity GitHub last commit GitHub contributors

问题和PR

GitHub issues GitHub pull requests

💬 联系方式

⭐ Star History

如果这个项目对你有帮助,请给一个 ⭐️


Made with ❤️ by YuyuanWaf Team

御渊WAF - 保护您的Web应用安全 🛡️

About

No description, website, or topics provided.

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors