איך הצלתי שרת VPS מעומס של 6.0 ומתקפות בוטים: המדריך המלא (חלק ב')

איך הצלתי שרת VPS מעומס של 6.0 ומתקפות בוטים: המדריך המלא (חלק ב') שווה לבחון - מנסיון חינמיים ובתשלום

תקציר

בפרק הקודם תיארתי את שלבי האבחון הראשוניים של עומס על שרת VPS, את בניית ה-Honeypot הבסיסי, ואת סקריפט ה-check_scanners.sh שעזר לי לזהות את התוקפים המובילים. גיליתי שהבעיה העיקרית היא "רעש לבן" של בוטים שמבזבזים משאבים, ושהפתרון חייב להיות אוטומטי. בפרק זה ניכנס לעומק האוטומציה: איך הפכנו את השרת למערכת הגנה עצמאית שחוסמת תוקפים מבלי שאצטרך להתערב.

הפרק השני: המעבר לאוטומציה – כשה-Firewall לומד לחסום לבד

הבנתי שאי אפשר לחסום אלפי IPs ידנית. הבוטים האלו משנים כתובות במהירות, וכל חסימה ידנית היא זמנית. הפתרון: לגרום ל-Firewall (CSF/LFD) "לקרוא" את הלוגים בזמן אמת ולפעול לבד.

הכלי המרכזי: LFD + regex.custom.pm – המוח האוטומטי

ה-Login Failure Daemon (LFD), רכיב ב-CSF, הוא הכלי המושלם למשימה. הוא סורק לוגים ללא הפסקה ומחפש דפוסים. על ידי הוספת כללי Regex מותאמים אישית לקובץ regex.custom.pm, אמרתי ל-LFD: "אם אתה רואה IP שמנסה לגשת לקבצי פריצה, חסום אותו!"

איך הטמעתי את הכלל:

  1. פתח את קובץ ה-regex.custom.pm לעריכה: nano /etc/csf/regex.custom.pm

  2. הוסף את הכלל הבא (לפני השורה return 0;):

				
					# חסימה אוטומטית למי שמנסה לגשת לקבצי פריצה (Honeypot Trigger)
if (($lgfile eq "/usr/local/apache/logs/access_log") and ($line =~ /"\S+\s(\S+)\sHTTP\/\d\.\d"\s(403|404)\s\S+\s"-\sUser-Agent:\s\S+"/ ) and ($1 =~ /(alfa.php|shell.php|xmlrpc.php|x.php)/)) {
    return ("HoneypotBlock: Attack attempt on $1",$1,"HoneypotBlock","3","80,443","86400","0");
}
				
			
    1. הסבר קצר על הכלל:

      • lgfile eq "/usr/local/apache/logs/access_log": סורק את לוג הגישה הראשי.

      • $1 =~ /(alfa.php|shell.php|xmlrpc.php|x.php)/: מחפש ניסיונות גישה לקבצים ספציפיים.

      • "\s(403|404)\s": מוודא שהבקשה הסתיימה בשגיאת 403 או 404.

      • "3": ה-IP ייחסם אחרי 3 ניסיונות.

      • "80,443": הבוט ייחסם בפורטים אלו.

      • "86400": הבוט ייחסם ל-24 שעות (86400 שניות). זה מספיק כדי לייאש את רוב התוקפים מבלי "ללכלך" את ה-Firewall עם חסימות קבועות.

    2. שמור את הקובץ ואתחל את CSF/LFD: csf -r && service lfd restart

    הבעיה השנייה: מתקפת מיילים מבוזרת (SMTP Brute Force)

    תוך כדי ניטור השרת, גיליתי מקור עומס נוסף: מתקפה מבוזרת על שירות המייל (SMTP/Dovecot). בוטים רבים ניסו לנחש סיסמאות עבור שמות משתמש נפוצים כמו michal, odeya, admin, info – גם אם הם לא היו קיימים בשרת. הניסיונות האלו בזבזו משאבים על אימות שמות משתמש וסיסמאות.

    הפתרון: הרחבת ה-Honeypot לרמת המייל.

    1. הגדרת ה-LFD לסרוק לוג מייל: פתח את vi /etc/csf/csf.conf ושנה את הערך: CUSTOM2_LOG = "/var/log/maillog"

    2. כלל Regex לחסימת ניחושי משתמשים במייל: הוסף כלל נוסף ל-/etc/csf/regex.custom.pm (שוב, לפני return 0;):

     
				
					# חסימה מיידית של ניסיונות פריצה למשתמשים שלא קיימים במייל (FakeUserBlock)
if (($lgfile eq "/var/log/maillog") && ($line =~ /password mismatch/i) && ($line =~ /user=<(michal|odeya|admin|webmaster|info|test)>/i) && ($line =~ /rip=(\S+),/)) {
    return ("FakeUserBlock: Attempt to fake user $1",$1,"FakeUserBlock","1","25,110,143,465,587,993,995","86400","0");
}
				
			
  1. הסבר קצר על הכלל:

    • lgfile eq "/var/log/maillog": הפעם סורק את לוג המייל.

    • user=<(michal|odeya|admin|webmaster|info|test)>: רשימת שמות משתמש "מבוקשים" על ידי תוקפים.

    • "1": חסימה מיידית בניסיון הראשון! (מכיוון שאנו יודעים שמשתמשים אלו אינם קיימים, אין מה להפסיד).

    • "25,110,...": חסימה על כל פורטי המייל הנפוצים.

  2. שמור ואתחל: csf -r && service lfd restart

הלקח השני: כוחו של ה-Regex

הבנתי שעם מעט יצירתיות ו-Regex, אפשר להפוך את ה-Firewall למערכת אבטחה פרואקטיבית שמזהה ונועלת תוקפים לפני שהם בכלל מגיעים למשאבים של השרת. העומס שהיה על השרת ירד באופן דרמטי, וה-Load התייצב על מספרים נמוכים (0.1-0.3) רוב הזמן.


מה מחכה לנו בפרק ג'?

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

האתר נעזר ב"עוגיות" (cookies) לשיפור איכות חווית הגלישה שלך. המשך גלישה מהווה הסכמתך לשימוש בהם.

בניית אתרים וקידום עסקים באינטרנט Site2goal

הי!

רגע לפני שעוזבים
השאירו פרטים ונשמח לעזור