Prakticky každý návod k Suricate končí inštaláciou Elasticsearchu, Logstashu a Kibany. Pre jeden VPS je to zlá rada: táto zostava si vypýta štyri gigabajty pamäte a stály dohľad, pričom vy ste chceli len vidieť, čo IDS za deň zachytila. Suricata výborne funguje aj bez nich — má však zvláštnosť, kvôli ktorej si ju ľudia nainštalujú a o týždeň zase odstránia.

Mína v predvolenom nastavení

Z krabice Suricata zapisuje do eve.json vyše tridsať typov udalostí: nielen výstrahy, ale každý DNS dotaz, každý TLS handshake, každú HTTP transakciu, ARP, DHCP, tok za tokom. K tomu zvláštny stats.log každých osem sekúnd. Rotáciu logov Suricata pritom nenastavuje vôbec — to je úloha správcu, o ktorej sa nikde nepíše veľkými písmenami.

Číslo zo skutočného servera: 15 gigabajtov za dva dni — deväť v eve.json a takmer šesť v stats.log. Do plného disku zostávalo asi päť dní. Prevádzky na serveri bolo pritom málo; na zaťaženom uzle by šlo o hodiny.

Overte si to u seba hneď:

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

Ponechajte len to, čo čítate

Ak sledujete výstrahy a nerobíte sieťovú forenznú analýzu, potrebujete z eve-log presne jeden typ udalostí. V /etc/suricata/suricata.yaml nájdite blok outputs a v types pri eve-log ponechajte alert, ostatné zakomentujte. Tamtiež vypnite výstup štatistík:

  - stats:
      enabled: no

Po úprave povinná kontrola konfigurácie, ešte pred reštartom služby:

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

Na poradí záleží: test neprejde, ak ešte nie sú stiahnuté pravidlá. Najprv suricata-update, potom kontrola konfigurácie, potom spustenie.

Rotácia, ktorá naozaj funguje

Súbor /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
}

Dva riadky tu nie sú zrejmé a oba sú kritické.

su suricata suricata — bez neho logrotate mlčky preskočí všetky súbory. Adresár /var/log/suricata patrí skupine suricata, nie rootovi, a logrotate takú konfiguráciu považuje za nebezpečnú. Chyba nepríde poštou ani do logu; jednoducho budete presvedčení, že rotácia funguje, kým nedôjde miesto. Jediný spôsob, ako to zachytiť vopred, je beh naprázdno:

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

create 0664 suricata suricata — práva k novému súboru. S predvolenými právami (0640) uvidí každý panel alebo skript čítajúci logy bez roota po prvej rotácii len prázdno.

Čo nastaviť okrem logov

HOME_NET. Je to opis toho, čo Suricata považuje za „svoje“. Predvolená hodnota vymenúva všetky privátne rozsahy, kým VPS má verejnú adresu — výsledkom je, že časť pravidiel sa nespustí alebo sa spustí naopak. Uveďte svoju sieť výslovne.

Pravidlá. Sada Emerging Threats Open sa sťahuje príkazom suricata-update, ktorý sa dáva do cronu raz denne. Jednotlivé hlučné signatúry sa vypínajú v /etc/suricata/disable.conf podľa identifikátora — nebojte sa to využívať: sada je určená pre firemné siete a desiatka pravidiel sa bude na bežnom webovom serveri spúšťať neustále a bez príčiny.

Režim. V predvolenom stave Suricata počúva kópiu prevádzky a len varuje (IDS). Režim blokovania (IPS, cez nfqueue) je na jedinom serveri rizikom predovšetkým pre vás samých: jeden falošný poplach a zatvoríte si prístup sami. Začnite pozorovaním a mesiac sledujte, čo sa chytá.

Ako čítať bez Kibany

Krátke výstrahy ležia v /var/log/suricata/fast.log — jeden riadok na udalosť, čitateľné okom:

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

Podrobnosti sú v eve.json, po jednom objekte JSON na riadok. Všetko, kvôli čomu sa obvykle inštaluje Kibana, sa robí jedným príkazom:

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

To je dvadsať najčastejších signatúr. Taký zoznam za týždeň poctivo odpovedá na otázku, čo sa so serverom vlastne deje, a zároveň ukazuje, ktoré pravidlá je čas vypnúť.

Prečo toto, keď už je Fail2ban

Majú inú povahu. Fail2ban číta logy aplikácií a reaguje na neúspešné prihlásenia — teda na to, čo už doputovalo k službe. Suricata sleduje samotnú prevádzku a vidí to, čo v logoch nebude: skenovanie portov, pokusy o zneužitie podľa známych signatúr, spojenia s riadiacimi servermi zvnútra vášho stroja. Posledné menované je obzvlášť cenné: odchádzajúce spojenie k cudziemu C2 je najskorší príznak toho, že niečo na serveri už beží bez vášho vedomia.

Držať oba nástroje je normálne, nekolidujú spolu. Otázkou je len to, aby ich výstup niekto čítal častejšie než raz za štvrťrok. Ako tie isté výstrahy vyzerajú na jednej stránke s rozdelením podľa kategórií a zdrojov, ukazuje ukážka nižšie.