WAF
这页解决什么问题
WAF 用来在 fknock 的统一网关里检查 HTTP 请求,并根据规则记录或阻断可疑请求。
它适合这些场景:
- 已经把服务接到 fknock 网关,但还想再加一层 Web 攻击载荷检测
- 想观察哪些请求命中了规则、命中了哪些规则
- 想对 SQL 注入、XSS、RCE、路径探测等常见攻击特征做额外防护
需要先明确它的定位:
WAF 是认证和入口收敛之后的补充防护,不是 TOTP、Passkey、外部账号登录、网关可见性或白名单的替代品。
fknock 的第一层安全边界仍然是:
- 统一入口
- 登录认证
- 会话管理
- IP 授权
- 网关可见性
WAF 更适合在请求已经进入网关后,再判断这次 HTTP 请求是否像攻击。
开启入口
路径:
系统设置 → WAF
WAF 默认关闭。
开启时,系统会先尝试:
- 刷新系统规则清单
- 同步系统规则到本地
- 按当前防护强度加载规则到 Go 网关
开启成功后,左侧导航会出现:
WAF日志
如果关闭 WAF:
- Go 网关会立即跳过 WAF 检查
- 已经持久化的历史 WAF 日志仍然可以继续查看
防护强度怎么选
当前防护强度分为 4 档:
| 等级 | 页面名称 | 建议 |
|---|---|---|
1 | 日常防护 | 推荐默认值 |
2 | 加强防护 | 更敏感,适合观察后收紧 |
3 | 严格防护 | 误拦截可能增加 |
4 | 最高防护 | 仅建议排查时短暂使用 |
第一次开启时,建议先保持:
日常防护
等你确认业务服务没有误拦截,再考虑逐步提高等级。
系统规则
系统规则 是 fknock 官方维护并分发的规则包。
页面里会显示:
- 清单更新时间
- 本地同步时间
- 是否有更新
- 每个规则文件的名称、说明、大小和启用状态
你可以:
- 点击
更新规则 - 查看单个规则内容
- 下载单个规则文件
- 开启或关闭单条规则
- 批量开启或关闭所选规则
- 一键开启或关闭全部规则
需要注意:
- 开启 WAF 时至少要保留一个启用的规则文件
- 系统初始化规则会由系统内部保留,不作为普通规则文件展示
- 规则变更会在保存后同步加载到 Go 网关
自定义规则
如果你熟悉 ModSecurity / Coraza 规则,也可以上传自定义 .conf 文件。
自定义规则支持:
- 上传多个
.conf - 单独开启或关闭
- 查看内容
- 下载
- 删除
上传规则有几个限制:
- 只支持
.conf - 单个规则文件不能超过
1MB - 文件必须是有效 UTF-8 文本
- 不允许包含会直接操作文件系统的指令,例如
Include、SecAuditLog、SecDebugLog、SecDataDir、SecTmpDir、SecUploadDir
如果上传重名文件,系统会自动生成不冲突的文件名。
WAF 日志怎么看
路径:
WAF日志
这里展示的是 WAF 命中的事件,而不是普通请求日志。
常用字段包括:
| 字段 | 含义 |
|---|---|
Trace ID | 这次 WAF 事件的唯一追踪 ID |
动作 | 阻断、记录、放行等处理结果 |
模式 | 当前 WAF 运行模式 |
客户端 IP | 当前识别到的来源 IP |
方法 / Host / 路径 | 这次请求的核心上下文 |
路由类型 / 路由键 | 请求命中的 fknock 路由 |
规则 ID | 命中的 WAF 规则 |
规则详情 | 规则文件、行号、阶段、严重级别和消息 |
阻断信息 | 如果被阻断,展示对应规则和 HTTP 状态 |
页面支持:
- 按日期查看
- 搜索 Trace、Host、路径、IP
- 按页加载更早记录
- 打开单条详情
- 删除当天 WAF 日志
页面会自动刷新最近一段记录,便于你在排查时边访问边观察。
和请求日志的关系
请求日志 现在也会显示 WAF 相关信号。
在请求日志里,你可以:
- 用
全部WAF / 有 WAF / 无 WAF过滤 - 看到
WAF 阻断、WAF 记录、WAF 放行等标记 - 点击带有 Trace ID 的 WAF 标记,跳转到
WAF日志查看规则详情
可以这样分工:
请求日志:先确认这次请求是否进入网关、命中了哪个路由、返回什么状态WAF日志:再确认它是否命中 WAF、命中了哪些规则、为什么被记录或阻断
和事件中心的关系
如果 WAF 产生阻断事件,系统会写入:
事件中心
常见事件类型是:
WAF 阻断
通知规则里可以按 IP 聚合这类事件,适合发现某个来源持续触发 WAF。
如果你已经配置了通知提供商,可以把 WAF 阻断推送到:
- Webhook
- 企业微信
- 飞书
- 钉钉
- Telegram
- 其他通知渠道
完整通知配置见:
推荐的第一轮配置
建议这样开始:
- 进入
系统设置 → WAF - 开启 WAF
- 保持
日常防护 - 点击
更新规则,确认系统规则已经同步 - 访问几个常用业务页面
- 打开
请求日志,看是否出现 WAF 标记 - 打开
WAF日志,确认是否有误拦截 - 稳定后再决定是否提高防护强度
如果你的服务比较复杂,第一次不要直接开到最高防护。
误拦截时怎么处理
如果正常业务被 WAF 拦住,优先按这个顺序排查:
- 在请求日志里找到那次请求
- 点击 WAF Trace 跳到 WAF 日志
- 查看命中的规则 ID、规则文件和规则说明
- 临时降低防护强度,确认是否恢复
- 如果只是一条规则误伤,再谨慎关闭对应规则
- 记录 Trace ID、规则 ID、Host、路径和请求上下文,方便反馈问题
不要一上来就关闭全部规则。更好的做法通常是先定位具体规则。
它不保护哪些东西
WAF 只处理经过 fknock Go 网关的 HTTP 请求。
它不负责:
- 宿主机 SSH 登录
- MySQL / Redis / DNS 等非 Web 协议
- 没有经过 fknock 网关的原始端口流量
- 上游应用自身的账号权限
如果你要保护宿主机 SSH,看:
如果你要接入非 Web 协议,看:
常见排查思路
看不到左侧 WAF日志
通常是因为:
- WAF 还没有开启
进入:
系统设置 → WAF
开启后再查看左侧导航。
开启 WAF 失败
优先检查:
- 系统规则是否同步成功
- 至少是否有一个启用的规则文件
- 当前网络是否能访问系统规则清单和规则包
- Go 网关是否正常运行
WAF 日志为空
可能原因包括:
- 暂时没有命中任何规则
- 当前请求没有经过 fknock 网关
- WAF 已关闭
- 你看的不是当天日期
可以先在请求日志里确认请求是否进入网关,再回到 WAF 日志看是否有 Trace。
只想观察,不想误伤
当前页面主入口更偏向直接加载阻断模式规则。
如果你担心误伤,建议先:
- 保持
日常防护 - 观察请求日志和 WAF 日志
- 只在确认需要时逐步提高强度
