הגדרה ידנית של דיסקים מיובאים

אחרי ייבוא ידני של דיסק וירטואלי אל Compute Engine, צריך לבצע אופטימיזציה של התמונות כדי שיוכלו להשתמש בתכונות שספציפיות לסביבת Compute Engine.

תוכן עניינים

התקנת סביבת האורח של Compute Engine

כדי להשתמש בתכונות מרכזיות של Compute Engine, צריך להתקין את סביבת האורח. כדי לדעת מתי צריך להתקין את סביבת האורח באופן ידני, אפשר לעיין במאמר בנושא מתי צריך להתקין או לעדכן את סביבת האורח באופן ידני.

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

הגדרת התמונה המיובאת ל-Compute Engine

אפשר להריץ את תמונת הדיסק של האתחול ב-Compute Engine בלי לבצע שינויים נוספים, אבל אפשר גם לבצע אופטימיזציה נוספת של התמונה כדי שהיא תפעל בצורה אופטימלית ב-Compute Engine ותהיה לה גישה לכל התכונות של Compute Engine.

  • עורכים את הקובץ ntp.conf כך שיכלול רק את הרשומה של שרת ה-NTP של Google‏ server metadata.google.internal iburst.

  • מגדירים את אזור הזמן ל-UTC:

    sudo ln -sf /usr/share/zoneinfo/UTC /etc/localtime
  • כדי להבטיח יכולת רשת עם ביצועים גבוהים, מומלץ להשתמש בהגדרות הרשת הבאות:

    • משתמשים ב-ISC DHCP client.
    • מגדירים את ה-MTU של DHCP ל-MTU של הרשת. שרת ה-DHCP של Compute Engine מציג את הפרמטר הזה כאפשרות interface-mtu, שרוב הלקוחות מכבדים. מידע נוסף על MTU ברשת זמין במאמר סקירה כללית של יחידת שידור מקסימלית.
    • אם לא מתכוונים להגדיר כתובות IPv6, צריך להשבית את IPv6.
    • מסירים כללי רשת קבועים כדי למנוע מהמופע לזכור כתובות MAC. לדוגמה:

      rm -f /etc/udev/rules.d/70-persistent-net.rules
    • משביתים את חומת האש של מערכת ההפעלה, אלא אם יש לכם דרישות ספציפיות שלא נתמכות על ידי כללי חומת האש של Compute Engine. ‫Compute Engine מספק חומת אש לתעבורה נכנסת ויוצאת. מידע נוסף על חומות אש

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

  • הגדרת גישת SSH לתמונת הבסיס:

    • משביתים את הכניסה באמצעות SSH כמשתמש root.
    • משביתים את אימות הסיסמה.
    • משביתים את האימות שמבוסס על המארח.
    • הפעלת בדיקה קפדנית של מפתחות מארח.
    • אפשר להשתמש ב-ServerAliveInterval כדי לשמור על החיבורים פתוחים.
    • הסרת מפתחות SSH מהתמונה כדי שאחרים לא יוכלו לגשת למפתחות הציבוריים או הפרטיים בתמונה. במקום זאת, משתמשים ב-Compute Engine כדי לנהל את הגישה למכונות.

    • עורכים את הקובץ /etc/ssh/ssh_config כדי להשתמש בהגדרה הבאה:

      Host *
      Protocol 2
      ForwardAgent no
      ForwardX11 no
      HostbasedAuthentication no
      StrictHostKeyChecking no
      Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
      Tunnel no
      
      # Compute Engine times out connections after 10 minutes of inactivity.
      # Keep alive ssh connections by sending a packet every 7 minutes.
      ServerAliveInterval 420
      
    • עורכים את הקובץ /etc/ssh/sshd_config כדי להשתמש בהגדרה הבאה:

      # Disable PasswordAuthentication because ssh keys are more secure.
      PasswordAuthentication no
      
      # Disable root login. Using sudo provides better auditing.
      PermitRootLogin no
      
      PermitTunnel no
      AllowTcpForwarding yes
      X11Forwarding no
      
      # Compute Engine times out connections after 10 minutes of inactivity.
      # Keep alive ssh connections by sending a packet every 7 minutes.
      ClientAliveInterval 420
      

אחרי שמגדירים את דיסק האתחול ב-Compute Engine ומבצעים בו אופטימיזציה, יוצרים ממנו קובץ אימג' כדי שתוכלו ליצור מכונות מגרסה שעברה אופטימיזציה מלאה של קובץ האימג', במקום להגדיר כל מכונה בכל פעם שיוצרים אותה.

הגדרת שיטות מומלצות לאבטחה

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

  • צריך לצמצם את כמות התוכנה שמותקנת כברירת מחדל (לדוגמה, לבצע התקנה מינימלית של מערכת ההפעלה).
  • הפעלת עדכונים אוטומטיים.
  • כברירת מחדל, כל שירותי הרשת מושבתים, למעט SSH, ‏ DHCP ו-NTPD. אתם יכולים לאפשר לשרת אימייל, כמו Postfix, לפעול אם הוא מקבל חיבורים רק מ-localhost.
  • לא לאפשר יציאות להאזנה חיצונית, למעט sshd.
  • כדי למנוע ניסיונות התחברות ל-SSH בכוח, כדאי להתקין את חבילת denyhosts.
  • מסירים את כל החשבונות המיותרים שאינם חשבונות משתמשים מההתקנה שמוגדרת כברירת מחדל.
  • ב-/etc/passwd, מגדירים את המעטפת של כל החשבונות שאינם חשבונות משתמשים ל-/sbin/nologin או ל-/usr/sbin/nologin (בהתאם למיקום שבו מערכת ההפעלה התקינה את nologin).
  • מגדירים את מערכת ההפעלה לשימוש ב-SHA512 עם Salt לסיסמאות ב-/etc/shadow.
  • הגדרה וקביעת תצורה של pam_cracklib לסיסמאות חזקות.
  • מגדירים וקובעים את ההגדרות של pam_tally כדי לנעול חשבונות למשך 5 דקות אחרי 3 ניסיונות כושלים.
  • ב-/etc/shadow, מגדירים את חשבון הבסיס כך שיינעל כברירת מחדל. מריצים את הפקודה הבאה כדי לנעול את חשבון הבסיס:

    usermod -L root
  • כדי לדחות את הגישה ל-root ב-/etc/ssh/sshd_config, מוסיפים את השורה הבאה:

    PermitRootLogin no
  • יוצרים פרופילים של AppArmor או של SELinux לכל שירותי ברירת המחדל שפועלים ברשת.

  • כדי לאפשר שליטה מדויקת יותר, מומלץ להשתמש ביכולות של מערכת הקבצים כדי לבטל את הצורך ב-S*ID bit.

  • הפעלת אמצעים לצמצום הסיכון לניצול לרעה של קומפיילר וסביבת ריצה כשמבצעים קומפילציה של תוכנה שפונה לרשת. לדוגמה, הנה כמה מהאמצעים לצמצום הסיכון שזמינים ב-GNU Compiler Collection (GCC) והסבר איך להפעיל אותם:

    • הגנה מפני פריצה למחסנית: מפעילים את ההגדרה הזו באמצעות -fstack-protector. כברירת מחדל, האפשרות הזו מגנה על פונקציות עם מאגר שהוקצה למחסנית באורך של יותר משמונה בייטים. כדי להגדיל את ההגנה על ידי הוספת מאגרי נתונים זמניים של לפחות ארבעה בייטים לפונקציות, מוסיפים את --param=ssp-buffer-size=4.
    • אקראיות של פריסת מרחב כתובות (ASLR): כדי להפעיל את ההגדרה הזו, צריך ליצור קובץ הפעלה בלתי תלוי במיקום באמצעות -fPIC -pie.
    • הגנות Glibc: מפעילים את ההגנות האלה באמצעות -D_FORTIFY_SOURCE=2.
    • הגנה על טבלת ההיסטים הגלובלית (GOT): מפעילים את התכונה הזו של טוען זמן הריצה באמצעות -Wl,-z,relro,-z,now.
    • שגיאות בזמן הידור של מחרוזות פורמט חסרות: -Wformat -Wformat-security -Werror=format-security
  • השבתה של CAP_SYS_MODULE, שמאפשרת טעינה ופריקה של מודולים של ליבת המערכת. כדי להשבית את התכונה הזו, עורכים את הקובץ /etc/sysctl.conf ומוסיפים את ההגדרה הבאה:

    kernel.modules_disabled = 1
  • מסירים את טבלת הסמלים של ליבת המערכת:

    sudo rm /boot/System.map

המאמרים הבאים