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

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

מה הסורק יכול לראות ומה לא

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

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

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

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

עבור דרך הלקוח האמיתי מהפרופיל פנימה

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

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

wg show wg0 latest-handshakes
tcpdump -n -i eth0 udp port 51820 -c 10

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

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

קשר בשרת כשאתה מנהל אותו

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

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

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

לקרוא תוצאת סריקה ביושר

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

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

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

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