גיבוי 3-2-1 - איך לגבות שרתים כך שתמיד תוכלו לשחזר

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

עודכן: · 8 דק׳ קריאה · מאת צוות CloudServer

בקצרה גיבוי 3-2-1 פירושו 3 עותקים של המידע, על 2 סוגי אחסון שונים, כשעותק 1 מחוץ לאתר. הגרסה המודרנית, 3-2-1-1-0, מוסיפה עותק אחד שאינו ניתן לשינוי או מנותק (נגד כופרה) ו-0 שגיאות בבדיקות שחזור. בשרת ענן: Snapshot לשחזור מהיר, גיבוי מוצפן לספק או מיקום נפרד, ובדיקת שחזור קבועה. התדירות נקבעת לפי ה-RPO וה-RTO של כל מערכת.

גיבוי 3-2-1 הוא כלל אצבע ותיק לגיבוי שרתים ומידע: שומרים 3 עותקים של המידע, על 2 סוגי מדיה או מערכות אחסון שונים, ועותק 1 לפחות מחוץ לאתר. הרעיון פשוט - אף תקלה בודדת, בין אם דיסק שקרס, שרת שנפרץ, מרכז נתונים שנפגע או עובד שמחק בטעות, לא אמורה להשמיד את כל העותקים. במדריך נסביר איך מיישמים את הכלל בשרתי ענן, מה ההבדל בין Snapshot לגיבוי, איך קובעים תדירות, ואיך מוודאים שהגיבוי באמת ניתן לשחזור.

מה זה כלל הגיבוי 3-2-1?

כלל 3-2-1 מגדיר את המינימום הדרוש כדי שגיבוי יחזיק מעמד מול תקלות אמיתיות. כל ספרה מגינה מפני סוג אחר של כשל:

  • 3 עותקים - המידע המקורי ועוד שני גיבויים. עותק אחד יכול להיות פגום בדיוק ביום שצריך אותו; שניים מקטינים את הסיכון דרמטית.
  • 2 סוגי אחסון - למשל דיסק השרת ומערכת אחסון אובייקטים (Object Storage), או אחסון אצל ספק אחד ואצל ספק אחר. כך תקלה במערכת אחת, בתוכנה אחת או באותה סדרת דיסקים לא פוגעת בכל העותקים.
  • 1 מחוץ לאתר - עותק במרכז נתונים אחר, באזור אחר או אצל ספק אחר. הוא שמציל אתכם מאסון ברמת האתר - שריפה, הצפה, תקלה חמורה אצל הספק, או פריצה לחשבון.

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

מה זה 3-2-1-1-0 ולמה הוא נחוץ היום?

3-2-1-1-0 הוא הרחבה מודרנית של הכלל, שנולדה בעיקר בגלל מתקפות כופרה. היא מוסיפה שתי דרישות:

  • 1 עותק בלתי ניתן לשינוי או מנותק - Immutable (נעילת אובייקטים לתקופה מוגדרת, כך שאי אפשר למחוק או לשנות אותם גם עם הרשאות) או Air-gapped (מנותק מהרשת ומפרטי הגישה של השרת). זה העותק שתוקף לא יכול להגיע אליו.
  • 0 שגיאות - גיבויים שנבדקו בפועל, כולל שחזור, ונמצאו תקינים. גיבוי שלא נבדק הוא השערה.

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

מה ההבדל בין Snapshot לגיבוי?

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

Snapshot מול גיבוי חיצוני
מאפייןSnapshotגיבוי חיצוני
מהירות יצירהשניות עד דקותדקות עד שעות (מהיר יותר עם גיבוי מצטבר)
מהירות שחזור שרת מלאמהירה מאודאיטית יותר, תלויה בנפח וברשת
שחזור קובץ בודדלרוב דורש שחזור או חיבור הדיסקפשוט
תלות בתשתית המקוריתגבוהה - אותה מערכת אחסון / ספקנמוכה - מיקום ומערכת נפרדים
הגנה מפני פריצה לחשבוןחלשה, אם אותם פרטי גישה מוחקים אותוטובה, במיוחד עם Immutable
עקביות מסד נתוניםCrash-consistent, אלא אם מקפיאים את ה-DBעקבי כשמגבים Dump או משתמשים בכלי ייעודי
שימוש מומלץלפני עדכון, שחזור מהיר מתקלהשחזור מאסון, כופרה, דרישות רגולציה

המסקנה: Snapshot הוא העותק ה"שני" המהיר, וגיבוי חיצוני הוא העותק ה"שלישי" והמבודד. יחד עם המידע המקורי - הנה 3-2-1. שירות גיבוי לענן שלנו נותן את השכבה החיצונית הזאת בלי שתצטרכו לבנות אותה בעצמכם.

מה צריך לגבות בשרת ענן?

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

  • מסדי נתונים - באמצעות Dump עקבי (mysqldump עם --single-transaction, pg_dump) ולא רק העתקת קבצי ה-DB בזמן שהשירות רץ.
  • קבצי האפליקציה והתוכן - למשל /var/www, תיקיות העלאות, קבצי משתמשים.
  • הגדרות - /etc, הגדרות שרת ה-Web, משימות cron, קבצי סביבה (env) ותעודות SSL.
  • סודות - מפתחות API וסיסמאות, מוצפנים ובנפרד, כדי שאפשר יהיה להפעיל את המערכת אחרי שחזור.
  • תיעוד - גרסאות מערכת ההפעלה והתוכנות, ותהליך ההקמה. אם השרת מוגדר בקוד (Ansible, סקריפטים), הקוד הוא חלק מהגיבוי.

בשרתי Windows התמונה דומה: מסדי SQL Server בגיבוי מובנה, תיקיות משתמשים ושיתופים, והגדרות המערכת - לרוב עם כלי גיבוי ברמת המכונה כולה.

מה זה RPO ו-RTO ואיך הם קובעים את תוכנית הגיבוי?

RPO (Recovery Point Objective) הוא כמות המידע המקסימלית שהעסק מוכן לאבד, נמדדת בזמן - "מותר לאבד עד שעה של הזמנות". RTO (Recovery Time Objective) הוא הזמן המקסימלי שהמערכת יכולה להיות מושבתת - "החנות חייבת לחזור תוך 4 שעות". ה-RPO קובע את תדירות הגיבוי, וה-RTO קובע את שיטת השחזור.

דוגמאות ל-RPO ו-RTO לפי סוג מערכת - להתאמה לפי העסק
מערכתRPO טיפוסיRTO טיפוסישיטה מתאימה
אתר תדמית24 שעותיום עסקיםSnapshot יומי + גיבוי חיצוני יומי
חנות מקוונתשעה2-4 שעותDump של מסד הנתונים כל שעה, Snapshot יומי, גיבוי חיצוני
הנהלת חשבונות / ERP1-4 שעות4-8 שעותגיבוי DB כמה פעמים ביום, Snapshot לפני כל עדכון
שרת קבצים משרדי4-24 שעותיום עסקיםגיבוי מצטבר עם גרסאות, עותק Immutable
מערכת קריטית / SaaSדקותפחות משעהשכפול מסד נתונים לשרת שני + גיבויים

חשוב להבין ש-RPO של דקות לא מושג בגיבוי - הוא דורש שכפול (Replication). אבל שכפול לבדו אינו גיבוי: אם מישהו מוחק טבלה, המחיקה משוכפלת מיד. לכן מערכות קריטיות צריכות את שניהם.

איך נראה לוח זמנים לגיבוי שרת?

לוח זמנים טוב משלב כמה שכבות עם תקופות שמירה שונות. הנה דוגמה לשרת ענן שמריץ חנות מקוונת:

לוח זמנים לדוגמה - שרת חנות מקוונת
מהתדירותלאןשמירה
Dump של מסד הנתוניםכל שעהדיסק מקומי, ומשם לגיבוי החיצוני48 שעות מקומית
Snapshot של השרתיומי + לפני כל עדכוןאצל ספק הענן7 ימים
גיבוי קבצים ו-DB (restic)יומיאחסון אובייקטים במיקום נפרד14 יומיים, 8 שבועיים, 12 חודשיים
עותק Immutableשבועיספק או חשבון נפרד עם נעילה30 יום ומעלה
בדיקת שחזורחודשית / רבעוניתשרת בדיקה זמניתיעוד התוצאה

איך מגבים שרת לינוקס עם restic או rsync?

restic הוא כלי גיבוי חינמי שמצפין, מבצע De-duplication ותומך ביעדים רבים (SFTP, S3 ותואמי S3, ועוד) - בחירה מצוינת לשרתי לינוקס. דוגמה לסקריפט יומי:

#!/bin/bash
# /usr/local/bin/backup.sh - גיבוי יומי עם restic
set -euo pipefail
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-backups"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="..."       # מפתח ייעודי לגיבוי, לא חשבון הניהול
export AWS_SECRET_ACCESS_KEY="..."

# 1. Dump עקבי של מסד הנתונים
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz

# 2. גיבוי מוצפן ומצטבר
restic backup /etc /var/www /var/backups --exclude-caches

# 3. מדיניות שמירה
restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 12 --prune

# 4. בדיקת תקינות של חלק מהנתונים
restic check --read-data-subset=5%

מתזמנים עם cron (למשל 30 2 * * * /usr/local/bin/backup.sh), ושולחים התראה כשהסקריפט נכשל. מי שמעדיף כלי פשוט יותר יכול להעתיק עם rsync לשרת גיבוי נפרד, למשל rsync -aAX --delete /var/www/ backup@backup-host:/srv/backups/site/ - אבל שימו לב ש-rsync לבדו לא שומר גרסאות היסטוריות ולא מצפין, ולכן כדאי לשלב אותו עם Snapshots בצד היעד.

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

איך מגנים על הגיבויים מפני כופרה?

ההגנה העיקרית היא שהשרת לא יוכל למחוק את הגיבויים שלו. בפועל:

  • פרטי גישה נפרדים - פרטי הגישה שעל השרת לא צריכים לאפשר מחיקת גיבויים ישנים - למשל restic rest-server במצב Append-only. את ה-prune מריצים משרת או חשבון אחר.
  • Object Lock / Immutable - נעילת אובייקטים לתקופה מוגדרת ברמת האחסון.
  • MFA לחשבון הענן - כדי שפריצה לסיסמה לא תאפשר מחיקת Snapshots וגיבויים.
  • היסטוריה ארוכה מספיק - הדבקה מתגלה לפעמים אחרי שבועות; שמירה של 7 ימים לא תספיק.
  • ניטור חריגות - קפיצה חדה בנפח הגיבוי היומי יכולה להעיד על הצפנה המונית של קבצים.

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

למה חייבים לבדוק שחזור?

כי הסיבה הנפוצה לכישלון בשחזור היא לא היעדר גיבוי - אלא גיבוי שאף אחד לא בדק. תיקייה שלא נכללה, Dump ריק בגלל הרשאה שהשתנתה, סיסמת הצפנה שאבדה, או שחזור שלוקח 20 שעות כשה-RTO הוא 4. תרגיל שחזור טוב כולל:

  1. הקמת שרת זמני ושחזור מלא אליו מהגיבוי החיצוני (לא מה-Snapshot).
  2. בדיקה שהאפליקציה עולה, שמסד הנתונים שלם, ושהנתונים מהיום האחרון קיימים.
  3. מדידת הזמן מתחילת התהליך ועד מערכת עובדת, והשוואה ל-RTO.
  4. תיעוד: מה עבד, מה חסר, מה צריך לשנות בתוכנית.
  5. מחיקת השרת הזמני.

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

מהן הטעויות הנפוצות בגיבוי שרתים?

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

איך מתחילים?

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

שאלות נפוצות

מה זה כלל הגיבוי 3-2-1?
כלל 3-2-1 קובע שצריך לפחות 3 עותקים של המידע (המקור ועוד שני גיבויים), על 2 סוגי אחסון שונים, כשעותק 1 לפחות נמצא מחוץ לאתר. המטרה היא שאף תקלה בודדת - דיסק, שרת, מרכז נתונים או טעות אנוש - לא תמחק את כל העותקים בבת אחת.
האם Snapshot נחשב גיבוי?
Snapshot הוא כלי שחזור מהיר ומצוין, אבל לבדו הוא לא גיבוי מלא: הוא נשמר בדרך כלל באותה תשתית כמו השרת ותלוי בה. אם החשבון נפרץ או שהאחסון נפגע, ה-Snapshot עלול להיפגע יחד איתו. השילוב הנכון הוא Snapshot לשחזור מהיר ועוד גיבוי חיצוני ומבודד.
כל כמה זמן צריך לגבות שרת?
תדירות הגיבוי נגזרת מה-RPO - כמה מידע העסק מוכן לאבד. לאתר תדמית גיבוי יומי מספיק; לחנות מקוונת או למערכת הנהלת חשבונות כדאי לגבות את מסד הנתונים כל שעה או כמה פעמים ביום; ולמערכות קריטיות משלבים שכפול רציף. את הקבצים הסטטיים אפשר לגבות בתדירות נמוכה יותר.
איך גיבוי מגן מפני כופרה?
תוקפי כופרה מנסים קודם כול למחוק או להצפין את הגיבויים. לכן לפחות עותק אחד צריך להיות בלתי ניתן לשינוי (Immutable) או מנותק (Air-gapped), עם פרטי גישה נפרדים מהשרת, כך שגם מי שהשתלט על השרת לא יוכל למחוק אותו. גם שמירת היסטוריה של כמה שבועות חשובה, כי ההדבקה מתגלה לעיתים באיחור.
כל כמה זמן צריך לבדוק שחזור?
מומלץ לבצע בדיקת שחזור של קבצים בודדים לפחות פעם בחודש, ותרגיל שחזור מלא של שרת לפחות פעם ברבעון ובכל שינוי משמעותי במערכת. בדיקה כוללת מדידת זמן השחזור בפועל והשוואה ל-RTO, ולא רק בדיקה שקובץ הגיבוי קיים.