Usa l’API di query evento REST di FortiSIEM. Invia una query XML a /phoenix/rest/query/eventQuery, che restituisce un ID di query, controlla l’avanzamento finché non raggiunge 100, quindi recupera gli eventi. I risultati vengono restituiti come XML. La linea di log originale di ogni evento è nell’attributo rawEventMsg, quindi poche righe di Python trasformano il risultato in log grezzi. Le esportazioni dalla schermata Analytics escono in formati che LogTotal non legge oggi.
FortiSIEM è comune ovunque Fortinet gestisca la rete e spesso contiene molto più dei soli log del firewall. Prime Core ha 19.692 regole di rilevamento per FortiSIEM, mappate a 664 tecniche MITRE ATT&CK. Di seguito è indicato come ottenere eventi, sanificarli e indagarli gratuitamente in LogTotal.
Prima di iniziare
Un utente API. Usa un account con diritti di eseguire query analitiche. L’API si autentica con l’autenticazione di base, con l’organizzazione nel nome utente: super/<user> in un’installazione enterprise, <org>/<user> per un’organizzazione specifica in un’installazione per provider di servizi.
Conservazione. L’archiviazione degli eventi online è limitata. Gli eventi più vecchi possono risiedere in un archivio che necessita di passaggi aggiuntivi.
Nomi degli attributi. Le query di FortiSIEM usano i propri nomi di attributi, come reptDevName (dispositivo di segnalazione), reptDevIpAddr, eventType e phRecvTime. Costruisci il filtro in Analytics prima.
Esportare con l’API di query eventi
Salva la query come query.xml:
<?xml version=”1.0″ encoding=”UTF-8″?>
<Reports><Report><Name>Esportazione 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>
L’intervallo è in secondi epoch per 2026-10-19 00:00 UTC fino a 2026-10-20 00:00 UTC. Poi eseguilo:
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”)
finché [ “$(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
Gli ultimi due segmenti di percorso sono l’offset di inizio e il conteggio. Sfoglia i grandi risultati in passi di 1.000. Poi estrai i messaggi grezzi:
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”)
Carica, sanitizza e rivedi in LogTotal
- Carica. Apri logtotal.com e inserisci il file.
- Sanitizza.
- Rivedi.
Come appare sui dati reali.
Quando va storto
| Sintomo | Causa probabile | Fix |
|---|---|---|
| 401 | Organizzazione mancante dal nome utente | Usa super/<user> o <org>/<user> |
| La query restituisce un errore invece di un ID | Sintassi XML o un nome di attributo sconosciuto | Testa il filtro in Analytics; controlla i nomi degli attributi |
| L’avanzamento non raggiunge mai 100 | Query troppo ampia | Restringi l’intervallo di tempo e il filtro |
| rawEventMsg vuoto | L’attributo non è stato selezionato | Aggiungi rawEventMsg a AttrList |
| Eventi vecchi mancanti | Si trovano nell’archivio | Controlla le opzioni dell’archivio |
FAQ
Perché XML?
Questo è ciò che parla questa API FortiSIEM. Il passaggio in Python lo converte nelle linee grezze originali, che di solito è ciò che desideri caricare comunque.
Posso esportare invece gli incidenti?
Gli incidenti hanno le proprie chiamate API. Per LogTotal, esporta gli eventi dietro di loro.