Prakticky každý návod k Suricatě končí instalací Elasticsearche, Logstashe a Kibany. Pro jeden VPS je to špatná rada: tahle sestava si řekne o čtyři gigabajty paměti a stálý dohled, přičemž vy jste chtěli jen vidět, co IDS za den zachytila. Suricata výborně funguje i bez nich — má však zvláštnost, kvůli které si ji lidé nainstalují a za týden zase odstraní.
Mina ve výchozím nastavení
Z krabice Suricata zapisuje do eve.json přes třicet typů událostí: nejen výstrahy, ale každý DNS dotaz, každé TLS handshake, každou HTTP transakci, ARP, DHCP, tok za tokem. K tomu zvláštní stats.log každých osm sekund. Rotaci logů Suricata přitom nenastavuje vůbec — to je úkol správce, o kterém se nikde nepíše velkými písmeny.
Číslo ze skutečného serveru: 15 gigabajtů za dva dny — devět v eve.json a téměř šest v stats.log. Do plného disku zbývalo asi pět dní. Provozu na serveru přitom bylo málo; na zatíženém uzlu by šlo o hodiny.
Ověřte si to u sebe hned:
sudo du -sh /var/log/suricata/*
Ponechte jen to, co čtete
Pokud sledujete výstrahy a neděláte síťovou forenzní analýzu, potřebujete z eve-log přesně jeden typ událostí. V /etc/suricata/suricata.yaml najděte blok outputs a v types u eve-log ponechte alert, ostatní zakomentujte. Tamtéž vypněte výstup statistik:
- stats:
enabled: no
Po úpravě povinná kontrola konfigurace, ještě před restartem služby:
sudo suricata -T -c /etc/suricata/suricata.yaml -v
Na pořadí záleží: test neprojde, pokud ještě nejsou stažena pravidla. Nejdřív suricata-update, potom kontrola konfigurace, potom spuštění.
Rotace, která skutečně funguje
Soubor /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 řádky zde nejsou zřejmé a oba jsou kritické.
su suricata suricata — bez něj logrotate mlčky přeskočí všechny soubory. Adresář /var/log/suricata patří skupině suricata, ne rootovi, a logrotate takovou konfiguraci považuje za nebezpečnou. Chyba nepřijde poštou ani do logu; prostě budete přesvědčeni, že rotace funguje, dokud nedojde místo. Jediný způsob, jak to zachytit předem, je běh naprázdno:
sudo logrotate -d /etc/logrotate.d/suricata
create 0664 suricata suricata — práva k novému souboru. S výchozími právy (0640) uvidí každý panel nebo skript čtoucí logy bez roota po první rotaci jen prázdno.
Co nastavit kromě logů
HOME_NET. Je to popis toho, co Suricata považuje za „své“. Výchozí hodnota vyjmenovává všechny privátní rozsahy, zatímco VPS má veřejnou adresu — výsledkem je, že část pravidel se nespustí nebo se spustí obráceně. Uveďte svou síť výslovně.
Pravidla. Sada Emerging Threats Open se stahuje příkazem suricata-update, který se dává do cronu jednou denně. Jednotlivé hlučné signatury se vypínají v /etc/suricata/disable.conf podle identifikátoru — nebojte se toho využívat: sada je určená pro firemní sítě a desítka pravidel se bude na běžném webovém serveru spouštět neustále a bez příčiny.
Režim. Ve výchozím stavu Suricata naslouchá kopii provozu a jen varuje (IDS). Režim blokování (IPS, přes nfqueue) je na jediném serveru rizikem především pro vás samotné: jeden falešný poplach a zavřete si přístup sami. Začněte pozorováním a měsíc sledujte, co se chytá.
Jak číst bez Kibany
Krátké výstrahy leží v /var/log/suricata/fast.log — jeden řádek na událost, čitelné okem:
sudo tail -50 /var/log/suricata/fast.log
Podrobnosti jsou v eve.json, po jednom objektu JSON na řádek. Všechno, kvůli čemu se obvykle instaluje Kibana, se dělá jedním příkazem:
sudo jq -r 'select(.event_type=="alert") | .alert.signature' \
/var/log/suricata/eve.json | sort | uniq -c | sort -rn | head -20
To je dvacet nejčastějších signatur. Takový seznam za týden poctivě odpovídá na otázku, co se se serverem vlastně děje, a zároveň ukazuje, která pravidla je čas vypnout.
Proč tohle, když už je Fail2ban
Mají jinou povahu. Fail2ban čte logy aplikací a reaguje na neúspěšná přihlášení — tedy na to, co už doputovalo ke službě. Suricata sleduje samotný provoz a vidí to, co v logách nebude: skenování portů, pokusy o zneužití podle známých signatur, spojení s řídicími servery zevnitř vašeho stroje. Poslední jmenované je obzvlášť cenné: odchozí spojení k cizímu C2 je nejranější příznak toho, že něco na serveru už běží bez vašeho vědomí.
Držet oba nástroje je normální, nekolidují spolu. Otázkou je jen to, aby jejich výstup někdo četl častěji než jednou za čtvrtletí. Jak tytéž výstrahy vypadají na jedné stránce s rozdělením podle kategorií a zdrojů, ukazuje ukázka níže.