כמעט כל מדריך ל-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 מסתכלת על התעבורה עצמה ורואה את מה שלעולם לא יהיה ביומן: סריקת פורטים, ניסיונות ניצול שתואמים חתימות מוכרות, וחיבורים לשרתי פיקוד מתוך המכונה שלכם. האחרון בעל ערך במיוחד: חיבור יוצא לשרת פיקוד ובקרה של מישהו אחר הוא הסימן המוקדם ביותר לכך שבשרת כבר רץ משהו שאתם לא הפעלתם.

להחזיק את שניהם זה בסדר גמור, הם אינם מתנגשים. השאלה היחידה היא אם מישהו קורא את הפלט שלהם יותר מפעם ברבעון. איך נראות אותן התראות בעמוד אחד, מופרדות לפי קטגוריה ומקור, מראה ההדגמה למטה.