WAF 规则
此工具用于快速编写、编译 WAF 规则。
1、编码
name: test
req-method() eq "GET" =>
waf-mark-risk(msg: "test new waf rule")
注意这个代码的结尾应该有个 ;
,现在没有,预期编译时应该会报错。
2、编译
- 编译失败
- 编译成功
修改代码加上 ;
,重新编译
3. 下载
- 下载编译产出文件
4、运行
- 在程序中引用此规则
location /t {
content_by_lua_block {
local orwaf = require "orwaf".new()
local res, err = orwaf:add_rule_set("my-waf-rule", "test")
if not res then
ngx.say("err: ", err)
return
end
local names = {
"my-waf-rule"
}
local matches, err = orwaf:run(names)
if not matches then
ngx.say("error: ", err)
else
ngx.say("ok: matches = ", require("cjson.safe").encode(matches))
end
}
}
-
add_rule_set(rule_set_name, rule_set_module_name)
rule_set_name
: 给规则集定义一个名称,在后面将通过名称来选择要执行的规则集。rule_set_module_name
: 前面编译产出的 lua 模块名称。
-
orwaf:run(rule_set_names)
rule_set_names
: 自定义的规则集名称,或者是内置规则集的名称。
内置规则集名称如下:
- scanner_detection
- protocol_enforcement
- protocol_attack
- attack_lfi
- attack_rfi
- attack_rce
- attack_php
- attack_nodejs
- attack_xss
- attack_sqli
- attack_session_fixation
- attack_java