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

מתיבת הייבוא אל ההנחיה

הפרופיל הוא קובץ טקסט עם הנחיות, והלקוח קורא אותן לפני שקיימת מנהרה. הנחיה כמו up, down או tls-verify נוקבת בשם תוכנית חיצונית ש-OpenVPN אמור להריץ ברגע מוגדר. אם OpenVPN מוכן להריץ אותה הוא הגדרה נפרדת בשם script-security, והפרופיל בדרך כלל קובע גם אותה.

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

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

מה כל רמה פותחת בפועל

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

LevelWhat OpenVPN may executeWhat it exposes
0No external programs at allInterface and route setup must not depend on helpers
1 (default)Built-in helpers such as ip, ifconfig, route or netshPrivileged commands the platform already ships
2Built-in helpers plus user-defined scriptsWhatever the named script does with the client's privileges
3Everything above, plus passwords in environment variablesCredentials visible to child processes and their logs

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

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

החליטו מה הפרופיל ראוי לו

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

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

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

grep -nE 'script-security|^up |^down |tls-verify' client.ovpn

שנו דבר אחד, ואז גם צפו בפירוק

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

openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default

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

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

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

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