Neredeyse her Suricata rehberi Elasticsearch, Logstash ve Kibana kurulumuyla biter. Tek bir VPS için bu kötü bir tavsiyedir: bu yığın dört gigabayt bellek ve sürekli ilgi ister, oysa tek istediğiniz IDS’in son bir günde neyi yakaladığını görmekti. Suricata onlarsız gayet iyi çalışır — ama insanların onu kurup bir hafta sonra kaldırmasına yol açan bir özelliği vardır.

Varsayılan ayarlardaki mayın

Kutudan çıktığı haliyle Suricata eve.json dosyasına otuzdan fazla olay türü yazar: yalnızca uyarıları değil, her DNS sorgusunu, her TLS el sıkışmasını, her HTTP işlemini, ARP’yi, DHCP’yi, akış üstüne akışı. Üstüne her sekiz saniyede bir ayrı bir stats.log. Suricata bunu yaparken günlük döndürmesini kurmaz — o, yöneticinin işidir ve hiçbir yerde büyük harflerle yazmaz.

Gerçek bir sunucudan bir rakam: iki günde 15 gigabayt — dokuzu eve.json dosyasında, altıya yakını stats.log dosyasında. Disk dolana kadar yaklaşık beş gün kalmıştı. O sunucuda trafik de fazla değildi; yoğun bir düğümde bu birkaç saatlik iş olurdu.

Kendinizinkini hemen şimdi kontrol edin:

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

Yalnızca okuduğunuzu saklayın

Ağ adli incelemesi yapmak yerine uyarılara bakıyorsanız, eve-log içinden tam olarak bir olay türü gerekir. /etc/suricata/suricata.yaml dosyasında outputs bloğunu bulun ve eve-log için types altında alert bırakıp geri kalanını yorum satırı yapın. İstatistik çıktısını da aynı yerde kapatın:

  - stats:
      enabled: no

Düzenlemeden sonra yapılandırma kontrolü zorunludur — servisi yeniden başlatmadan önce:

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

Sıra önemlidir: kurallar henüz yüklenmemişse test geçmez. Önce suricata-update, sonra yapılandırma kontrolü, sonra başlatma.

Gerçekten çalışan döndürme

/etc/logrotate.d/suricata dosyası:

/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
}

Buradaki iki satır apaçık değildir ve ikisi de kritiktir.

su suricata suricata — bu olmadan logrotate bütün dosyaları sessizce atlar. /var/log/suricata dizini root’a değil suricata grubuna aittir ve logrotate böyle bir düzeni güvensiz sayar. Ne postada bir hata olur ne de günlükte; disk dolana kadar döndürmenin var olduğundan emin olursunuz sadece. Bunu önceden yakalamanın tek yolu bir kuru çalıştırmadır:

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

create 0664 suricata suricata — yeni dosyanın izinleri. Varsayılanlarla (0640), günlükleri root olmayan bir kullanıcı olarak okuyan herhangi bir panel ya da betik ilk döndürmeden sonra hiçbir şey göremez.

Günlüklerin dışında neyi ayarlamalı

HOME_NET. Bu, Suricata’nın neyi kendi ağı saydığını tanımlar. Varsayılan değer bütün özel aralıkları sıralar, oysa bir VPS’in genel bir adresi vardır — bu yüzden bazı kurallar tetiklenmez ya da ters yönde tetiklenir. Kendi ağınızı açıkça belirtin.

Kurallar. Emerging Threats Open kümesini suricata-update çeker; onun yeri günde bir kez cron’dur. Tek tek gürültülü imzalar /etc/suricata/disable.conf içinde kimlikle kapatılır — bunu kullanmaktan çekinmeyin: küme kurumsal bir ağ için tasarlanmıştır ve sıradan bir web sunucusunda bir düzine kural durmadan ve boşuna tetiklenir.

Kip. Suricata varsayılan olarak trafiğin bir kopyasını dinler ve yalnızca uyarır (IDS). Tek bir sunucuda engelleme kipi (nfqueue üzerinden IPS) en çok kendinize karşı bir risktir: tek bir yanlış pozitif ve kendinizi dışarıda bulursunuz. İzlemekle başlayın ve neyin yakalandığını görmek için bir ay geçirin.

Kibana olmadan nasıl okunur

Kısa uyarılar /var/log/suricata/fast.log dosyasında durur — olay başına bir satır, gözle okunabilir:

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

Ayrıntı eve.json içindedir, satır başına bir JSON nesnesi. Kibana’nın uğruna kurulduğu her şey tek bir komuta iner:

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

Bu, en sık görülen yirmi imzadır. Bir hafta boyunca böyle bir liste sunucuda neler olup bittiğini dürüstçe yanıtlar ve hangi kuralları kapatma zamanının geldiğini de gösterir.

Fail2ban zaten varken buna ne gerek var

Doğaları farklıdır. Fail2ban uygulama günlüklerini okur ve başarısız oturum açmalara tepki verir — yani bir servise çoktan ulaşmış olana. Suricata trafiğin kendisine bakar ve hiçbir zaman bir günlükte olmayacak şeyleri görür: port taramasını, bilinen imzalara uyan istismar denemelerini, makinenizin içinden komuta sunucularına kurulan bağlantıları. Sonuncusu özellikle değerlidir: başkasının komuta ve kontrol sunucusuna giden bir bağlantı, sunucuda sizin başlatmadığınız bir şeyin çoktan çalıştığının en erken belirtisidir.

İkisini birden tutmak sorun değil, çakışmazlar. Tek soru, çıktılarını üç ayda birden daha sık okuyan biri olup olmadığıdır. Aynı uyarıların tek sayfada, kategori ve kaynağa göre ayrılmış hali aşağıdaki demoda.