Використовуйте API запиту подій REST FortiSIEM. Надішліть XML-запит на /phoenix/rest/query/eventQuery, який поверне ідентифікатор запиту, далі опитуйте його прогрес до досягнення 100, а потім отримаєте події. Результати повертаються у форматі XML. Початкова строка журналу кожної події міститься в атрибуті rawEventMsg, тому кілька рядків на Python перетворюють результат на необроблені журнали. Експорти з екрана Analytics виходять у форматах, які LogTotal сьогодні не читає.
FortiSIEM є поширеним, де б Fortinet не керувала мережею, і часто містить набагато більше, ніж журнали міжмережевого екрану. 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?
Це мова, якою розмовляє API FortiSIEM. Крок Python перетворює його на початкові необроблені рядки, які зазвичай потрібно завантажити.
Чи можу я експортувати інциденти замість цього?
Інциденти мають свої власні виклики API. Для LogTotal експортуйте події, що за ними стоять.