Skip to content

WAF

这页解决什么问题

WAF 用来在 fknock 的统一网关里检查 HTTP 请求,并根据规则记录或阻断可疑请求。

它适合这些场景:

  • 已经把服务接到 fknock 网关,但还想再加一层 Web 攻击载荷检测
  • 想观察哪些请求命中了规则、命中了哪些规则
  • 想对 SQL 注入、XSS、RCE、路径探测等常见攻击特征做额外防护

需要先明确它的定位:

WAF 是认证和入口收敛之后的补充防护,不是 TOTP、Passkey、外部账号登录、网关可见性或白名单的替代品。

fknock 的第一层安全边界仍然是:

  • 统一入口
  • 登录认证
  • 会话管理
  • IP 授权
  • 网关可见性

WAF 更适合在请求已经进入网关后,再判断这次 HTTP 请求是否像攻击。

开启入口

路径:

  • 系统设置 → WAF

WAF 默认关闭。

开启时,系统会先尝试:

  1. 刷新系统规则清单
  2. 同步系统规则到本地
  3. 按当前防护强度加载规则到 Go 网关

开启成功后,左侧导航会出现:

  • WAF日志

如果关闭 WAF:

  • Go 网关会立即跳过 WAF 检查
  • 已经持久化的历史 WAF 日志仍然可以继续查看

防护强度怎么选

当前防护强度分为 4 档:

等级页面名称建议
1日常防护推荐默认值
2加强防护更敏感,适合观察后收紧
3严格防护误拦截可能增加
4最高防护仅建议排查时短暂使用

第一次开启时,建议先保持:

  • 日常防护

等你确认业务服务没有误拦截,再考虑逐步提高等级。

系统规则

系统规则 是 fknock 官方维护并分发的规则包。

页面里会显示:

  • 清单更新时间
  • 本地同步时间
  • 是否有更新
  • 每个规则文件的名称、说明、大小和启用状态

你可以:

  • 点击 更新规则
  • 查看单个规则内容
  • 下载单个规则文件
  • 开启或关闭单条规则
  • 批量开启或关闭所选规则
  • 一键开启或关闭全部规则

需要注意:

  • 开启 WAF 时至少要保留一个启用的规则文件
  • 系统初始化规则会由系统内部保留,不作为普通规则文件展示
  • 规则变更会在保存后同步加载到 Go 网关

自定义规则

如果你熟悉 ModSecurity / Coraza 规则,也可以上传自定义 .conf 文件。

自定义规则支持:

  • 上传多个 .conf
  • 单独开启或关闭
  • 查看内容
  • 下载
  • 删除

上传规则有几个限制:

  • 只支持 .conf
  • 单个规则文件不能超过 1MB
  • 文件必须是有效 UTF-8 文本
  • 不允许包含会直接操作文件系统的指令,例如 IncludeSecAuditLogSecDebugLogSecDataDirSecTmpDirSecUploadDir

如果上传重名文件,系统会自动生成不冲突的文件名。

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
  • Email
  • 其他通知渠道

完整通知配置见:

推荐的第一轮配置

建议这样开始:

  1. 进入 系统设置 → WAF
  2. 开启 WAF
  3. 保持 日常防护
  4. 点击 更新规则,确认系统规则已经同步
  5. 访问几个常用业务页面
  6. 打开 请求日志,看是否出现 WAF 标记
  7. 打开 WAF日志,确认是否有误拦截
  8. 稳定后再决定是否提高防护强度

如果你的服务比较复杂,第一次不要直接开到最高防护。

误拦截时怎么处理

如果正常业务被 WAF 拦住,优先按这个顺序排查:

  1. 在请求日志里找到那次请求
  2. 点击 WAF Trace 跳到 WAF 日志
  3. 查看命中的规则 ID、规则文件和规则说明
  4. 临时降低防护强度,确认是否恢复
  5. 如果只是一条规则误伤,再谨慎关闭对应规则
  6. 记录 Trace ID、规则 ID、Host、路径和请求上下文,方便反馈问题

不要一上来就关闭全部规则。更好的做法通常是先定位具体规则。

它不保护哪些东西

WAF 只处理经过 fknock Go 网关的 HTTP 请求。

它不负责:

  • 宿主机 SSH 登录
  • MySQL / Redis / DNS 等非 Web 协议
  • 没有经过 fknock 网关的原始端口流量
  • 上游应用自身的账号权限

如果你要保护宿主机 SSH,看:

如果你要接入非 Web 协议,看:

常见排查思路

看不到左侧 WAF日志

通常是因为:

  • WAF 还没有开启

进入:

  • 系统设置 → WAF

开启后再查看左侧导航。

开启 WAF 失败

优先检查:

  1. 系统规则是否同步成功
  2. 至少是否有一个启用的规则文件
  3. 当前网络是否能访问系统规则清单和规则包
  4. Go 网关是否正常运行

WAF 日志为空

可能原因包括:

  • 暂时没有命中任何规则
  • 当前请求没有经过 fknock 网关
  • WAF 已关闭
  • 你看的不是当天日期

可以先在请求日志里确认请求是否进入网关,再回到 WAF 日志看是否有 Trace。

只想观察,不想误伤

当前页面主入口更偏向直接加载阻断模式规则。

如果你担心误伤,建议先:

  1. 保持 日常防护
  2. 观察请求日志和 WAF 日志
  3. 只在确认需要时逐步提高强度

相关阅读

QQ群:1081609274