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

הכירו את השדות לפני שאתם קוראים אותם

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

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

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

שלב ראשון: קראו את המצב, ואז את המדיניות

רשומות המצב מחזיקות את המפתחות ואת המונים; רשומות המדיניות מחזיקות את הבוררים שמחליטים מה רשאי להשתמש בהם. בלינוקס שניהם נראים בלי ללכוד חבילות, וקריאה בסדר הזה משאירה את שתי השאלות נפרדות.

ip xfrm state
ip xfrm policy

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

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

FieldWhere it appearsWhat it decides
Security parameter indexESP header, and the receiving state entryWhich association and keys the receiver applies
Sequence numberESP headerReplay detection for that association
Next headerESP trailerWhat the decapsulated payload contains
Inner IP headerInside tunnel-mode payload onlyThe original source and destination the endpoints act on
Traffic selectorsPolicy, not the packetWhich local traffic is allowed to use the association

כלי היצרנים מדפיסים את אותו מידע בצורה נוחה יותר. ipsec statusall ב-strongSwan הוא מפרט את שיוכי הבן, את הבוררים שלהם ואת מוני הבתים שלהם, ולעיתים קרובות זה מהיר יותר מקריאת פלט xfrm גולמי כשאתם כבר יודעים איזה בן להסתכל עליו.

שלב שני: הוכיחו שזרימה אחת מזיזה את המונים

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

ip -s xfrm state
tcpdump -ni any esp

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

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

שלב שלישי: שנה דבר אחד ושמור על חזרה אחורה

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

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

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

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

מאמרים קשורים