פרופילי חומת אש מול יציאת VPN: למה ציבורי אינו נתיב
פרופיל חומת אש בוחר איזו קבוצת כללים חלה. הוא אינו אומר דבר על איזה ממשק נשא את החבילה, וחסימה מפורשת גוברת על הרשאה צרה יותר.
הכלל נשמע מדויק: לאפשר תעבורה מקומית בפרופיל הפרטי ורק תעבורת VPN בציבורי. הוא אינו, מפני שפרופיל רשת בוחר איזו קבוצת כללים של חומת אש חלה ואינו אומר דבר על איזה מתאם נשא חבילה. התייחסות לשם הפרופיל כדרישת נתיב היא הטעות שגורמת לעיצוב יציאה מוגבלת להיראות גמור כשהוא אינו.
כתבו תחילה את הזרימות, ואחר כך החליטו איזה מנגנון יכול באמת לאכוף כל אחת מהן. רשימת הזרימות הזו היא החפץ היחיד ששורד את שינוי הכללים הבא.
הקטגוריה בוחרת כללים, לא נתיבים
כאשר Windows מסווג רשת כציבורית או פרטית, חומת האש מחילה את קבוצת הכללים שהוגדרה עבור אותו פרופיל. הסיווג עוקב אחר הרשת שאליה הצטרף המתאם, וקבוצת הכללים קובעת מה מותר בה. אף אחת מהעובדות הללו אינה תלויה בשאלה אם התעבורה של יישום השתמשה במנהרה. העצמאות הזו היא כל הקושי.
את בחירת הנתיב עושה הניתוב, דרך מדד הממשק והקידומת שהמנהרה מתקינה. פרופיל יכול אפוא להיות מתויג כציבורי בזמן שהחיבור של יישום הולך בנתיב הפיזי, וחומת האש עדיין תדווח שהוחלה קבוצת הכללים הציבורית.
לכן כלל שמוגבל לפרופיל אינו יכול לומר מנהרה בלבד. שתי התכונות נקבעות בידי רכיבים שונים ואחת אינה יכולה להחליף את האחרת.
| Flow | What decides it | What a rule can enforce |
|---|---|---|
| VPN client to its endpoint | Routing plus the outer transport | Allow the client process before the tunnel exists |
| Application to an internet host | Interface metric and prefix length | Block the process unless the tunnel interface is up |
| Application to a LAN host | Local subnet route | Allow one destination, not the whole category |
חסימה מפורשת גוברת על הרשאה צרה יותר
ההנחיות של Microsoft לכללי חומת אש מבדילות בין הרשאה כחריגה מפעולת חסימה ברירת מחדל לבין חסימה מפורשת שמתנגשת בהרשאה. חסימות מפורשות מנצחות את ההתנגשות הזו, וכללי יציאה מצייתים לאותה קדימות.
לכן המתכון הפופולרי להוסיף כלל שחוסם הכול ולהסתמך על הרשאה צרה יותר שממוקמת מעליו אינו עושה את מה שהמחבר שלו מצפה. חומת האש של Windows אינה פותרת את ההתנגשות לפי סדר הכללים שהוקצה בידי המנהל. החסימה פשוט חלה, והיישום המתחבר מדווח על פסק זמן. הכלל שנראה כמו החריגה מעולם לא היה במשחק.
הצורה הנתמכת היא מדיניות דחייה כברירת מחדל עם כללי הרשאה מאושרים, שבה כל הרשאה מציינת תוכנית, שירות או יעד בדיוק מספיק כדי שניתן יהיה לבדוק אותה. עיצוב כזה שורד ביקורת, מפני שכל חריגה גלויה ואף אחת מהן אינה תלויה בסדר שבו נוצרה.
שני כללים שסותרים זה את זה גרועים מכלל אחד, מפני שההתנהגות הנובעת מהם נכונה ובלתי מוסברת בו זמנית.
תנו למדיניות היציאה בעלים אחד
לקוח VPN נתמך כבר מתחזק התנהגות חסימה משלו וחריגות נקודת קצה משלו. הוספת כללים ידניים לא מתואמים עלולה להשאיר את הלקוח הזה מחוץ למנהרה שהוא צריך להגדרה, או להשאיר נתיב שני פתוח שאיש לא שם לב אליו.
החליטו מי הבעלים של מדיניות היציאה לפני שכותבים כללים: התצורה של הלקוח עצמו, מדיניות חומת אש מנוהלת, או רשימת חריגות מקומית מתועדת עם בעלים. אחר כך יישרו את השכבות במקום לערום ניסויים עד שמשהו מתחבר. בעלים בשם הוא גם מי ששואלים כאשר שתי שכבות אינן מסכימות.
שמרו ערוץ התאוששות לפני שמשנים משהו. מכונה מרוחקת שננעלה מחוץ לנתיב הניהול של עצמה היא תוצאה גרועה יותר מהפער במדיניות שסגרתם. קל יותר להצדיק את כלל ההתאוששות כשהוא כתוב מראש, וקל יותר למצוא אותו כששינוי משתבש בשעה שאיש אינו נהנה ממנה.
בדקו ארבע תוצאות במקום לקרוא את התווית
מדיניות טובה כמו המקרים שהיא מבחינה ביניהם, אז התייחסו לתווית הפרופיל כנקודת מוצא ולא כתוצאה. ארבע תוצאות אומרות לכם אם היא עובדת: בקשת ה-LAN המיועדת מצליחה, בקשת אינטרנט מכוסה מצליחה, בקשה ישירה אסורה נכשלת, ומקרה כשל המנהרה מתנהג כמתוכנן במקום לסגת בשקט. רשמו את ארבע התוצאות לצד שינוי הכללים. תוכנית בדיקה עם ארבעה מקרים בשמות קצרה מספיק כדי לרוץ בכל פעם וספציפית מספיק כדי להיכשל בקול.
Get-NetConnectionProfile | Select-Object Name,NetworkCategory,InterfaceAlias Get-NetFirewallProfile | Select-Object Name,DefaultOutboundAction Get-NetFirewallRule -Direction Outbound -Enabled True | Where-Object Action -eq Block | Select-Object DisplayName,Profile
הפקודה הראשונה מראה כיצד מסווגת כל רשת מחוברת, וזה לעתים קרובות לא מה שהניח האדם שכתב את הכלל. השנייה מראה את הפעולה המוגדרת כברירת מחדל לכל פרופיל, והשלישית מפרטת חסימות יציאה מופעלות, כולל כאלה שיעקפו בשקט הרשאה צרה יותר.
הריצו שוב את ארבעת המקרים לאחר שינוי ברשת, מפני שפרופיל יכול לסווג מחדש כשהמכונה מצטרפת לרשת אחרת. תווית פרופיל תואמת אינה הוכחה שהנתיב היה זה שהתכוונתם אליו.