用途:回答“这条防火墙策略到底有没有被命中”,属于分析(analyzer)平面。用 fortinet-mcp 服务器(NetClaw 编写,spec 080 / roadmap R3),命令为 $FORTINET_MCP_CMD,stdio 传输,JSON-RPC over /jsonrpc。需要 FORTIANALYZER_HOST 与 FORTIANALYZER_API_TOKEN,令牌认证要求 FortiAnalyzer 7.2.2+。模式为只读。
主要能力(4 个只读工具):faz_query_logs 按过滤条件在有界窗口内查询流量日志;faz_fetch_more 以新偏移量翻页;faz_policy_activity 检查指定策略在窗口内是否有命中;faz_list_devices 列出向本分析器转发日志的设备。
时间窗口与分页:不提供窗口时默认最近 24 小时,并在 scope.window_start / scope.window_end 与 notes 中说明;响应回显实际查询窗口,无法给出窗口即视为错误。faz_fetch_more 用新偏移量重跑搜索,不复用单次有效且会过期的 FortiAnalyzer 搜索任务 id(tid),以避免静默截断。
核心限制:“无日志匹配”不等于“规则未使用”。空结果返回明确结果 no_logs_in_window,绝不返回 ok,也不返回错误。可能原因包括:查询窗口内无匹配(保留期有限)、设备未向该分析器转发日志、规则本身未开启日志。绝不能把空窗口报告为 unused。
工作流:先用 faz_list_devices 确认规则所属设备确实向本分析器转发日志;再用 faz_policy_activity 指定策略与足够宽的窗口;ok 且 sessions_matched > 0 表示规则在用,不可删除;no_logs_in_window 仅表示该窗口无匹配。结论前需核实日志转发开启、保留期覆盖该时间段、规则自身日志开启。实际变更需走 fortimanager-ops(含两道写入门禁)。查询命中内容时用 faz_query_logs(如 policyid=12)并按 next_offset 翻页,可结合 fmg_resolve_object 核对源/目的是否符合策略意图。可与 fortimanager-ops、fortigate-ops、fwrule-analyzer、servicenow-change-workflow、gait-session-tracking 组合使用,查询自动经 GAIT 审计。