קובץ ה-.ovpn שלכם יכול להריץ קוד, לא רק לנתב תעבורה
פרופיל שמציין עוזר up או down מריץ קוד בהרשאות שלכם. בדקו את הנתיב, הבעלות, הניקוי ואת הגדרת script-security.
רוב האנשים קוראים קובץ .ovpn כפי שהם קוראים עמוד הגדרות של נתב: כתובות, מסלולים, רשימת צפנים. החלק שמריץ קוד יושב סמוך לתחתית, לצד הנחיות שנראות כמו עבודת אינסטלציה, והוא רץ עם כל הרשאה שכבר יש ללקוח. זהו הפער שמנצל פרופיל רשלני או זדוני, וזהו גם הפער שהופך עוזר DNS מועיל לבעיית תמיכה כעבור שלושה שבועות. הנחיית האירוע, רמת האבטחה והבעלות על הקובץ קובעות מה יכול לקרות; תוכן הסקריפט קובע מה באמת קורה. קראו את כל הארבעה לפני שתתחברו.
פרופיל שמריץ עוזר הוא תוכנית, לא קובץ הגדרות
הנחיות כמו route ו-dhcp-option מתארות מצב שהלקוח אמור להקים, והלקוח מתייחס אליהן כאל נתונים. סקריפט up שונה: הלקוח מפעיל אותו כתהליך ונותן לו סביבה מלאה בפרטי חיבור, כך שכל מה שכתב המחבר שלו רץ עם ההרשאות של החשבון שלכם. במחשב נייד שבו המשתמש הוא מנהל, זהו דלת רחבה לקובץ שהגיע כקובץ מצורף או כהדבקה מתוך שרשור פורום. ההבחנה אינה סגנונית, היא ההבדל בין תצורה לקוד.
המיתוס שראוי לפרוש: פרופיל יכול רק לנתב מחדש תעבורה. עוזר שמריץ ip route add וזה שמריץ curl נגד מארח מרוחק הם אותו מנגנון, והפרופיל נראה זהה מבחוץ. שום דבר במראה הקובץ לא אומר לכם איזה מהם יש לכם, ולכן הבדיקה חייבת להגיע לסקריפט עצמו.
מה באמת קובע את ההרצה, ואיך נראות השורות שמאפשרות אותה
שלושה דברים שולטים בעוזר: הנחיית האירוע שמעניקה לו שם, רמת script-security שמתירה אותו, והמימוש של פלטפורמת הלקוח עצמה. פרופיל יכול לבקש וו ועדיין לא לראות דבר קורה, כי לקוח נייד או בניין שולחני מצומצם אולי כלל לא מממש את האירוע הזה. באותה מידה, פרופיל שמבקש הרשאה גדולה מזו שתפקידו דורש מספר לכם משהו על מקורו. רמת הרשאה היא יכולת, לא אישור. השורות שמאפשרות אותה נראות כך, עם נתיב שעומד במקום שלכם.
script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.shרמה 0 דוחה תוכניות חיצוניות ורמה 1, ברירת המחדל, מתירה רק את הקבצים ההרצים המובנים של הלקוח, ולכן וו זקוק ל-2 ומעלה; רמה 3 קיימת בעיקר להעברת סיסמאות ישנות וכדאי להימנע ממנה. פרופיל שמסופק עם וו זקוק גם להנחיה וגם לרמה הזו, ולכן שורה אחת סמוך לתחתית הקובץ ראויה לאותה בחינה כמו בלוק התעודה. מדריך OpenVPN מפרט את רמות ההרשאה, ונוסחו ראוי לקריאה לצד מה שהפרופיל באמת מבקש.
בעלות, נתיב ומה מאכילים את העוזר
פרופיל שאתם סומכים עליו אך מצביע על סקריפט שחשבון אחר יכול לכתוב מחדש אינו הסדר מהימן, כי הבדיקה של אתמול כבר לא מתארת מה רץ היום. בדקו את הבעלים והמצב של העוזר, ובדקו שהנתיב המוגדר מגיע לקובץ שבדקתם ולא לשם שמשהו אחר יכול להאפיל עליו. ארגומנטים וסביבה ראויים לאותו מבט: הלקוח מעביר פרטי חיבור לוו, ועוזר שמתעד את כל הסביבה שלו עשוי לכתוב אישורי גישה לכרטיס תמיכה. העדיפו אינטגרציה מתועדת מהמפעיל או מהפלטפורמה על פני סקריפט DNS שהועתק מפוסט לא קשור, כי שני מנהלי פותר שמתווכחים על אותו קובץ יוצרים כשל שנראה כמו VPN שבור.
כשאתם מדווחים על וו שנכשל, הסירו את פרטי הסביבה לפני שאתם מדביקים אותו במקום כלשהו. הדאמפ שעוזר לכם לנפות תקלות עשוי לשאת גם את האסימון שמאמת אתכם.
כשלי ניקוי מופיעים אחרי שהמנהרה נעלמה
עוזר up מוסיף מסלולים והגדרות פותר, ועוזר down אמור להסיר אותם שוב. כשהוו down חסר, נכשל בשקט או לא רץ מעולם כי הלקוח נהרג, השאריות שורדות את החיבור. אז התעבורה עוברת בנתיב שאיש לא תכנן והשמות נפתרים דרך פותר שהיה צריך להיות מוסר, בעוד המנהרה עצמה נראית בריאה. התסמינים האלה מגיעים אחרי הניתוק, ולכן מאשימים את הרשת ולא את הפרופיל.
בדקו את הפירוק כשלב בפני עצמו: העלו את המנהרה, רשמו את המסלולים ואת הפותר, הורידו אותה, ואז אשרו ששניהם נעלמו. פרופיל שמתחבר נקי יכול עדיין להשאיר מצב מאחור, וקוד יציאה אפס של העוזר לא מוכיח שהפותר הגיע לאן שאתם חושבים.
סקירת העוזר ושמירת מוצא
קראו את הסקריפט מתחילתו ועד סופו בחיפוש אחר שלושה דברים: פקודות שדורשות הרשאה, נתיבים מקודדים קשות שאולי אינם קיימים במערכת שלכם, וכל קריאת רשת שהוא מבצע. אחר כך ראו איך הוא נכשל, כי עוזר שבולע שגיאות הופך טעות תצורה לתעלומה. אם אינכם יכולים לומר במשפט אחד מה הסקריפט עושה ומי יכול לשנות אותו, אינכם מוכנים להפעיל אותו. פרופיל שמבקש יותר הרשאה מזו שהמשפט דורש הוא הסימן לעצור.
שמרו את הפרופיל האחרון שעבד ואת העוזר שאליו הוא הפנה באחסון מוגן, עם שתי הגרסאות מתועדות, כדי שהחזרה לאחור תהיה העתקה ולא בנייה מחדש ברגע הגרוע ביותר. אם העוזר קיים רק להפצה או לגרסת לקוח שכבר אינה זקוקה לו, הוציאו אותו לגמלאות בתצורה שמחזיקה בהגדרה במקום להעלות הרשאות עד שהשגיאות ייפסקו. זהו המוצא: פחות חלקים נעים, לא יותר הרשאה.