跳到正文

WAF

WAF 检查经过 fn-knock 的 HTTP 请求,并按已启用规则记录或阻断可疑内容。它适合补充网关认证和应用安全,不能保护绕过网关的端口、TCP/UDP 流量或宿主机服务。

fn-knock 使用 Coraza 加载系统规则和自定义规则。全局开关、防护强度、规则启停和规则更新都会同步到 Go 网关。

请求分析 → WAF 日志 查看防护事件,与 分析 和请求 日志 页签切换。

开启前的检查

  1. 确认 真实客户端 IP 正确。经过 CDN 或上级反向代理时,如果网关看到的始终是代理节点地址,WAF 日志、黑名单和来源判断也会使用错误地址。
  2. 确认目标业务只能经由 fn-knock 访问。WAF 不会检查绕过网关直连上游端口的请求。
  3. 保留一个不依赖业务入口的管理方式,以便误拦截时调整规则。
  4. 记录健康检查、Webhook、上传接口和应用 API 的正常请求特征,开启后重点观察这些路径。

全局设置

系统设置 → WAF 中配置以下项目:

设置默认状态或范围生效方式
启用 WAF默认关闭开启时先检查并同步系统规则,再按当前强度加载到网关;关闭后立即跳过 WAF 检查
规则自动更新默认开启后端自动维护系统规则;更新失败后会在后续周期继续尝试
拦截响应显示拦截页 / 阻断连接返回带 Trace ID 的安全提示,或不返回页面并中止连接或当前请求流
常用地豁免默认关闭来自最近登录常用地区的请求跳过 WAF 检查
局域网豁免默认关闭来自私网、回环、链路本地和运营商级 NAT 地址的请求跳过 WAF 检查
防护强度1~4 级,默认 1 级修改后立即重新应用到网关

防护强度分为:

  • 1 级 · 日常防护:日常使用的推荐值;
  • 2 级 · 加强防护:匹配更敏感,需重点观察业务 API;
  • 3 级 · 严格防护:误拦截概率进一步增加;
  • 4 级 · 最高防护:主要用于短时排查,不建议未经验证长期使用。

高等级不是漏洞修复的替代品。它会启用更严格的检测范围,也更容易将合法请求识别为异常。

拦截响应

显示拦截页 便于正常访客反馈问题:响应中包含可用于全链路查询的 Trace ID,但也会明确表明请求被 fn-knock 拦截。阻断连接 不返回拦截页面;HTTP/1 请求会重置连接,HTTP/2 只中止当前请求流,浏览器或客户端通常只看到网络错误。

两种方式只改变阻断时的响应,不改变规则、检测记录或是否判定为攻击。启用阻断连接前,应确认监控、API 客户端和上级代理能够把连接中止与源站故障区分开;排查误拦截时从 WAF 日志复制 Trace ID 查询完整链路。

常用地豁免的边界

常用地来自近期登录位置。开启豁免后,匹配这些地区的请求会直接跳过 WAF,而不是只降低部分规则分值。移动网络、VPN、企业出口和 IP 地址库误差都可能扩大豁免范围,因此应同时限制上游端口并保留认证、黑名单和请求日志。

扫描器拦截也有独立的常用地豁免开关;修改 WAF 开关不会联动扫描器设置。

局域网豁免的边界

局域网豁免按网关识别到的客户端地址判断,命中后跳过全部 WAF 检查,而不是只降低规则分值。只有在私网、回环、链路本地和运营商级 NAT 网段确实属于可信边界时才开启。前置代理若把公网访客错误识别为私网地址,会让公网请求一并绕过 WAF;应先在请求日志核验真实客户端 IP。

该设置独立于登录流程的本地来源豁免、常用地豁免和单 Host WAF 开关。开启它不会公开业务 Host,但会移除这一来源范围内的 WAF 内容检查。

系统规则

系统规则区显示远端清单时间、本地同步时间和是否有更新,并支持:

  • 手动更新规则;
  • 单条开启、关闭、查看和下载;
  • 批量开启或关闭所选规则;
  • 开启全部或关闭全部;
  • 恢复为“仅开启推荐”。

开启全局 WAF 时会先尝试更新系统规则,并跳过项目预设的高频误报规则文件。手动开启全部规则可能重新引入大量误报,应先在可回退环境验证。

“仅开启推荐”会把系统规则恢复为程序建议的启用状态,不修改自定义规则,也不会自动打开全局 WAF。如果 WAF 已开启,规则变更会直接加载到网关;如果 WAF 已关闭,配置会保留并在下次开启时应用。

自定义规则

自定义规则区支持一次上传一个或多个 .conf 文件,并可对每个文件执行启停、预览、下载和删除。上传、启停或删除在 WAF 已开启时会立即重载网关规则。

自定义规则由管理员自行维护:

  1. 上传前检查规则语法、阶段、动作和规则 ID,避免与现有规则冲突。
  2. 先以记录或检测方式观察,再启用阻断动作。
  3. 保存原始 .conf 文件和修改记录。备份恢复不能替代规则的独立版本管理。
  4. 删除自定义规则后,网关不再加载该文件;删除前可先下载留档。

按 Host 跳过 WAF

业务 Host 在子域映射的高级设置中默认启用 WAF。需要隔离误拦截或兼容性问题时,可单独关闭某个 Host 的 WAF;该 Host 会跳过全局 WAF,其他 Host 继续受保护。

单 Host 开关不是独立的 WAF 实例:全局 WAF 关闭时,Host 开关不会产生防护。排障后应根据日志调整规则并恢复 Host 防护,避免把关闭 WAF 作为长期兼容方案。

FN Connect 流量接入 WAF

标准版飞牛 FPK 可在 系统设置 → fnOS → FN Connect 流量接入 WAF 中,把飞牛远程访问服务 FN Connect 发往本机 fnOS HTTP 端口的流量接入同一套 WAF。该开关只处理 FN Connect 服务进程经回环地址发出的 IPv4 / IPv6 请求,不会重定向其他本地进程或普通局域网直连流量;WAF 日志中的路由类型会标记为 FN Connect

启用接入不等于已经阻断攻击:全局 WAF 和对应规则也必须启用。状态区会区分已保护、仅检测、WAF 未启用或降级,并显示实际 fnOS 端口、入口状态及最近同步错误。系统约每 5 秒核对一次规则,并会跟随 fnOS HTTP 端口变化。

fnOS 已开启 强制 HTTPS 时,程序不接管其明文 FN Connect 链路;检测到该设置时不会启用重定向。若端口不可访问、规则写入失败或本地 WAF 入口异常,系统采用 fail-open:清理重定向并停止对应入口,优先避免 FN Connect 整体中断。此时应按状态错误修复环境,不能把“远程仍可访问”误认为 WAF 仍在生效。

防火墙执行会识别传统 iptables 与 iptables-nft / 原生 nftables 的规则后端,并只检查、更新或清理由 fn-knock 命名的链。它不会通过枚举并重写整张共享规则表来判断状态,也不会删除无关的第三方链;无法确定自有链状态时会报告错误并保留现状,等待后续对账。不要手工复用 FNK_FNC_* 链名。

该能力仅在官网标准版 FPK 中提供,需要宿主机网络权限;敲门 knock Lite、Docker、OpenWrt、普通 Linux、群晖和 Windows 均不显示。切换前保留飞牛桌面或局域网管理入口,并用 FN Connect 发起一条可识别请求,在请求日志和 WAF 日志中确认路由类型与规则动作。

查看 WAF 日志

WAF 日志 页面按日期读取已持久化事件。即使当前已关闭 WAF,历史事件仍可查看。页面支持:

  • 选择有日志的日期;
  • 搜索 Trace ID、Host、路径或 IP;
  • 按 Trace ID 查看同一请求链路;
  • 每页显示 20、50、100 或 200 条,并按游标翻页;
  • 选中一个或多个来源 IP,加入通用黑名单或从通用黑名单放出;
  • 删除所选日期的全部 WAF 事件。

删除某天日志后不能从管理页面恢复。需要留存审计证据时,应先导出或复制详情。

网关会先租约交付待写入的 WAF 事件,后端在一个 SQLite 事务中保存事件、日期索引和统计,全部成功后才确认删除队列中的副本。若持久化失败,租约会释放并在后续刷新时重试;重复交付同一 Trace ID 不会重复累加事件统计。因此短暂的磁盘忙或写入错误可能让日志延迟出现,但不应因一次失败直接丢失或重复计数。

从请求日志按 Trace ID 跳转到一条尚未落盘的 WAF 事件时,页面会每 5 秒自动重试,最多约 1 分钟。仍没有结果时,再检查请求是否实际进入 WAF、目标 Host 是否启用 WAF,以及服务端日志中的持久化错误。

日志详情字段

详情包含时间、Trace ID、事务 ID、动作、模式、HTTP 状态码、客户端 IP、远端地址、IP 归属、请求方法、协议、Host、路径、Query、完整请求地址、User-Agent、Referer、路由类型、路由键、上游目标、规则包、规则 ID、规则文件与行号、阻断信息和错误。

动作通常分为:

  • 记录:命中规则并写入事件,但未因此中断请求;
  • 阻断:规则中断请求,并记录规则 ID、动作和返回状态码;
  • 放行:事件进入 WAF 流程后继续通过。

同一事件可能命中多条规则。列表显示主要规则,详情会保留其余规则;排查时不要只依据第一条规则名。

误拦截排查

  1. 请求日志 中确认请求已到达网关,并记录时间、Host、路径、客户端 IP 和 Trace ID。
  2. 在 WAF 日志中搜索 Trace ID;没有结果时,再按 Host、路径或 IP 搜索。
  3. 查看动作、模式、阻断状态码、主要规则及规则文件位置。
  4. 预览对应规则文件,确认是系统规则还是自定义规则。
  5. 优先暂时关闭单条规则或降低防护强度,并复现请求;不建议直接关闭全局 WAF。
  6. 验证正常请求恢复、异常样例仍能被记录或阻断后,再固化调整。

WAF 日志没有事件时,还需检查请求是否被网关节流、通用黑名单、可见性、扫描器拦截或认证流程提前处理,以及目标 Host 是否关闭了 WAF。

不保护的范围

QQ群:1081609274