Użyj API zapytań o zdarzenia REST FortiSIEM. Wyślij zapytanie XML do /phoenix/rest/query/eventQuery, co zwróci identyfikator zapytania, monitoruj postęp, aż osiągnie 100, a następnie pobierz zdarzenia. Wyniki wracają jako XML. Oryginalna linia logu każdego zdarzenia znajduje się w atrybucie rawEventMsg, więc kilka linii Pythona przekształca wynik w surowe logi. Eksporty z ekranu Analytics są w formatach, których LogTotal nie czyta dzisiaj.
FortiSIEM jest powszechny tam, gdzie Fortinet zarządza siecią i często zawiera o wiele więcej niż logi zapory. Prime Core posiada 19 692 reguły wykrywania dla FortiSIEM, odwzorowane na 664 technik MITRE ATT&CK. Poniżej przedstawiono, jak wyciągnąć zdarzenia, zabezpieczyć je i bezpłatnie zbadać w LogTotal.
Zanim zaczniesz
Użytkownik API. Użyj konta z uprawnieniami do uruchamiania zapytań analitycznych. API uwierzytelnia się za pomocą podstawowego uwierzytelniania, z organizacją w nazwie użytkownika: super/<użytkownik> w instalacji korporacyjnej, <org>/<użytkownik> dla konkretnej organizacji w instalacji dostawcy usług.
Zatrzymanie. Przechowywanie zdarzeń online jest ograniczone. Starsze zdarzenia mogą znajdować się w archiwalnym magazynie, który wymaga dodatkowych kroków.
Nazwy atrybutów. Zapytania FortiSIEM używają swoich własnych nazw atrybutów, takich jak reptDevName (urządzenie raportujące), reptDevIpAddr, eventType i phRecvTime. Zbuduj filtr najpierw w Analytics.
Eksport za pomocą API zapytań o zdarzenia
Zapisz zapytanie jako query.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<Reports><Report><Name>LogTotal export</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>
Przedział to sekundy epoki od 2026-10-19 00:00 UTC do 2026-10-20 00:00 UTC. Następnie uruchom:
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
Ostatnie dwa segmenty ścieżki to offset startowy i liczba. Przeglądaj duże wyniki w krokach po 1 000. Następnie wyciągnij surowe komunikaty:
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”)
Prześlij, wyczyść i sprawdź w LogTotal
- Prześlij. Otwórz logtotal.com i wrzuć plik.
- Wyczyść.
- Przejrzyj.
Jak to wygląda na rzeczywistych danych.
Gdy coś pójdzie źle
| Objaw | Prawdopodobna przyczyna | Fix |
|---|---|---|
| 401 | Organizacja brak w nazwie użytkownika | Użyj super/<user> lub <org>/<user> |
| Zapytanie zwraca błąd zamiast identyfikatora | Składnia XML lub nieznana nazwa atrybutu | Przetestuj filtr w Analytics; sprawdź nazwy atrybutów |
| Postęp nigdy nie osiąga 100 | Zapytanie zbyt szerokie | Zawęź zakres czasu i filtr |
| rawEventMsg pusty | Atrybut nie został wybrany | Dodaj rawEventMsg do AttrList |
| Brak starych zdarzeń | Znajdują się w archiwalnym magazynie | Sprawdź opcje archiwizacji |
FAQ
Dlaczego XML?
To jest język, którym mówi to API FortiSIEM. Krok w Pythonie przekształca go na oryginalne surowe linie, które zazwyczaj chcesz przesłać i tak.
Czy mogę eksportować zamiast tego incydenty?
Incydenty mają swoje własne wywołania API. Dla LogTotal, eksportuj zdarzenia za nimi.