Σχεδόν κάθε οδηγός για τη Suricata τελειώνει με την εγκατάσταση των Elasticsearch, Logstash και Kibana. Για ένα μόνο VPS αυτή είναι κακή συμβουλή: η στοίβα θα ζητήσει τέσσερα γιγαμπάιτ μνήμης και συνεχή φροντίδα, ενώ το μόνο που θέλατε ήταν να δείτε τι έπιασε το IDS την τελευταία μέρα. Η Suricata δουλεύει μια χαρά χωρίς αυτά — αλλά έχει μια ιδιότητα που κάνει τον κόσμο να την εγκαθιστά και να την αφαιρεί μια εβδομάδα αργότερα.

Η νάρκη στις προεπιλεγμένες ρυθμίσεις

Έξω από το κουτί η Suricata γράφει στο eve.json πάνω από τριάντα τύπους συμβάντων: όχι μόνο ειδοποιήσεις αλλά κάθε ερώτημα DNS, κάθε χειραψία TLS, κάθε συναλλαγή HTTP, ARP, DHCP, ροή μετά τη ροή. Συν ένα ξεχωριστό stats.log κάθε οκτώ δευτερόλεπτα. Η Suricata δεν ρυθμίζει περιστροφή αρχείων ενώ τα κάνει αυτά — αυτή είναι δουλειά του διαχειριστή και πουθενά δεν γράφεται με μεγάλα γράμματα.

Ένας αριθμός από πραγματικό διακομιστή: 15 γιγαμπάιτ σε δύο μέρες — εννέα στο eve.json και σχεδόν έξι στο stats.log. Απέμεναν περίπου πέντε μέρες μέχρι να γεμίσει ο δίσκος. Ούτε η κίνηση σε εκείνον τον διακομιστή ήταν μεγάλη· σε πολυσύχναστο κόμβο θα ήταν ζήτημα ωρών.

Ελέγξτε τον δικό σας αμέσως τώρα:

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

Κρατήστε μόνο ό,τι διαβάζετε

Αν κοιτάτε ειδοποιήσεις αντί να κάνετε δικτυακή εγκληματολογία, χρειάζεται ακριβώς ένας τύπος συμβάντος από το eve-log. Στο /etc/suricata/suricata.yaml βρείτε το μπλοκ outputs και, κάτω από τα types του eve-log, αφήστε το alert και σχολιάστε τα υπόλοιπα. Απενεργοποιήστε την έξοδο στατιστικών στο ίδιο σημείο:

  - stats:
      enabled: no

Μετά την επεξεργασία, ο έλεγχος της ρύθμισης είναι υποχρεωτικός — πριν την επανεκκίνηση της υπηρεσίας:

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

Η σειρά έχει σημασία: ο έλεγχος δεν περνά αν οι κανόνες δεν έχουν φορτωθεί ακόμη. Πρώτα suricata-update, μετά ο έλεγχος της ρύθμισης, μετά η εκκίνηση.

Περιστροφή που πραγματικά δουλεύει

Το αρχείο /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
}

Δύο γραμμές εδώ δεν είναι προφανείς και είναι και οι δύο κρίσιμες.

su suricata suricata — χωρίς αυτό το logrotate παρακάμπτει αθόρυβα κάθε αρχείο. Ο κατάλογος /var/log/suricata ανήκει στην ομάδα suricata και όχι στον root, και το logrotate θεωρεί μια τέτοια διάταξη επισφαλή. Δεν θα υπάρξει σφάλμα ούτε στο ταχυδρομείο ούτε στο αρχείο καταγραφής· απλώς θα είστε βέβαιοι ότι η περιστροφή υπάρχει μέχρι να τελειώσει ο δίσκος. Ο μόνος τρόπος να το πιάσετε εκ των προτέρων είναι μια δοκιμαστική εκτέλεση:

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

create 0664 suricata suricata — τα δικαιώματα του νέου αρχείου. Με τις προεπιλογές (0640), οποιοσδήποτε πίνακας ή σενάριο διαβάζει τα αρχεία ως μη root χρήστης δεν θα δει τίποτα μετά την πρώτη κιόλας περιστροφή.

Τι να ρυθμίσετε πέρα από τα αρχεία καταγραφής

HOME_NET. Αυτό περιγράφει τι θεωρεί δικό της η Suricata. Η προεπιλεγμένη τιμή απαριθμεί όλα τα ιδιωτικά εύρη, ενώ ένα VPS έχει δημόσια διεύθυνση — έτσι ορισμένοι κανόνες δεν ενεργοποιούνται ή ενεργοποιούνται ανάποδα. Δηλώστε ρητά το δικό σας δίκτυο.

Κανόνες. Το σύνολο Emerging Threats Open το τραβά το suricata-update, που ανήκει στο cron μία φορά την ημέρα. Μεμονωμένες θορυβώδεις υπογραφές απενεργοποιούνται με αναγνωριστικό στο /etc/suricata/disable.conf — μη φοβηθείτε να το χρησιμοποιήσετε: το σύνολο προορίζεται για εταιρικό δίκτυο και σε έναν συνηθισμένο διακομιστή ιστού μια ντουζίνα κανόνες θα ενεργοποιούνται διαρκώς και χωρίς λόγο.

Λειτουργία. Από προεπιλογή η Suricata ακούει ένα αντίγραφο της κίνησης και μόνο προειδοποιεί (IDS). Η λειτουργία αποκλεισμού (IPS, μέσω nfqueue) σε έναν μόνο διακομιστή είναι κίνδυνος κυρίως για εσάς τους ίδιους: ένα ψευδώς θετικό και κλειδωθήκατε απέξω. Ξεκινήστε παρατηρώντας και περάστε έναν μήνα βλέποντας τι πιάνεται.

Πώς διαβάζεται χωρίς Kibana

Οι σύντομες ειδοποιήσεις ζουν στο /var/log/suricata/fast.log — μία γραμμή ανά συμβάν, αναγνώσιμη με το μάτι:

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

Η λεπτομέρεια είναι στο eve.json, ένα αντικείμενο JSON ανά γραμμή. Όλα όσα εγκαθίσταται συνήθως το Kibana καταλήγουν σε μία εντολή:

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

Αυτές είναι οι είκοσι συχνότερες υπογραφές. Μέσα σε μία εβδομάδα μια τέτοια λίστα απαντά τίμια τι συμβαίνει με τον διακομιστή, και δείχνει επίσης ποιους κανόνες είναι καιρός να απενεργοποιήσετε.

Γιατί να μπείτε στον κόπο όταν υπάρχει ήδη το Fail2ban

Διαφέρουν στη φύση τους. Το Fail2ban διαβάζει αρχεία εφαρμογών και αντιδρά σε αποτυχημένες συνδέσεις — δηλαδή σε ό,τι έχει ήδη φτάσει σε μια υπηρεσία. Η Suricata κοιτάζει την ίδια την κίνηση και βλέπει ό,τι δεν θα βρεθεί ποτέ σε αρχείο καταγραφής: σάρωση θυρών, απόπειρες εκμετάλλευσης που ταιριάζουν με γνωστές υπογραφές, συνδέσεις προς διακομιστές εντολών από το εσωτερικό του μηχανήματός σας. Το τελευταίο είναι ιδιαίτερα πολύτιμο: μια εξερχόμενη σύνδεση προς ξένο διακομιστή εντολών και ελέγχου είναι το πρωιμότερο σημάδι ότι κάτι στον διακομιστή τρέχει ήδη χωρίς να το ξεκινήσετε εσείς.

Το να κρατήσετε και τα δύο είναι μια χαρά, δεν συγκρούονται. Το μόνο ερώτημα είναι αν κάποιος διαβάζει την έξοδό τους συχνότερα από μία φορά το τρίμηνο. Πώς μοιάζουν οι ίδιες ειδοποιήσεις σε μία σελίδα, χωρισμένες ανά κατηγορία και πηγή, το δείχνει η επίδειξη παρακάτω.