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

למה ההפעלה ששרדה היא הראיה החלשה ביותר

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

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

שלוש דרכי חזרה, מסודרות לפי מה שכל אחת תלויה בו

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

Way back inWhat it survivesWhere it fails
out-of-band or hypervisor consolea policy that blocks new loginsneeds separate access you have already tried
rollback rehearsed on that platforma rule that breaks remote accessfails when nobody ever ran it
the session that is already openthe change itselfcannot show whether new flows work

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

שינוי אחד, ואז חיבור שחייב להיות מוערך

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

nft list ruleset > /root/ruleset.before
nft -c -f /etc/nftables.conf

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

מונה, מצב והקובץ עונים על שאלות שונות

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

ss -tn state established

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

שחזרו ממערכת הכללים השמורה, ואז התאימו את הקובץ

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

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

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