jxwaf (锦衣盾) 是一款基于 openresty (nginx+lua) 开发的下一代 web 应用防火墙,独创的业务逻辑防护引擎和机器学习引擎可以有效对业务安全风险进行防护,解决传统 WAF 无法对业务安全进行防护的痛点。内置的语义分析引擎配合机器学习引擎可以避免传统 WAF 规则叠加太多导致速度变慢的问题,同时增强检测精准性(低误报、低漏报)。
Feature 功能
基础攻击防护
- SQL 注入攻击
- XSS 攻击
- 目录遍历漏洞
- 命令注入攻击
- WebShell 上传防护
- 扫描器攻击等...
机器学习
- 支持向量机 (SVM)
语义分析
- SQL 注入语义分析
- XSS 攻击语义分析
业务逻辑漏洞防护
- 短信炸弹防护
- 越权漏洞防护
- 短信验证码校验绕过防护等...
高级 CC 攻击防护
- 可针对不同 URL,不同请求参数单独设置不同防护变量
- 人机识别
Cookie 安全防护
前端参数加密防护
- 支持 AES 加解密
- 支持 DES 加解密
- 支持 RSA 加解密
透明部署动态口令功能
- 可对后台管理系统和网站用户提供动态口令 (OTP) 功能
检测缓存功能
- 对已经过 WAF 检测请求进行 MD5 缓存,提高检测效率
支持协议
- HTTP/HTTPS
性能 & 可靠性
- 毫秒级响应,请求处理时间小于一毫秒
- 支持主备部署,避免单点故障
- 支持集群反向代理模式部署,可处理超大数据流量
- 支持嵌入式部署,无需改变原有网络拓扑结构
- 支持云模式部署
管理功能
- 基础配置
- 规则配置
- 报表展示
- 告警配置
Architecture 架构
jxwaf (锦衣盾) 由 jxwaf 与 jxwaf 管理中心组成:
- jxwaf : 基于 openresty (nginx+lua) 开发
- jxwaf 管理中心:http://www.jxwaf.com
Environment 环境
jxwaf
- Centos 7
- Openresty 1.11.2.4
Install 安装 (已包含 openresty 安装包)
将代码下载到 /tmp 目录,运行 install_waf.sh 文件,jxwaf 将安装在 /opt/jxwaf 目录,具体如下:
- $ cd /tmp
- $ git clone https://github.com/jx-sec/jxwaf.git
- $ cd jxwaf
- $ sh install_waf.sh
- $ 运行后显示如下信息即安装成功:nginx: the configuration file /opt/jxwaf/nginx/conf/nginx.conf syntax is oknginx: configuration file /opt/jxwaf/nginx/conf/nginx.conf test is successful
- 访问 http://www.jxwaf.com 并注册账号,在 WAF 规则管理 -> 查看官方规则组 页面按照自身需求加载规则,之后在WAF 规则配置 ->WAF 全局配置 页面获取 “WAF_API_KEY”
- 修改 /opt/jxwaf/nginx/conf/jxwaf/jxwafconfig.json中的”waf_api_key” 为你自己账号的”WAF_API_KEY”
- $ /opt/jxwaf/nginx/sbin/nginx启动 openresty,openresty 会在启动或者 reload 的时候自动到 jxwaf 管理中心拉取用户配置的最新规则
Usage 使用
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#start
resolver 114.114.114.114;
init_by_lua_file /opt/jxwaf/lualib/resty/jxwaf/init.lua;
init_worker_by_lua_file /opt/jxwaf/lualib/resty/jxwaf/init_worker.lua;
rewrite_by_lua_file /opt/jxwaf/lualib/resty/jxwaf/rewrite.lua;
access_by_lua_file /opt/jxwaf/lualib/resty/jxwaf/access.lua;
header_filter_by_lua_file /opt/jxwaf/lualib/resty/jxwaf/header_filter.lua;
log_by_lua_file /opt/jxwaf/lualib/resty/jxwaf/log.lua;
lua_code_cache on;
#end
upstream http://1.1.1.1 {
server 1.1.1.1;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://1.1.1.1;
}
}
}
Rule Local load 规则本地加载
- $ curl "http://update.jxwaf.com/waf/update_global_rule" -d'api_key=3d96848e-bab2-40b7-8c0b-abac3b613585' >/opt/jxwaf/nginx/conf/jxwaf/jxwaf_local_config.json
- $ curl "http://update.jxwaf.com/waf/update_rule" -d'api_key=3d96848e-bab2-40b7-8c0b-abac3b613585' >/opt/jxwaf/nginx/conf/jxwaf/jxwaf_local_base_config.json
- $ 修改 /opt/jxwaf/nginx/conf/jxwaf/jxwaf_config.json中的”waf_local” 为”true”
- /opt/jxwaf/nginx/sbin/nginx -s reload
注意:api_key 需修改为你自己账号的”WAF_API_KEY”
参考文档:
项目地址
https://github.com/jx-sec/jxwaf