部署教程
架构
- JXWAF 系统由三个子系统组成
- JXWAF 控制台
- JXWAF 节点
- JXLOG 日志系统
部署
环境要求
服务器系统 Debian 12.x
服务器最低配置 4 核 8G
jxwaf 控制台部署
部署过程
服务器 IP 地址
- 公网地址: 47.120.63.196
- 内网地址: 172.29.198.241
# 1. 安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 克隆仓库(国内可以换成 https://gitclone.com/github.com/jx-sec/jxwaf.git)
git clone https://github.com/jx-sec/jxwaf.git
# 3. 启动容器
cd jxwaf/jxwaf_admin_server
docker compose up -d
部署完成后,访问控制台地址 http://47.120.63.196, 第一次访问控制台会自动跳转到帐号注册页面。
完成注册并登录控制台后,点击 系统管理 -> 基础信息 页面,查看 waf_auth,后续节点配置需要
Docker Compose文件说明
# 定义Docker服务
services:
# MySQL数据库服务
mysql_db:
image: ccr.ccs.tencentyun.com/jxwaf/mysql:5.7 # MySQL 5.7镜像
restart: unless-stopped # 自动重启策略(除非手动停止)
environment:
MYSQL_ROOT_PASSWORD: 958fba75-56c6-4e81-a892-62517a9e1739 # 数据库密码(建议生产环境修改)
MYSQL_CHARSET: utf8mb4 # 设置默认字符集
MYSQL_COLLATION: utf8mb4_unicode_ci # 设置默认排序规则
TZ: Asia/Shanghai # 设置时区为上海
volumes:
- /opt/jxwaf_data/mysql:/var/lib/mysql # 持久化MySQL数据到宿主机目录
networks:
app_net:
ipv4_address: 172.20.0.2 # 分配固定IP地址
# JXWAF控制台服务
jxwaf_admin_server:
image: ccr.ccs.tencentyun.com/jxwaf/jxwaf_admin_server:v1.41 # WAF控制台镜像
restart: unless-stopped
environment:
ENABLE_HTTPS: false # 是否启用HTTPS(建议生产环境设为true)
MYSQL_HOST: 172.20.0.2 # MySQL服务地址
MYSQL_PORT: 3306 # MySQL服务端口
MYSQL_DATABASE: jxwaf_admin_server # 使用的数据库名称
MYSQL_USER: root # 数据库用户名
MYSQL_PASSWORD: 958fba75-56c6-4e81-a892-62517a9e1739 # 数据库密码
WAF_UPDATE_CONF_DATA: 1000m # WAF配置文件缓存配置
TZ: Asia/Shanghai # 时区设置
ports:
- "80:80" # 暴露HTTP端口
- "443:443" # 暴露HTTPS端口
volumes:
- ./ssl_certs/server.crt:/opt/jxwaf_admin_server/nginx/conf/server.crt # SSL证书
- ./ssl_certs/server.key:/opt/jxwaf_admin_server/nginx/conf/server.key # SSL私钥
networks:
app_net:
ipv4_address: 172.20.0.3 # 分配固定IP地址
# 定义网络配置
networks:
app_net:
driver: bridge # 使用桥接网络驱动
ipam:
config:
- subnet: 172.20.0.0/24 # 定义子网地址范围
默认提供本地MySQL数据库服务,如果要使用其他的数据库,可以只保留 JXWAF控制台服务 ,修改其中数据库相关的配置。
如果需要启用HTTPS,需将 ENABLE_HTTPS 设置为 true ,同时将 SSL证书 和 SSL私钥 复制到 ssl_certs 下面,分别命名为 server.crt 和 server.key
jxwaf 节点部署
部署过程
服务器 IP 地址
- 公网地址: 47.84.176.156
- 内网地址: 172.22.168.117
# 1. 安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 克隆仓库(国内可以换成 https://gitclone.com/github.com/jx-sec/jxwaf.git)
git clone https://github.com/jx-sec/jxwaf.git
# 3. 启动容器
cd jxwaf/jxwaf_node
vim docker-compose.yml
修改文件中的 JXWAF_SERVER 和 WAF_AUTH
JXWAF_SERVER 的值为 jxwaf 控制台服务器地址,这里为 http://47.120.63.196 ,注意地址不能带路径,即 http://47.120.63.196/ 是错误输入
其中 WAF_AUTH 为 系统管理 -> 基础信息 中 waf_auth 的值
修改后如下
docker compose up -d
启动后,可以在 运营中心 -> 节点状态 查看节点是否上线
Docker Compose文件说明
services:
jxwaf_base:
image: ccr.ccs.tencentyun.com/jxwaf/jxwaf_node:v1.25 # JXWAF节点镜像
network_mode: host # 使用宿主机网络模式(直接暴露端口)
privileged: true # 特权模式(需访问系统级资源)
ulimits:
nofile:
soft: 602400 # 文件描述符软限制(推荐值)
hard: 602400 # 文件描述符硬限制(推荐值)
environment:
HTTP_PORT: 80 # 监听HTTP流量端口
HTTPS_PORT: 443 # 监听HTTPS流量端口
WAF_CONF_DATA: 1000m # WAF配置文件缓存配置
JXWAF_INNER: 2000m # 内部缓存配置
JXWAF_PUBLIC: 2000m # 组件缓存配置
JXWAF_REQUEST_COUNT: 200m # 流量防护引擎缓存配置
JXWAF_REQUEST_IP: 200m # 流量防护引擎缓存配置
JXWAF_REQUEST_IP_COUNT: 200m # 流量防护引擎缓存配置
JXWAF_LIMIT_BOT: 200m # 流量防护引擎缓存配置
JXWAF_SERVER: you_jxwaf_server_url # WAF控制台服务器地址(需替换)
WAF_AUTH: you_auth_key # WAF控制台认证密钥(需替换)
TZ: Asia/Shanghai # 时区设置
restart: unless-stopped # 自动重启策略(除非手动停止)
volumes:
- /opt/jxwaf_data/nginx_cache:/opt/jxwaf_data/nginx_cache # 持久化Nginx缓存数据
jxlog 部署
部署过程
服务器 IP 地址
- 公网地址: 47.115.222.190
- 内网地址: 172.29.198.239
# 1. 安装Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 2. 克隆仓库(国内可以换成 https://gitclone.com/github.com/jx-sec/jxwaf.git)
git clone https://github.com/jx-sec/jxwaf.git
# 3. 启动容器
cd jxwaf/jxlog
docker compose up -d
部署完成后,在控制台中 系统配置 -> 日志传输配置 完成如下配置
在 控制台 系统配置 -> 日志查询配置 完成如下配置,其中 ClickHouse 数据库的帐号密码可以在 docker-compose.yml 文件中修改
Docker Compose文件说明
# 定义日志分析相关服务
services:
# ClickHouse 数据库服务
clickhouse:
image: "ccr.ccs.tencentyun.com/jxwaf/clickhouse-server:22.8.5-alpine" # 使用Alpine精简版镜像
ports:
- "9000:9000" # 客户端TCP协议端口
- "9004:9004" # 客户端MySQL协议兼容端口
environment:
CLICKHOUSE_DB: jxwaf # 初始创建数据库名称
CLICKHOUSE_USER: jxlog_user # 创建默认用户账号
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 # 启用访问控制管理
CLICKHOUSE_PASSWORD: jxlog_password # 用户账号密码(建议生产环境修改)
TZ: Asia/Shanghai # 时区设置
volumes:
- /opt/jxwaf_data/clickhouse:/var/lib/clickhouse # 持久化数据库文件
restart: unless-stopped # 自动重启策略
networks:
clickhouse_network:
ipv4_address: 172.10.0.10 # 固定IP地址分配
# 日志处理服务
jxlog:
container_name: jxlog # 指定容器名称
image: "ccr.ccs.tencentyun.com/jxwaf/jxcloud-jxlog:v1.6" # jxlog镜像
ports:
- "8877:8877" # 日志接收TCP端口
environment:
CLICKHOUSE: 172.10.0.10:9000 # ClickHouse服务地址
DATABASE: jxwaf # 目标数据库名称
USERNAME: jxlog_user # 数据库连接用户名
PASSWORD: jxlog_password # 数据库连接密码
TCPSERVER: 0.0.0.0 # 监听所有网络接口
TZ: Asia/Shanghai # 时区设置
depends_on:
- clickhouse # 依赖数据库服务
restart: unless-stopped
networks:
clickhouse_network:
ipv4_address: 172.10.0.11 # 固定IP地址分配
# 网络配置
networks:
clickhouse_network:
driver: bridge # 使用桥接网络模式
ipam:
config:
- subnet: 172.10.0.0/24 # 专用子网划分
效果验证
在控制台 防护管理 -> 网站防护 ,点击新建分组,参考如下配置进行设置
创建完成后,点击 查看网站 ,点击新建网站,参考如下配置进行设置
配置完成后,回到 jxlog 服务器,
root@iZf8z5lulvvv47480fig8gZ:~/jxwaf# pwd
/root/jxwaf
[root@VM-0-13-centos jxlog]# cd waf_test/
[root@VM-0-13-centos waf_test]# python3 waf_poc_test.py -u http://47.113.220.170
运行 waf 测试脚本后,即可在控制台中的 运营中心 -> Web安全报表 和 运营中心 -> Web安全报表 查看防护效果