使用 FortiSIEM 的 REST 事件查询 API。将 XML 查询发布到 /phoenix/rest/query/eventQuery,这将返回一个查询 ID,轮询进度直到达到 100,然后获取事件。结果以 XML 返回。每个事件的原始日志行在 rawEventMsg 属性中,因此几行 Python 将结果转换为原始日志。从分析屏幕导出的内容今天以 LogTotal 不读取的格式出现。
只要 Fortinet 管理网络,就会常见 FortiSIEM,它通常涵盖的不仅仅是防火墙日志。Prime Core 拥有 19,692 条针对 FortiSIEM 的检测规则,映射到 664 个 MITRE ATT&CK 技术。下面是如何获取事件、清理它们并在 LogTotal 中免费进行调查的方法。
在您开始之前
一个 API 用户。 使用有权运行分析查询的帐户。API 使用基本身份验证进行身份验证,组织在用户名中:在企业安装中为 super/<user>,在服务提供商安装中为特定组织的 <org>/<user>。
保留。 在线事件存储是有限的。旧的事件可能存放在归档存储中,需要额外的步骤。
属性名称。 FortiSIEM 查询使用其自己的属性名称,例如 reptDevName(报告设备)、reptDevIpAddr、eventType 和 phRecvTime。首先在 Analytics 中构建过滤器。
使用事件查询 API 导出
将查询保存为 query.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<Reports><Report><Name>LogTotal 导出</Name><Description/>
<SelectClause><AttrList>phRecvTime,reptDevIpAddr,eventType,rawEventMsg</AttrList></SelectClause>
<ReportInterval><Low>1792368000</Low><High>1792454400</High></ReportInterval>
<PatternClause><SubPattern id=”1″ name=”Filter”>
<SingleEvtConstr>reptDevName = “web-03″</SingleEvtConstr>
</SubPattern></PatternClause>
</Report></Reports>
时间间隔为 2026-10-19 00:00 UTC 到 2026-10-20 00:00 UTC 的纪元秒。然后运行它:
FSM=”https://fortisiem.example.com”
AUTH=”super/apiuser:$FSM_PASS”
QID=$(curl -sS -u “$AUTH” -X POST -H ‘Content-Type: text/xml’ –data @query.xml “$FSM/phoenix/rest/query/eventQuery”)
until [ “$(curl -sS -u “$AUTH” “$FSM/phoenix/rest/query/progress/$QID”)” = “100” ]; do sleep 5; done
curl -sS -u “$AUTH” “$FSM/phoenix/rest/query/events/$QID/0/1000” > fsm_web03_1019.xml
最后两个路径段是起始偏移量和计数。大结果用 1,000 步翻页。然后提取原始消息:
import xml.etree.ElementTree as ET
root = ET.parse(“fsm_web03_1019.xml”).getroot()
with open(“fsm_web03_1019.log”, “w”) as out:
for attr in root.iter(“attribute”):
if attr.get(“name”) == “rawEventMsg” and attr.text:
out.write(attr.text.strip() + “n”)
在 LogTotal 中上传、清理和审查
- 上传。 打开 logtotal.com 并上传文件。
- 清理。
- 审查。
这在真实数据上的样子。
当它出错时
| 症状 | 可能原因 | Fix |
|---|---|---|
| 401 | 用户名中缺少组织 | 使用 super/<user> 或 <org>/<user> |
| 查询返回错误而不是 ID | XML 语法或未知属性名称 | 在 Analytics 中测试过滤器;检查属性名称 |
| 进度始终未达到 100 | 查询范围太广 | 缩小时间范围和过滤器 |
| rawEventMsg 为空 | 没有选择属性 | 将 rawEventMsg 添加到 AttrList |
| 旧事件丢失 | 它们在归档存储中 | 检查归档选项 |
FAQ
为什么选择 XML?
这是 FortiSIEM API 的语言。Python 步骤将其转换为原始行,这通常是您要上传的内容。
我可以导出事件吗?
事件有自己的 API 调用。对于 LogTotal,请导出其背后的事件。