部署教程
架构
JXWAF 云 WAF 由以下组件组成:
| 组件 | 说明 |
|---|---|
| 管理控制台(jxwaf_admin_server) | 管理平台,提供子账号管理、全局防护、安全运营、系统配置等功能 |
| 节点(jxwaf_node) | 流量处理与实时攻击检测 |
| 用户控制台(jxwaf_user_console) | 业务部门自助管理平台,提供域名管理、防护配置、证书管理、CDN 功能等 |
| 日志服务(jxlog) | 日志采集与分析 |
┌──────────────┐ ┌──────────────┐
│ 管理控制台 │◄───►│ 用户控制台 │
└──────┬───────┘ └──────────────┘
│
│ 配置下发 / 日志上报
│
▼
┌──────────────┐ ┌──────────────┐
│ 节点 │────►│ 日志服务 │
└──────────────┘ └──────────────┘
环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Debian 12.x / Ubuntu 20.04+ |
| 最低配置 | 管理控制台 4 核 8G;每个节点 4 核 8G |
| 依赖 | Docker、Docker Compose |
一、管理控制台部署
1.1 系统部署
# 1. 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 克隆仓库(也可通过 wget 下载源码包:wget https://github.com/jx-sec/jxwaf/archive/refs/heads/master.zip)
git clone --depth=1 https://github.com/jx-sec/jxwaf.git
# 3. 进入管理控制台目录并启动
cd jxwaf/Cloud/jxwaf_admin_server/
docker compose up -d
部署完成后访问 http://<服务器IP>:8000,首次访问需注册主账号。
用户注册
管理控制台默认仅支持单用户注册,注册后自动关闭注册入口。生产环境建议注册账号时开启 OTP 认证。
注册并登录后,进入 系统管理 → 基础配置 查看主账号 waf_auth,后续配置用户控制台、节点时需要使用。
1.2 Docker Compose 配置说明
管理控制台部署包含三个容器:
| 容器 | 镜像 | 说明 |
|---|---|---|
mysql_db | ccr.ccs.tencentyun.com/jxwaf/mysql:8.0 | 业务数据库 |
jxwaf_admin_server | ccr.ccs.tencentyun.com/jxwaf/jxwaf_admin_server_cloud:6.2.1 | 管理控制台 |
ssl_cert_service | ccr.ccs.tencentyun.com/jxwaf/ssl_cert_service:6.2.1 | 泛域名证书自动签发/续期服务 |
1.3 核心环境变量
jxwaf_admin_server
| 环境变量 | 默认值 | 说明 |
|---|---|---|
ENABLE_HTTPS | false | 是否启用 HTTPS |
HTTP_PORT | 8000 | HTTP 监听端口 |
MYSQL_HOST / MYSQL_PORT / MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD | — | 数据库连接配置 |
OPEN_REGIST | false | 是否开放注册 |
ADMIN_API_ENABLE | false | 是否启用 Admin API(/admin_api/),用于节点、证书服务等调用 |
ADMIN_API_WHITELIST | agent.jxwaf.com | Admin API 调用方白名单(IP/域名,逗号分隔) |
USER_API_ENABLE | false | 是否启用 User API(/user/),用户控制台需要此功能,必须设为 "true"(出厂 compose 已默认开启) |
USER_API_WHITELIST | (空) | User API IP 白名单,空表示不限制 |
JXWAF_MODEL_SERVER_HOST | model.jxwaf.com | AI 语义分析模型服务地址 |
JXWAF_MODEL_SERVER_PORT | 39980 | AI 模型服务端口 |
JXWAF_MODEL_SERVER_SSL | true | AI 模型服务是否启用 SSL |
WAF_UPDATE_CONF_DATA_SIZE | 100m | WAF 配置更新缓存大小 |
CONF_DATA_SIZE | 100m | 会话数据缓存大小 |
MODEL_DATA_SIZE | 100m | AI 模型数据缓存大小 |
RESOLVER_IPS | 公共 DNS | DNS 解析器,空格分隔 |
RESOURCE_QUOTA_TEMPLATE | 内置 8 项 | 资源配额模板(JSON),可自定义配额项 |
USAGE_STAT_RETENTION_DAYS | 30 | 业务数据统计保留天数 |
TZ | Asia/Shanghai | 时区 |
ssl_cert_service
| 环境变量 | 默认值 | 说明 |
|---|---|---|
CONSOLE_API_URL | http://127.0.0.1:8000 | 管理控制台地址 |
POLL_INTERVAL | 60s | 任务轮询间隔 |
RENEWAL_CHECK_INTERVAL | 6h | 续期检查间隔 |
RENEWAL_DAYS | 30 | 到期前多少天触发续期 |
ACME_DIRECTORY_URL | https://acme-v02.api.letsencrypt.org/directory | ACME 目录 URL |
ACME_ACCOUNT_DIR | /data/acme_accounts | ACME 账户存储目录 |
ACME_EMAIL_DOMAIN | jxwaf.com | ACME 注册邮箱域名 |
ACME_ACCOUNT_MODE | shared | ACME 账户模式(shared 共享账户) |
ACME_SHARED_EMAIL | admin@jxwaf.com | 共享 ACME 账户邮箱 |
注意
- 生产环境务必设置强密码并启用 HTTPS
USER_API_ENABLE必须设为"true",否则用户控制台无法工作(出厂 compose 已默认开启)- 如需部门自助注册,需在管理控制台创建 网站接入配置,并将配置名提供给用户控制台部署方
1.4 日志收集服务部署
日志收集服务(jxlog)独立部署,用于安全运营中心(SOC)的报表与日志查询:
cd jxwaf/Cloud/jxlog/
docker compose up -d
部署完成后,在管理控制台 系统管理 → 日志传输配置 与 日志查询配置 中填写 jxlog 地址与连接信息。
1.5 系统升级
cd jxwaf/Cloud/jxwaf_admin_server/
git pull
docker compose down
docker compose up -d
1.6 卸载系统
cd jxwaf/Cloud/jxwaf_admin_server/
docker compose down
rm -rf /opt/jxwaf_data/mysql_cloud # 可选:删除数据库文件
二、节点部署
2.1 系统部署
节点提供流量处理与实时攻击检测等功能。在每台接入节点服务器上执行:
# 1. 安装 Docker(如已安装跳过)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 克隆仓库(也可通过 wget 下载源码包:wget https://github.com/jx-sec/jxwaf/archive/refs/heads/master.zip)
git clone --depth=1 https://github.com/jx-sec/jxwaf.git
# 3. 进入节点目录,修改配置后启动
cd jxwaf/Cloud/jxwaf_node/
vim docker-compose.yml
docker compose up -d
启动后在管理控制台 运营中心 → 节点状态 可查看节点是否上线。
2.2 Docker Compose 配置说明
节点部署包含两个容器:
| 容器 | 镜像 | 说明 |
|---|---|---|
jxwaf_base | ccr.ccs.tencentyun.com/jxwaf/jxwaf_node_cloud:6.2.1 | 流量节点 |
jxwaf_nft_node | ccr.ccs.tencentyun.com/jxwaf/jxwaf_nft_node:6.0 | 网络封禁节点 |
2.3 核心环境变量
流量节点(jxwaf_base)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
HTTP_PORT | 80 | HTTP 监听端口,多端口用逗号分隔,如 80,8080,8888 |
HTTPS_PORT | 443 | HTTPS 监听端口,多端口用逗号分隔,如 443,8443 |
JXWAF_SERVER | — | 管理控制台地址(必填) |
WAF_AUTH | — | 节点认证密钥,与管理控制台 waf_auth 一致(必填) |
JXWAF_INNER | 200m | 共享内存大小(限流计数、封禁缓存等) |
RESOLVER_IPS | 公共 DNS | DNS 解析器,空格分隔 |
CACHE_MAX_SIZE | 10g | 节点缓存磁盘上限 |
SSL_ATTACK_PROTECT | false | 是否启用 SSL 攻击防护 |
TZ | Asia/Shanghai | 时区 |
网络封禁节点(jxwaf_nft_node)
| 环境变量 | 默认值 | 说明 |
|---|---|---|
WAF_SERVER_URL | — | 管理控制台地址(必填) |
WAF_AUTH | — | 与流量节点一致(必填) |
SYNC_INTERVAL | 3 | 向管理控制台同步封禁规则的间隔(秒) |
网络层封禁
网络封禁节点需 privileged: true 特权模式。仅当需要使用「网络封禁」执行动作时才需要部署。
2.4 节点验证
节点内置防护自测工具,可验证节点防护是否生效:
cd jxwaf/Cloud/jxwaf_node/waf_test/
python3 waf_poc_test.py -u http://<节点IP> # 对目标站点发送 64 条攻击 POC 并统计拦截率
三、用户控制台部署
3.1 前置条件
- 已部署 管理控制台,并完成:
- 创建 网站接入配置(记录配置名,见 操作指南(管理控制台))
- 开启环境变量
USER_API_ENABLE=true
- 获取主账号
waf_auth(管理控制台 系统管理 → 基础配置 查看)
3.2 系统部署
# 1. 安装 Docker(如已安装跳过)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 克隆仓库(也可通过 wget 下载源码包:wget https://github.com/jx-sec/jxwaf/archive/refs/heads/master.zip)
git clone --depth=1 https://github.com/jx-sec/jxwaf.git
# 3. 进入用户控制台目录,修改配置后启动
cd jxwaf/Cloud/jxwaf_cloud_user/
vim docker-compose.yml
docker compose up -d
部署完成后访问 http://<服务器IP>,业务部门即可注册账号并登录使用。
3.3 环境变量
| 环境变量 | 必填 | 说明 |
|---|---|---|
CLOUD_API_URL | 是 | 管理控制台地址,如 http://<cloud_host>:8000 |
CLOUD_API_KEY | 是 | 主账号 waf_auth(第一层鉴权 Token) |
DEFAULT_WEBSITE_ACCESS_CONF | 是 | 默认接入配置名,注册子账号时自动绑定,需与管理控制台创建的配置名一致 |
HTTP_PORT | 否 | 监听端口,默认 80 |
MYSQL_HOST 等 | 否 | 可选:数据库连接 |
TZ | 否 | 时区,默认 Asia/Shanghai |
四、完整部署示例
单台服务器部署示例(最小规模):
服务器(4C8G+)
├── 管理控制台 :8000 (docker compose up -d)
├── 用户控制台 :80 (docker compose up -d)
├── 节点 :80/443 (docker compose up -d)
└── jxlog (SOC 报表/日志查询需要)
生产环境建议:管理控制台与节点分离部署;节点可多台水平扩展,由 DNS/负载均衡将业务流量分发到各节点。
混合云部署示例
管理控制台
├── 管理控制台 :8000 (集中管理)
├── 用户控制台 :80 (部门自助)
└── 日志服务 (日志存储)
云平台 A(阿里云)
└── 节点 1-N :80/443 (业务流量接入)
云平台 B(腾讯云)
└── 节点 1-N :80/443 (业务流量接入)
IDC 机房
└── 节点 1-N :80/443 (业务流量接入)
混合云部署要点:确保各节点能通过内网或公网访问管理控制台。
