Så godt som enhver vejledning om Suricata slutter med, at man installerer Elasticsearch, Logstash og Kibana. For en enkelt VPS er det et dårligt råd: den kombination vil have fire gigabyte hukommelse og konstant tilsyn, mens alt du ville, var at se, hvad IDS'en fangede i løbet af døgnet. Suricata fungerer udmærket uden dem — men den har en særhed, der gør, at mange installerer den og river den væk en uge senere.

Minen i standardindstillingerne

Direkte ud af kassen skriver Suricata godt tredive typer hændelser til eve.json: ikke kun advarsler, men hver DNS-forespørgsel, hvert TLS-håndtryk, hver HTTP-transaktion, ARP, DHCP, strøm efter strøm. Dertil en separat stats.log hvert ottende sekund. Logrotation sætter Suricata slet ikke op — det er administratorens opgave, og det står ingen steder med store bogstaver.

Et tal fra en virkelig server: 15 gigabyte på to døgn — ni i eve.json og næsten seks i stats.log. Til fuld disk var der omkring fem dage tilbage. Trafikken på serveren var samtidig moderat; på en belastet node ville det have drejet sig om timer.

Kontrollér hos dig selv med det samme:

sudo du -sh /var/log/suricata/*

Behold kun det, du læser

Kigger du på advarsler og ikke beskæftiger dig med netværksefterforskning, har du brug for præcis én hændelsestype fra eve-log. I /etc/suricata/suricata.yaml finder du blokken outputs og beholder alert under types for eve-log, resten udkommenteres. Slå statistikudskriften fra samme sted:

  - stats:
      enabled: no

Efter ændringen — obligatorisk konfigurationskontrol, før genstart af tjenesten:

sudo suricata -T -c /etc/suricata/suricata.yaml -v

Rækkefølgen betyder noget: testen går ikke igennem, hvis reglerne endnu ikke er hentet. Først suricata-update, så konfigurationskontrollen, så start.

Rotation der rent faktisk virker

Filen /etc/logrotate.d/suricata:

/var/log/suricata/*.log /var/log/suricata/*.json {
    daily
    rotate 7
    maxsize 200M
    missingok
    compress
    delaycompress
    create 0664 suricata suricata
    su suricata suricata
    postrotate
        systemctl kill -s HUP suricata
    endscript
}

To linjer her er ikke indlysende, og begge er afgørende.

su suricata suricata — uden den springer logrotate stille over alle filerne. Mappen /var/log/suricata tilhører gruppen suricata og ikke root, og logrotate anser den opsætning for usikker. Nogen fejlmeddelelse kommer hverken i posten eller i logfilen; du er ganske enkelt overbevist om, at rotationen findes, indtil disken løber tør. Eneste måde at fange det på forhånd er en tørkørsel:

sudo logrotate -d /etc/logrotate.d/suricata

create 0664 suricata suricata — rettighederne på den nye fil. Med standardrettighederne (0640) ser ethvert panel eller script, der læser logfilerne uden root, kun tomhed efter første rotation.

Hvad du skal indstille ud over logfilerne

HOME_NET. Det er beskrivelsen af, hvad Suricata anser for »sit«. Standardværdien opregner alle private adresseområder, mens en VPS har en offentlig adresse — følgen er, at nogle regler ikke udløses eller udløses omvendt. Angiv dit eget net udtrykkeligt.

Regler. Sættet Emerging Threats Open hentes med suricata-update, som lægges i cron én gang i døgnet. Enkelte støjende signaturer slås fra i /etc/suricata/disable.conf med deres id — vær ikke bange for at bruge det: sættet er lavet til virksomhedsnetværk, og et tital regler vil på en almindelig webserver udløses hele tiden uden grund.

Tilstand. Som standard lytter Suricata på en kopi af trafikken og advarer kun (IDS). Blokeringstilstanden (IPS, via nfqueue) på en enkelt server er først og fremmest en risiko for dig selv: ét falsk udslag, og du har lukket dig selv ude. Begynd med observation, og se en måned, hvad der fanges.

Hvordan du læser uden Kibana

Korte advarsler ligger i /var/log/suricata/fast.log — én linje per hændelse, læsbart for øjet:

sudo tail -50 /var/log/suricata/fast.log

Detaljerne ligger i eve.json, ét JSON-objekt per linje. Alt det, man normalt installerer Kibana for, gøres med én kommando:

sudo jq -r 'select(.event_type=="alert") | .alert.signature' \
    /var/log/suricata/eve.json | sort | uniq -c | sort -rn | head -20

Det er de tyve hyppigste signaturer. En sådan liste over en uge svarer ærligt på spørgsmålet om, hvad der egentlig sker med serveren, og viser samtidig, hvilke regler det er på tide at slå fra.

Hvorfor dette, når Fail2ban allerede findes

De er forskellige af natur. Fail2ban læser applikationslogfiler og reagerer på mislykkede logins — altså på det, der allerede er nået frem til en tjeneste. Suricata ser på selve trafikken og opdager det, der aldrig havner i logfilerne: portscanninger, forsøg på kendte udnyttelser, kontakt med styringsservere indefra din maskine. Det sidste er særligt værdifuldt: en udgående forbindelse til en fremmed C2 er det tidligste tegn på, at noget på serveren allerede kører uden din viden.

At have begge værktøjer er normalt, de kolliderer ikke. Spørgsmålet er blot, om nogen læser deres output oftere end én gang i kvartalet. Hvordan de samme advarsler ser ud på én side, fordelt på kategorier og kilder, viser demonstrationen nedenfor.