lua-resty-waf安装与配置终极教程:从环境准备到规则部署
lua-resty-waf是基于OpenResty栈构建的高性能Web应用防火墙(WAF),它利用Nginx Lua API分析HTTP请求并通过灵活的规则结构提供保护。本教程将帮助新手用户快速完成从环境准备到规则部署的全过程,让你的Web应用轻松拥有企业级安全防护能力。## 📋 环境准备:搭建OpenResty运行环境### 1. 安装OpenRestylua-resty-waf需
lua-resty-waf安装与配置终极教程:从环境准备到规则部署
lua-resty-waf是基于OpenResty栈构建的高性能Web应用防火墙(WAF),它利用Nginx Lua API分析HTTP请求并通过灵活的规则结构提供保护。本教程将帮助新手用户快速完成从环境准备到规则部署的全过程,让你的Web应用轻松拥有企业级安全防护能力。
📋 环境准备:搭建OpenResty运行环境
1. 安装OpenResty
lua-resty-waf需要运行在OpenResty环境中,推荐使用官方预编译包或源码编译安装:
# Ubuntu/Debian系统
sudo apt-get install openresty
# CentOS/RHEL系统
sudo yum install openresty
提示:为获得最佳正则表达式性能,建议编译OpenResty时启用PCRE JIT支持:
./configure --with-pcre=/path/to/pcre/source --with-pcre-jit make && sudo make install
2. 安装依赖模块
lua-resty-waf已包含所有必要的第三方Lua模块,无需额外安装。但确保系统已安装以下依赖:
- Lua 5.1+
- OpenSSL 1.0.2+
- PCRE 8.32+(带JIT支持)
🚀 两种安装方式:源码编译 vs Luarocks
方式一:源码编译安装
- 克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/lu/lua-resty-waf
cd lua-resty-waf
- 编译并安装:
make && sudo make install
方式二:Luarocks安装(推荐)
通过Luarocks包管理器一键安装:
luarocks install lua-resty-waf
⚙️ 基础配置:Nginx集成与参数设置
1. 基本Nginx配置
在Nginx配置文件(通常位于/usr/local/openresty/nginx/conf/nginx.conf)中添加以下内容:
http {
# 定义共享内存区域,用于WAF存储
lua_shared_dict waf_storage 100m;
server {
listen 80;
server_name your_domain.com;
location / {
access_by_lua_block {
local waf = require "resty.waf"
local w = waf:new()
-- 基本配置
w:set_option("mode", "ACTIVE") -- 默认为SIMULATE模式
w:set_option("event_log", true)
w:set_option("event_log_buffer_size", 1024)
-- 运行WAF
w:exec()
}
proxy_pass http://your_backend_server;
}
}
}
2. 核心配置选项说明
| 配置选项 | 说明 | 推荐值 |
|---|---|---|
mode |
运行模式:SIMULATE(仅记录不拦截)或ACTIVE(拦截攻击) | ACTIVE |
event_log |
是否启用事件日志 | true |
event_log_buffer_size |
日志缓冲区大小(字节) | 1024 |
event_log_flush_interval |
日志刷新间隔(秒) | 60 |
🛡️ 规则部署:保护你的Web应用
1. 了解规则集结构
lua-resty-waf的规则文件位于项目的rules/目录下,主要包含:
11000_whitelist.json- 白名单规则20000_http_violation.json- HTTP协议违规规则41000_sqli.json- SQL注入防护规则42000_xss.json- XSS防护规则90000_custom.json- 自定义规则
2. 加载默认规则集
在Nginx配置中添加默认规则集:
access_by_lua_block {
local waf = require "resty.waf"
local w = waf:new()
-- 加载默认规则集
w:set_option("add_ruleset", "11000_whitelist")
w:set_option("add_ruleset", "20000_http_violation")
w:set_option("add_ruleset", "41000_sqli")
w:set_option("add_ruleset", "42000_xss")
w:exec()
}
3. 添加自定义规则
- 创建自定义规则文件
rules/90000_custom.json - 按JSON格式添加规则:
{
"rules": [
{
"id": 90001,
"phase": "access",
"operator": "regex",
"variable": "REQUEST_URI",
"value": "malicious_pattern",
"action": "deny"
}
]
}
- 在配置中加载自定义规则集:
w:set_option("add_ruleset", "90000_custom")
4. 规则翻译工具使用
lua-resty-waf提供ModSecurity规则翻译工具,可将现有ModSecurity规则转换为lua-resty-waf格式:
tools/modsec2lua-resty-waf.pl /path/to/modsecurity/rules.conf > rules/50000_converted.json
✅ 验证与测试
1. 检查配置是否正确
sudo nginx -t
2. 重启Nginx使配置生效
sudo systemctl restart openresty
# 或
sudo /usr/local/openresty/nginx/sbin/nginx -s reload
3. 测试WAF规则
使用curl发送测试请求验证WAF是否正常工作:
# 测试SQL注入防护
curl "http://your_domain.com/?id=1%27%20OR%201=1--"
# 测试XSS防护
curl "http://your_domain.com/?name=<script>alert(1)</script>"
查看Nginx错误日志确认拦截情况:
tail -f /usr/local/openresty/nginx/logs/error.log
📊 性能优化建议
- 规则优化:只加载必要的规则集,移除不使用的规则
- 共享内存:适当调整
lua_shared_dict大小(建议至少100m) - 日志配置:生产环境建议关闭调试日志,减少IO开销
- 定期更新:通过
git pull更新规则集,保持防护能力
📚 进阶资源
- 官方规则集:rules/
- 规则翻译工具:tools/modsec2lua-resty-waf.pl
- 测试用例:t/
通过本教程,你已掌握lua-resty-waf的安装配置和规则部署全过程。这款高性能WAF将为你的Web应用提供强大的安全防护,同时保持出色的性能表现。定期更新规则和监控日志是维持有效防护的关键,祝你的应用安全无忧!
更多推荐
所有评论(0)