שני הכלים קוראים יומנים וחוסמים כתובות, ובמבט ראשון CrowdSec נראה כמו Fail2ban עם קוד חדש יותר. אבל ההבדל ביניהם מהותי יותר, והוא נעוץ לא בגיל הקוד אלא במקור שממנו מגיעה ההחלטה לחסום.
איך הם בנויים
Fail2ban הוא תהליך יחיד שקורא יומנים, סופר התאמות של ביטויים רגולריים וקורא לפקודה של חומת האש. כל החלטה מתקבלת במכונה שלכם מהמונים שלכם. שום דבר אינו נשלח לשום מקום, אין תלויות, וההגדרות הן קובצי טקסט.
CrowdSec מחולק לשני חלקים, וזה העיקר שצריך להבין לפני ההתקנה. הסוכן עצמו רק מזהה: הוא מפרק יומנים, מחיל תרחישים וכותב החלטות למאגר משלו. את ההחלטות מבצעת תוכנית נפרדת, ה-bouncer. ובלי bouncer מותקן CrowdSec רץ, מציג התראות, מנהל רשימת החלטות — ואינו חוסם דבר.
וזו האכזבה הנפוצה ביותר בהיכרות הראשונה: הכלי מותקן, ההתקפות נראות, והתעבורה זורמת בדיוק כמו קודם.
sudo apt install crowdsec
sudo apt install crowdsec-firewall-bouncer-iptables
sudo cscli bouncers list
הפקודה האחרונה הזאת חייבת להציג לפחות רשומה רשומה אחת. רשימה ריקה פירושה שאין חסימה.
ההבדל השני: מוניטין משותף
Fail2ban יודע רק מה קרה אצלכם. כתובת שבילתה את אתמול בפריצה למאה שרתים אחרים נקייה מבחינתו עד שתדפוק בדלת שלכם — וחמשת הניסיונות הראשונים שלה חינם.
CrowdSec שולח אותות על מה שהופעל לרשת משותפת ומקבל בחזרה רשימת כתובות שנצפו בשרתים של אחרים. ההשפעה המעשית: חלק ניכר מהניחוש נחתך עוד לפני הניסיון הראשון. וזה חשוב במיוחד מול התקפות מבוזרות — אלפי כתובות עם ניסיון אחד כל אחת, שם המונים המקומיים חסרי אונים מעצם הגדרתם.
והנה מה שצריך לדעת מראש: החילופין דו-כיווניים. מהשרת שלכם יוצאות הכתובות המפרות וסוגי התרחישים שהופעלו. עבודה מקומית לחלוטין אפשרית — בלי הרשמה לקונסולת הענן — אבל אז גם הרשימה המשותפת אינה זמינה לכם, והיתרון המרכזי נעלם. וזו בחירה מודעת ולא פרט של הגדרות.
פקודות יומיומיות
sudo cscli metrics
sudo cscli alerts list
sudo cscli decisions list
sudo cscli decisions delete --ip 203.0.113.25
metrics עונה על השאלה אם היומנים בכלל נקראים: אם מספר השורות שפורקו הוא אפס, אז האוסף לשרת האתר שלכם אינו מותקן או שנתיב היומן שגוי. וזה המקרה השני בשכיחותו של «מותקן ולא עובד».
sudo cscli collections list
sudo cscli collections install crowdsecurity/nginx
משאבים
CrowdSec כתוב ב-Go ומחזיק את מצבו במסד נתונים. צריכת הזיכרון היא בסדר גודל של מאה מגה-בייט, ובנוסף ה-bouncer. בשרת עם ג׳יגה-בייט זיכרון זה מורגש; משניים ומעלה כבר לא. Fail2ban קל יותר, ועושה פחות.
האם שווה להחזיק את שניהם
הם אינם מתנגשים: אחד כותב את הכללים שלו לחומת האש והשני את שלו, ולחסום את אותה כתובת פעמיים אינו מזיק לאיש. חלוקה סבירה נראית כך.
CrowdSec לוקח על עצמו את התעבורה ההמונית: ניחוש SSH, סריקת שרת האתר, וכתובות רעות מוכרות מהרשימה המשותפת. ו-Fail2ban נשאר במקום שבו יש לכם יומן משלכם בפורמט משלכם, שכתיבת ביטוי רגולרי עבורו קלה יותר מכתיבת תרחיש — אפליקציה מתוצרת עצמית, שירות נדיר, טופס כניסה מסוים.
ואם צריך לבחור אחד, אמת המידה היא זו: בשרת עם אתר שנבדק כל הזמן, CrowdSec נותן יותר בזכות הרשימה המשותפת. אבל בשרת שרק אתם ניגשים אליו דרך SSH עם מפתחות, ההבדל ביניהם קטן — רוב העבודה שם כבר נעשתה בכיבוי הסיסמאות.
מגבלה משותפת
אף אחד מהם אינו מגן מפני פרצה באפליקציה. שניהם עובדים עם תדירות בקשות ועם מוניטין של כתובות, ובקשה שמנצלת בניסיון הראשון חור בתוסף מכתובת נקייה תעבור על פני שניהם. זו עבודתם של כלים אחרים — חומת אש לאפליקציה ברמת הבקשה ועדכונים בזמן. חסימת כתובות מסלקת את הרקע ולא את הסיבה.
והערך המעשי של שניהם תלוי בכך שמישהו יביט בתוצאה. עלייה במספר ההחלטות, תרחיש שמופעל בפעם הראשונה, שינוי במדינות שמהן מגיעים הניסיונות — זהו המידע שלשמו הכלי הותקן. איך זה נראה בעמוד אחד מראה ההדגמה למטה.