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