配置字段说明

本页按 .env.example 的分组说明常用字段。复制示例文件后按需修改;留空的密钥类字段表示不启用对应能力。

表中的示例值只用于说明格式,不是推荐值。密码、密钥、加密盐和第三方凭据必须使用随机值,不能沿用默认值或示例值。

conf/runtime.env 由首次运行向导和“运行与升级”页面维护,优先级高于 .env。如果某个字段在向导完成后仍不生效,先检查 runtime.env 是否写入同名配置。

基础运行

变量 说明 示例值
DATABASE_URL 控制面数据库连接串。SQLite 使用文件路径;MySQL 使用 mysql+pymysql://用户:密码@主机:3306/库名 sqlite:///./data/waf.db
PORT 控制面服务监听端口。Docker 中容器内部固定为 8000,宿主机端口由安装脚本生成 8015
HOST 控制面监听地址 0.0.0.0
DEBUG_MODE 调试模式。生产环境保持 false,否则会放宽密钥强度校验 false
SYSTEM_VERSION 后端展示的系统版本号,由发布流程同步 0.15.8
VITE_SYSTEM_VERSION 前端构建时写入的版本号 0.15.8

登录与密钥

变量 说明 示例值
JWT_SECRET_KEY JWT 签名密钥。至少 32 位,且不能使用默认值 <至少32位随机字符串>
JWT_ALGORITHM JWT 算法 HS256
ACCESS_TOKEN_EXPIRE_MINUTES 访问令牌有效期(分钟) 30
REFRESH_TOKEN_EXPIRE_DAYS 刷新令牌有效期(天) 7
BOOTSTRAP_ADMIN_EMAIL 初始化管理员邮箱 admin@example.com
BOOTSTRAP_ADMIN_PASSWORD 初始化管理员密码。首次向导留空;非调试环境显式配置 change_me 直接拒启;完成向导后一次性引导密码会清空 空或独立随机密码
CORS_ORIGINS 允许跨域的前端来源,逗号分隔。生产环境不要使用 * http://localhost:5173
CONTROL_PLANE_TRUSTED_PROXIES 可信反向代理地址,用于解析真实客户端 IP 127.0.0.1,::1
CONTROL_PLANE_ALLOWED_HOSTS 控制面允许的 Host,留空表示不限制 空

品牌与访问验证页

变量 说明 示例值
BRAND_COMPANY_NAME 中间校验页显示的公司或产品名称 HAS-WAF
BRAND_LOGO_URL 校验页 Logo 地址,留空使用默认 空
BRAND_PRIMARY_COLOR 校验页主题色 #2563eb
CHALLENGE_PAGE_TITLE 校验页标题 正在验证访问安全
CHALLENGE_PAGE_DESCRIPTION 校验页说明文字 请稍候,验证通过后将自动继续。
CHALLENGE_CONTACT_TEXT 校验页联系信息,可留空 空

限流、任务与备份

变量 说明 示例值
RATE_LIMIT_DEFAULT 控制面默认限流,按业务流量调整 按业务调整
SCHEDULER_ENABLED 是否启用定时任务:日志采集、证书检查、报表和备份 true
LOG_BACKUP_ENABLED 是否启用每日日志 ZIP 冷备份 false
LOG_BACKUP_HOUR / LOG_BACKUP_MINUTE 每日备份执行时间,使用 TIMEZONE 2 / 0
LOG_BACKUP_RETENTION_DAYS ZIP 保留天数 90
LOG_BACKUP_DIR ZIP 输出目录 ./data/backups
CERT_RENEW_BEFORE_DAYS 证书提前续签天数 30
LOG_INGEST_INTERVAL_SECONDS 访问日志采集间隔(秒) 30

数据面路径

Docker 部署通常由 Compose 覆盖这些字段;本机部署可按实际安装路径修改。

变量 说明 示例值
OPENRESTY_NGINX_EXE OpenResty 的 nginx 可执行文件 Windows 安装路径
OPENRESTY_PREFIX OpenResty 安装根目录 Windows 安装目录
WAF_PROJECT_ROOT WAF 项目根目录 .
WAF_TRUSTED_PROXY_CIDRS 数据面可信前置代理,多个 IP/CIDR 逗号分隔;禁止 0.0.0.0/0 空
WAF_AUTO_TRUST_CONTAINER_GATEWAY Docker 中自动信任当前容器默认网关,避免所有访客被识别为网关 IP true
WAF_NGINX_CONF Nginx 主配置路径 ./conf/nginx.conf
WAF_CONFIG_JSON 策略配置文件路径 ./conf/waf_config.json
WAF_RULES_JSON 规则文件路径 ./conf/waf_rules.json
WAF_LOG_DIR 访问与拦截日志目录 ./logs
WAF_CERTS_DIR 证书目录 ./certs
WAF_UPSTREAM_CA_BUNDLE HTTPS 回源使用的 CA PEM 包,留空使用内置 CA 空
WAF_PUBLIC_CNAME_TARGET 对外 CNAME 目标,可选 空

数据面安全令牌

变量 说明 示例值
WAF_ANTI_REPLAY_SECRET 防重放签名密钥,至少 32 位,必须独立 <独立随机字符串>
WAF_CHALLENGE_SECRET 浏览器验证签名密钥,至少 32 位 <独立随机字符串>
WAF_CHALLENGE_PROOF_DIFFICULTY 工作量证明难度,按业务与客户端性能调整 按业务调整
WAF_CHALLENGE_COOKIE_PATH 验证通行 Cookie 作用域,建议收敛到业务根路径 /
WAF_STATIC_SITES_ROOT 静态站点资源根目录,Docker 中建议挂载持久化卷 ./static-sites

以上密钥必须使用互不相同的随机值,不要复用、留空或从示例复制。

内部字段

以下字段由安装脚本或首次向导生成,仅用于本机组件间通信,通常不需要手工修改:

变量 说明
WAF_ADMIN_TOKEN 内部管理接口鉴权令牌,随机生成,不要复用其他密钥
WAF_INTERNAL_TOKEN 控制面内部代理鉴权令牌,随机生成,不要复用其他密钥
NGINX_STATUS_URL OpenResty 状态页地址,仅本机访问;Docker 部署固定为 5233 端口

控制台地图

变量 说明
WAF_AMAP_KEY 高德地图 Web JS API Key;留空不显示地图
WAF_AMAP_SECURITY_JS_CODE 高德地图安全密钥
WAF_GEO_SERVER_LNG / WAF_GEO_SERVER_LAT 控制台飞线图起点经纬度

Redis

变量 说明 示例值
REDIS_HOST Redis 地址。单容器部署可填 host.docker.internal 或内网地址 127.0.0.1
REDIS_PORT Redis 端口 6379
REDIS_DB Redis 数据库编号 0
REDIS_PASSWORD Redis 密码。生产环境应启用密码;单容器部署连接外部 Redis 时必须填写 <强密码>

ClickHouse

变量 说明 示例值
CLICKHOUSE_HOST ClickHouse 地址 127.0.0.1
CLICKHOUSE_PORT ClickHouse HTTP 端口 8123
CLICKHOUSE_USER ClickHouse 用户。默认用户仅适合本地测试,生产建议独立账号 default
CLICKHOUSE_PASSWORD ClickHouse 密码。生产环境必须设置 <强密码>
CLICKHOUSE_DATABASE 日志数据库名 has_waf
CLICKHOUSE_LOG_RETENTION_DAYS 日志保留天数 30
CLICKHOUSE_CONNECT_TIMEOUT_SECONDS 建连超时(秒) 2
CLICKHOUSE_SEND_RECEIVE_TIMEOUT_SECONDS 请求超时(秒) 30
CLICKHOUSE_FAILURE_COOLDOWN_SECONDS 故障后的快速失败冷却时间(秒) 30
CLICKHOUSE_FALLBACK_QUEUE_FILE 降级队列文件;留空使用持久化配置目录下的默认文件 空
CLICKHOUSE_FALLBACK_STATUS_FILE 降级状态文件;留空使用默认路径 空
CLICKHOUSE_FALLBACK_FLUSH_BATCH_SIZE 每次冲刷批量条数 500
CLICKHOUSE_FALLBACK_FLUSH_LIMIT 每次冲刷上限 5000

选择 SQLite 日志存储时,使用 LOG_STORAGE_BACKEND=sqlite 和 SQLITE_LOG_DATABASE_PATH,不需要连接 ClickHouse。

时区与日报

变量 说明 示例值
TZ 系统时区 Asia/Shanghai
DAILY_REPORT_CRON 每日报表任务,分 时 日 月 周,使用 UTC 5 0 * * *
DAILY_REPORT_BACKFILL_DAYS 启动时补跑最近 N 天缺失日报,0 表示不补跑 7
DAILY_REPORT_TOP_LIMIT Top 榜单条数 20

控制面 HTTPS 与 OpenResty

变量 说明 示例值
CONTROL_PLANE_HTTPS_ENABLED 控制面是否启用 HTTPS false
WAF_PUBLIC_IP WAF 对外公网 IP,用于生成站点和证书信息 127.0.0.1
CONTROL_PLANE_OPENRESTY_ENABLED 是否允许控制面管理 OpenResty false

威胁情报与风险评分

变量 说明 示例值
ABUSEIPDB_API_KEY AbuseIPDB API Key;免费账号有限速 空
ABUSEIPDB_BASE_URL AbuseIPDB 接口地址 https://api.abuseipdb.com/api/v2
ABUSEIPDB_TIMEOUT_SECONDS 请求超时(秒) 3
ABUSEIPDB_CACHE_TTL_SECONDS 查询缓存时间(秒) 21600
ABUSEIPDB_JOB_INTERVAL_SECONDS 后台查询间隔(秒) 600
ABUSEIPDB_GLOBAL_MIN_INTERVAL_SECONDS 全局最小请求间隔(秒) 45
ABUSEIPDB_COOLDOWN_SECONDS 失败冷却时间(秒) 600
ABUSEIPDB_MAX_REQUESTS_PER_RUN 每轮最多请求数 2
ABUSEIPDB_SUSPICIOUS_WINDOW_MINUTES 可疑 IP 统计窗口(分钟) 60
ABUSEIPDB_SUSPICIOUS_LIMIT 每轮最多处理的候选 IP 数 500
ABUSEIPDB_MIN_BLOCKED_TO_QUERY 至少被拦截多少次后才查询,按业务调整 按业务调整
ABUSEIPDB_AUTO_BAN_SCORE 自动封禁的风险分阈值,按业务调整 按业务调整
ABUSEIPDB_AUTO_BAN_MIN_ATTACKS 自动封禁所需最少攻击次数,按业务调整 按业务调整
ABUSEIPDB_AUTO_BAN_TTL_SECONDS 自动封禁时长(秒) 86400

AI 规则建议

变量 说明 示例值
OPENAI_BASE_URL 兼容 OpenAI 的接口地址 https://api.openai.com
OPENAI_API_KEY 接口密钥;留空不调用 空
OPENAI_MODEL 模型名称 gpt-4o-mini
OPENAI_TIMEOUT_SECONDS 请求超时(秒) 120
OPENAI_MAX_ITEMS_PER_CALL 单次最多处理条数 50
THREAT_INTEL_AI_REVIEW_ENABLED 是否启用威胁情报 AI 复核 false
THREAT_INTEL_AI_REVIEW_INTERVAL_SECONDS 复核任务间隔(秒) 900
THREAT_INTEL_AI_REVIEW_BATCH_SIZE 每批复核条数 20
THREAT_INTEL_AI_REVIEW_MIN_CONFIDENCE 采纳建议的最低置信度,按业务调整 按业务调整
THREAT_INTEL_AI_REVIEW_BLOCK_TTL_SECONDS AI 建议封禁时长(秒) 86400

地理服务

变量 说明
APIHZ_GEO_ID / APIHZ_GEO_KEY / APIHZ_GEO_TD APIHZ 地理信息服务凭据
APIHZ_GEO_BASE_URL 地理服务接口地址

指纹与证书

变量 说明 示例值
JA4_SANDBOX_WEBHOOK_SECRET 沙箱回传 Webhook 校验密钥,留空不校验 空
ACME_DIRECTORY_URL ACME 服务目录 https://acme.litessl.com/v2
ACME_EAB_KID / ACME_EAB_HMAC_KEY ACME 外部账户凭据 空
ACME_ACCOUNT_ENC_KEY ACME 账户加密密钥,至少 32 位 <至少32位随机字符串>
ALIDNS_ACCESS_KEY_ID / ALIDNS_ACCESS_KEY_SECRET 阿里云 DNS API 凭据 空

HAS-WAF云

变量 说明 示例值
CLOUD_CONTROL_URL 云控服务地址 https://has-waf-cloud.haser.top
CLOUD_CONTROL_ENABLED 云控总开关 true
CLOUD_SYNC_INTERVAL_SECONDS 资源拉取基础间隔(秒) 300
CLOUD_PUSH_ENABLED 是否允许云端下行推送 false
CLOUD_RULES_ENABLED 是否接收规则同步 true
CLOUD_FINGERPRINTS_ENABLED 是否接收指纹同步 true
CLOUD_IP_INTEL_ENABLED 是否接收 IP 情报同步 true
CLOUD_SHARE_ATTACK_IP_ENABLED 是否共享本地攻击 IP 情报 false
CLOUD_SHARE_BROWSER_FINGERPRINT_ENABLED 是否共享浏览器指纹情报 false
CLOUD_AUTO_REGISTER 启动时是否自动注册节点 false
CLOUD_REPORT_INTERVAL_SECONDS 聚合报表上报间隔(秒) 900
CLOUD_REPORT_IP_SALT 本地 Top IP 脱敏密钥,必须替换为随机值 <独立随机字符串>
CLOUD_CREDENTIALS_ENC_SALT 本地节点凭证加密盐,生产环境必须替换为随机值 <独立随机字符串>
UPDATE_ALLOWED_IMAGE_PREFIX 允许的 WAF 镜像前缀 registry.haser.top

安装脚本生成的 Docker 字段

以下字段由 install.sh 写入,普通本机部署不需要手工填写:

变量 说明
HAS_WAF_IMAGE WAF 完整镜像地址,包含版本标签
HAS_WAF_REGISTRY WAF 镜像源域名
HAS_WAF_DEPLOYMENT full 或 standalone,更新脚本据此选择 Compose 文件
HAS_WAF_DATABASE sqlite 或 mysql
HAS_WAF_UI_PORT 控制台宿主机端口
HAS_WAF_HTTP_PORT WAF HTTP 宿主机端口
HAS_WAF_HTTPS_PORT WAF HTTPS 宿主机端口
HAS_WAF_SITE_PORT_START / HAS_WAF_SITE_PORT_END 站点端口范围
SETUP_ACCESS_TOKEN 首次设置向导使用的初始化令牌
REDIS_IMAGE / CLICKHOUSE_IMAGE / MYSQL_IMAGE 全量部署使用的中间件镜像
COMPOSE_PROFILES 全量部署选择 MySQL 时为 mysql
MYSQL_PASSWORD / MYSQL_ROOT_PASSWORD 全量部署 MySQL 的应用用户密码和 root 密码

修改后的生效方式

  • 修改 .env 或 runtime.env 后重启 WAF 容器或服务。
  • 首次向导会维护 runtime.env;同一字段在其中存在时以 runtime.env 为准。
  • 修改端口后同步调整防火墙和 Compose 映射;容器内部端口不要改。
  • 证书、密钥、数据库连接串和第三方 API Key 属于敏感信息,不要提交到版本库或写入公开日志。
文档随 v0.15.8 同步生成返回顶部 ↑