تقریباً هر راهنمای Suricata با نصب Elasticsearch و Logstash و Kibana پایان می‌یابد. برای یک VPS تنها این توصیه بدی است: آن پشته چهار گیگابایت حافظه و توجه پیوسته می‌خواهد، در حالی که تنها خواسته شما دیدن چیزی بود که IDS در یک شبانه‌روز گذشته گرفته است. Suricata بدون آن‌ها هم کاملاً خوب کار می‌کند — اما ویژگی‌ای دارد که سبب می‌شود مردم نصبش کنند و یک هفته بعد برش دارند.

مینِ نهفته در تنظیمات پیش‌فرض

Suricata از همان آغاز بیش از سی گونه رویداد را در eve.json می‌نویسد: نه تنها هشدارها، بلکه هر پرس‌وجوی DNS، هر دست‌دادن TLS، هر تراکنش HTTP، ARP، DHCP، و جریان پس از جریان. به‌علاوه یک stats.log جداگانه هر هشت ثانیه. و Suricata در این میان چرخش گزارش‌ها را تنظیم نمی‌کند — این کار مدیر است و هیچ‌جا با حروف درشت نوشته نشده.

عددی از یک سرور واقعی: ۱۵ گیگابایت در دو روز — نُه در 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 به خود ترافیک نگاه می‌کند و آنچه را می‌بیند که هرگز در هیچ گزارشی نخواهد بود: پویش پورت، تلاش‌های بهره‌برداری که با امضاهای شناخته‌شده همخوانی دارند، و اتصال‌ها به سرورهای فرمان از درون ماشین شما. آخری به‌ویژه ارزشمند است: اتصالی خروجی به سرور فرمان و کنترل دیگری، نخستین نشانه از آن است که چیزی روی سرور از پیش اجرا می‌شود که شما آغازش نکرده‌اید.

نگه‌داشتن هر دو اشکالی ندارد، با هم ناسازگار نیستند. تنها پرسش این است که آیا کسی خروجی آن‌ها را بیش از یک بار در هر فصل می‌خواند. شکل همان هشدارها در یک صفحه، جداشده بر پایه دسته و سرچشمه، در نمایش پایین آمده است.