Clark's Home page

Tecnicismi vari di un Sysadmin Linux ma anche qualcosa della sua vita

Suricata —

In questo periodo sto aggiornando i bastion host aziendali perché girano ancora su Debian 7.x e non vedo più aggiornamenti di sicurezza.
L’occasione è buona per passare anche loro a Devuan, gli IDS/IPS sono una parte fondamentale della sicurezza del sistema, io ho sempre usato SNORT come IDS ma su Devuan Jessie non è presente, quindi si usa l’alternativa che è suricata
Suricata lavora sia come IDS che come IPS che è poi la funzione che più mi interessa, in sostanza con 1 regola di firewall adeguata si passa tutto il traffico al vaglio di suricata che provvede a fare quanto serve va installato da backports per avere una versione più aggiornata.
Essendo le macchine dei bastion host la via più semplice per ottenere questo effetto e usare la chain di FORWARD aggiungendo allo script di firewall questa regola:
$IPT -I FORWARD -j NFQUEUE
in modo che sia il traffico in entrata che quello in uscita sia verificato, approfondendo un po di più il pacchetto entrante che matcha la regola viene inviato tramite nfnetlink a suricata,Suricata riceve il pacchetto e emette un verdetto a seconda del set di regole,Il pacchetto viene trasmesso o respinto dal kernel.
N.B. anzi nota MOLTO BENE, questa regola va inserita DOPO eventuali altre regole di forward, specie se ad esempio hai delle VPN.
Da ricordarsi di disabilitare in suricata.yaml (il file principale di configurazione)

unix-command:

enable no
# filename: /var/run/suricata-command.socket
Questo perché se no l’aggiornamento dei  rules che fa cron con il file suricata-oink-master si pianta inesorabilmente e chiude il demone di suricata.
Altra cosa che voglio fare è far girare suricata non come root (sì lo so, sono paranoico) quindi aggiungo con useradd -r -s /usr/sbin/nologin suri (-r utente di sistema -s scelta shell che gentilmente dice non puoi entrare)
aggiungo al file .yaml questa configurazione:
run-as:
user: suri
group: suri
giusto per essere sicuro del tutto aggiungo anche al file /etc/default/suricata la condizione:
RUN_AS_USER=suri
cambio permessi e proprietari alla directory /var/log/suricata
chown -R root:suri /var/log/suricata
chmod -R 775 /var/log/suricata
riavvio suricata e dopo diversi secondi, si la cosa non è immediata trovo:
perseo:/home/guardian# ps aux | grep suricata
suri 3198 8.7 5.5 433612 221244 ? Ssl 14:20 0:50 /usr/bin/suricata -c /etc/suricata/suricata.yaml –pidfile /var/run/suricata.pid -q 0 -D
root 6161 0.0 0.0 13236 2316 pts/0 S+ 14:30 0:00 grep suricata
Nel file /var/log/suricata/fast.log ci sono tutte le segnalazioni del traffico.

ADDENDUM:

tre giorni dopo spulciando i log per vedere se ci sono anomalie sulle macchien appena rifatte mi son trovato una cosa di questo tipo:

/etc/cron.daily/logrotate:
error: skipping "/var/log/suricata/fast.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") \
Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping "/var/log/suricata/stats.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") \
Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping "/var/log/suricata/suricata.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") \
Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping "/var/log/suricata/suricata-start.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") \
Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping "/var/log/suricata/eve.json" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") \
Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
run-parts: /etc/cron.daily/logrotate exited with return code 1

rapida ricerca in google e soluzione trovata, modificare il file /etc/logrotate.d/suricata aggiungendo la direttiva su all’inizio in questo modo:
/var/log/suricata/*.log
/var/log/suricata/*.json
{
su suri suri
rotate 14
missingok
compress
copytruncate
sharedscripts
postrotate
/bin/kill -HUP $(cat /var/run/suricata.pid)
endscript
}
con un logrotate –force /etc/logrotate.d/suricata in /var/log/suricata mi son trovato i file a posto.

ADDENDUM 1

Dato che i log nella directory /var/log/suricata richiedono un programam terzo per essere consultati e che non ho nessuna vogliadi mettere altra roba su dei bastions hosts ho rediretto il tutto in syslog abilitando in suricata.yalm

# a line based alerts log similar to fast.log into syslog
– syslog:
enabled: yes
# reported identity to syslog. If ommited the program name (usually
# suricata) will be used.
identity: “suricata”
facility: local5
#level: Info

e aggiungendo in /etc/rsyslog.d il file suricata.conf che contiene:

$template sysklogd, "<%PRI%>%syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"

Categorised as: IDS | Linux | Networking | Work

Comments are disabled on this post


Comments are closed.