Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

OpenResty WAF

基于 OpenResty + Lua 的轻量级 Web 应用防火墙,附带 Flask 管理后台。

功能

  • 攻击检测 — 7 类规则覆盖 SQL 注入、XSS、命令注入、路径穿越、恶意扫描器、通用攻击特征、认证绕过
  • CC 防护 — IP 频率限制,窗口内超阈值自动拦截(429)
  • Redis 实时配置 — 规则/白名单/开关秒级生效,无需重载 Nginx
  • Flask 管理后台 — 仪表盘、规则 CRUD、白名单管理、攻击日志
  • 态势感知大屏 — 攻击趋势图、类型分布、来源 IP TOP10、地域分布、实时攻击流
  • 美观拦截页 — 攻击拦截时展示攻击类型、时间、IP 等详细信息

架构

浏览器 ──▶ Nginx:80 ──▶ waf.lua ──▶ 后端服务
              │              │
              │        ┌─────┴─────┐
              │        ▼           ▼
              │     Redis ◀── Flask Admin:5000
              │        │           │
              │        └─────┬─────┘
              │              ▼
              │          SQLite
              │
              └── 攻击返回 403/429 拦截页面

快速开始

环境要求

  • CentOS Stream 9 / Rocky Linux / RHEL 9(推荐)
  • OpenResty(Nginx + LuaJIT)
  • Redis
  • Python 3.9+

部署

# 1. 安装依赖
yum install -y openresty redis python3 python3-pip

# 2. 启动 Redis
systemctl enable --now redis

# 3. 部署 WAF 核心
cp lua/waf.lua /usr/local/openresty/nginx/lua/
cp nginx.conf.example /usr/local/openresty/nginx/conf/nginx.conf

# 4. 修改 nginx.conf 中的上游后端地址
# proxy_pass http://你的后端IP:端口;

# 5. 启动 Nginx
openresty -s reload

# 6. 部署管理后台
pip3 install -r requirements.txt
cd admin
FLASK_APP=app.py python3 -m flask run --host=127.0.0.1 --port=5000

一键部署

chmod +x deploy-waf.sh
./deploy-waf.sh

脚本会引导你输入后端地址、管理员密码,自动完成全部部署。

项目结构

├── lua/
│   └── waf.lua                 # WAF 核心,8 段模块化
├── admin/
│   ├── app.py                  # Flask 路由 & API
│   ├── models.py               # SQLite + Redis 操作
│   ├── templates/
│   │   ├── base.html           # 侧边栏公共布局
│   │   ├── login.html          # 登录页
│   │   ├── dashboard.html      # 仪表盘
│   │   ├── rules.html          # 规则管理
│   │   ├── whitelist.html      # 白名单
│   │   ├── logs.html           # 攻击日志
│   │   └── screen.html         # 态势感知大屏
│   └── static/
│       └── style.css           # 深色安全主题
├── nginx.conf.example          # Nginx 配置模板
├── deploy-waf.sh              # 一键部署脚本
├── requirements.txt            # Python 依赖
└── README.md

WAF 规则示例

-- SQL 注入
{ name = "sql_union_select", target = "args", pattern = [[union\s+select]],   desc = "SQL联合查询" },
{ name = "sql_or_digit",     target = "args", pattern = [[\sor\s+\d+\s*=\s*\d+]], desc = "SQL永真数字" },

-- XSS
{ name = "xss_script_tag", target = "args", pattern = [[<script[>\s]],     desc = "XSS script标签" },
{ name = "xss_onevent",    target = "args", pattern = [[on\w+\s*=\s*]],    desc = "XSS事件注入" },

-- 命令注入
{ name = "cmd_cat_etc",   target = "args", pattern = [[cat\s+/etc/]],      desc = "读取系统文件" },

-- 扫描器
{ name = "scanner_sqlmap",  target = "ua", pattern = [[sqlmap]],    desc = "sqlmap扫描器" },

规则通过 Flask 后台或 Redis 实时生效,无需重载 Nginx。

配置说明

Redis Key 说明 取值
waf:enabled WAF 开关 "1" / "0"
waf:mode 拦截模式 "block" / "log"
waf:rules 规则列表 JSON 数组
waf:whitelist 白名单 JSON 数组
waf:cc_enabled CC 防护开关 "1" / "0"
waf:cc_threshold CC 阈值 数字字符串
waf:cc_window CC 窗口(秒) 数字字符串
waf:attack_logs 攻击日志队列 Redis List

授权

MIT License

About

轻量级 OpenResty + Lua Web 应用防火墙 | SQL 注入 / XSS / 命令注入 / CC 防护 / 态势感知大屏 | 附带 Flask 可视化后台

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages