איך מגינים על שרת וירטואלי?

אנשים לוקחים לצרכיהם שרתים וירטואלים, בין אם בארץ או בחו"ל (יותר מוכר בארץ כ-שרתי VPS בחו"ל זה יותר מוכר כ-Virtual Hosting או Virtual Server) כדי להריץ על השרת כל מיני דברים, בין אם אתר בינוני עד גדול, אפליקציות וכו'. טכנולוגיית הויטוראליזציה עצמה אינה משנה לתוכן פוסט זה, בין אם זה KVM, Hyper-V, Virtuozzo, Xen, OpenVZ או VMWare.

העניין הוא שרבים לחסוך ולחתוך מחירים, ובד"כ הם מוותרים על שרותי סיסטם מצד הספק. אחרי הכל "כמה זה כבר מסובך לנהל אבטחה של Linux או Windows? יש לי כזה בבית שרץ על VMWare / VirtualBox ולא קרתה שום בעיה עם מה שאני מתקין ועושה". כך אמר לי לדוגמא אדם אחד שרצה לשכור את שרותי הפרילנס שלי לטפל ב"תקלה קטנה". מהות התקלה? שום דבר מיוחד, הוא בטעות מחק את תיקיות sbin, /bin, /usr/ והוא התפלא למה המערכת לא עולה.

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

  1. לא לעבוד כ-root! הנה טעות שרבים עושים – מתקינים מכונת Linux (או מקבלים התקנה מוכנה מהספק) עם שם וסיסמא ומשאירים את המצב כך. חובה להגדיר משתמש רגיל ולעבוד אך ורק איתו ולא כ-root. איך עושים פעולות של root עם משתמש רגיל? אם אתה משתמש ב-CentOS אז תוכל לקרוא כאן איך להשתמש ב-sudo. בהפצות כמו אובונטו, שם המשתמש הראשון שמוגדר בעת ההתקנה יש לו הרשאות sudo.
  2. לבטל כניסת משתמש root – סקריפטים רבים שמנסים לפרוץ לשרתים (יש המון כאלו) בודקים קודם כל אם יש כניסה למשתמש root עם כל מיני סיסמאות, ולכן מומלץ לבטל אפשרות כניסת root ע"י שינוי קובץ etc/ssh/sshd_config/ השינוי: חפש את PermitRootLogin Yes – תמצא בהתחלה סולמית (#) ליידו, מחק את הסולמית ושנה את ה-Yes ל-No, ולאחר מכן הפעל את שרות ה-ssh מחדש (פקודת: service sshd restart). הדבר אינו פוגע בכניסת משתמש root דרך הקונסולה (לא דרך SSH) אם ספק השרות נותן לך קונסולה. מומלץ באותה הזדמנות לשנות את כניסת (פורט) SSH מ-22 למשהו אחר (נניח 1340 או מספר אחר מעל 1024).
  3. אם הינך משתמש ב-MySQL והשרת שלך הוא התקנה חדשה, הרץ (עם sudo) את פקודת mysql_secure_installation והזן את הפרטים שהתוכנה מבקשת ממך. לאחר הזנת הפרטים, המערכת תסגור כניסות ותמחק משתמשים מיותרים.
  4. אם יש לך מספר אתרים שמתארחים על השרת, פתח לכל אחד שם משתמש וקבוצה משלו (UID, GID) והשתמש בדברים כמו mod_suphp (ניתן להתקין את זה בפקודת yum install suphp על Centos או apt-get install suphp באובונטו/Debian). כאן תוכל למצוא הוראות איך להשתמש ב-suphp עם CentOS וכאן עם דביאן/אובונטו. בשיטה זו, תוכל לראות בקלות איזה אתר משתמש במשאבים ובכמה.
  5. תוכנות כמו Putty ב-Windows או תוכנות טרמינל במק ובלינוקס מאפשרות בקלות ליצור ולהשתמש במפתחות על מנת להיכנס (Login) לשרות. מומלץ להשתמש בשרות זה במקום סיסמאות, כך תוכל להגן על השרת שלך הרבה יותר, מכיוון שאף אחד לא יוכל לנסות לעשות Login לשרת שלך. איך עושים זאת? עוקבים אחר ההוראות כאן (ההוראות מתאימות לכל ההפצות).
  6. אל תפתח סתם פורטים: רבים אוהבים את השימוש בתוכנות גרפיות כדי לנהל דברים כמו MySQL עם Client שמותקן על המחשב בבית ולשם כך הם פותחים את פורט 3306. זו שגיאה נפוצה כי פורצים יכולים להאזין למידע ומשם לפרוץ בקלות לשרת שלך. אם אתה רוצה כלי וובי טוב לנהל בקלות MySQL, כדאי להשתמש ב- phpmyadmin (שימו לב להגדיר את האבטחה שבו, כי גם תוכנה זו פופולרית מאוד בקרב הסקריפטים המנסים לפרוץ לשרתים).
  7. סגור שרותים שאינך צריך: אצל ספקים שונים, הלינוקס מותקן כמו שהוא ללא שום הגדרות אבטחה מסויימות וללא ביטול שרותים שאינם נחוצים (מתי לאחרונה השתמשת בשרות Bluetooth על שרת?). ב-CentOS תוכל להשתמש בפקודה chkconfig ובדביאן/אובונטו תוכל להשתמש בפקודות שמופיעות כאן כדי להגדיר מה יפעל ומה לא. אם אינך יודע מהו כל שרות, גוגל יכול לסייע לך.
  8. ודא כי כל הסיסמאות הן סיסמאות חזקות, הווה אומר לפחות 3 מספרים ו-5 אותיות (גדולות וקטנות) מוגדרות לכל בסיס נתונים, שם משתמש וכו'.
  9. אל תסמוך על חומת האש של הספק! לקוחות רבים שומעים מאנשי מכירות כמה הספק השקיע בתשתית ויש חומת אש אכזרית של צ'ק פוינט/סיסקו שעולה מליוניםם ושהיא הודפת התקפות בקלות ושלל מעשיות נוספות, אבל גם חומת אש הכי יקרה בעולם יכולה לשמש כאבן שאין לה הופכים אם יש איש סיסטם מטומטם שמגדיר חוקים עם ANY ANY לכל הכתובות, לכן חשוב להגדיר את חומת האשהפנימית בשרת שלך שתגן על המכונה שלך.
  10. גיבויים – שוב, ספקים רבים מבטיחים גיבוי, אבל מי ערב לך שהגיבוי עובד ותקין ולא מוזנח (כי לאנשי הסיסטם יש משימות אחרות והם לא טיפלו חודשים רבים בגיבוי… ראיתי כבר ספקים עם המצב הנ"ל) וביום פקודה זה לא יעבוד? לכן חשוב מאוד לעשות גיבוי משלך למקום אחר (עדיף לאחסן את הגיבוי מחוץ לתשתית המקומית של הספק, או להשתמש באחסון חיצוני כמו S3 של אמזון).
  11. כשזה מגיע לבסיסי נתונים, תהיה מקורי בשמות בסיסי הנתונים. אם יש לך בלוג וורדפרס לדוגמא, בסיס נתונים עבורו בשם wpdb זה רעיון לא טוב! חשוב ליצור שמות מקוריים ויחודיים על מנת שלא לעשות חיים קלים לאלו הפורצים אתרים. זכור גם להכניס סיסמאות מסובכות (צריך שרות ליצירת סיסמאות מסובכות? קבל)
  12. הכר את נושא ה-Cross Site Scripting (נקרא גם XSS) – זו אחת השיטות הידועות ביותר לפרוץ לאתרים ורוב האתרים המסחריים בארץ חשופים לשיטה זו, לכן אם הנתונים חשובים לך, אז יש צורך בעדיפות עליונה להגן על האתר שלך נגד שיטת פריצה זו. אם אתה משתמש בדפדפן Firefox לדוגמא, אז תוסף XSS-ME יכול לבדוק את האתר שלך אם אתה פרוץ או לא בכל מיני מקומות באתרים שלך.
  13. עדכונים – חשוב תמיד לעדכן את המערכת שלך בעדכוני האבטחה האחרונים. עדכוני מערכת ניתן לעדכן בקלות בעזרת פקודת yum update (ב-CentOS) או apt-get upgrade בדביאן/אובונטו.
  14. לעקוב אחרי ה-Logs – בדרך כלל ניתן לראות היכן מתחילות הבעיות – ברישומי לוגים. אנשים עם מכונות אובונטו/דביאן מוזמנים לקרוא בנושא כאן. ב-CentOS יש פרק שלם על כך כאן.

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

זיכרו: עדכון, מעקב ומניעה – יכולים לתת לכם מכונה שתשרת אתכם לזמן רב בצורה יציבה.

Comments

comments

4 תגובות בנושא “איך מגינים על שרת וירטואלי?”

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *