איך לפרוש שרת VPN בלי להשאיר גישה מאחור
צאו מהאפליקציה של הלקוח כלפי חוץ: בטלו מפתחות וחשבונות, סגרו את המאזין, ואז הוכיחו ששום פרופיל, רשומת DNS או גיבוי עדיין לא יכול להגיע אליו.
הלקוח שלכם עדיין מתחבר ביום שבו נפתחת קריאת הפרישה. פרופיל יושב באפליקציה, הוא מנהל משא ומתן, והמנהרה עולה כאילו דבר לא השתנה. זה הרגע לעבוד בכיוון ההפוך מזה שבו בניתם את השירות: התחילו ברשימת הלקוחות, המשיכו החוצה אל המאזין, אחר כך אל חומת האש, וסיימו באישורים שמאריכים ימים מכולם. כיבוי ה-VM הוא הצעד האחרון, לא הראשון. המדריך מניח שיש לכם גישה לקונסולה של המארח והסמכות לערוך רשומות לקוח ו-DNS.
עברו קודם על רשימת הלקוחות
פתחו כל מה שמפיץ את הפרופילים שלכם וקראו את הרשימה לפני שאתם נוגעים בשרת. כל רשומה היא התקן שמאמין שיש לו גישה: טלפונים, מחשבים ניידים, נתב סניף, קונטיינר שמסתנכרן כל לילה. ייצאו את הרשימה הזו אל הקריאה, כי ברגע שהמארח ייעלם לא יהיה wg show שיגיד לכם מי היה מחובר.
מיינו כל התקן לנקודת קצה חלופית, לא נדרש יותר, או לא ידוע. דלי הלא-ידועים הוא החשוב, כי אלה הפרופילים שמישהו ימצא במגירה בעוד חודשים וינסה. שלחו את ההודעה באותו ערוץ שבו אתם משתמשים לבקשות גישה, והכניסו בה תאריך למועד שבו נקודת הקצה הישנה תפסיק להשיב.
בטלו את הזהות, לא רק את הקובץ
שתי פעולות שונות שתיהן נקראות ביטול. ב-WireGuard, עמית מורשה רק לפי המפתח הציבורי שלו שמופיע בקטע עמית עם רשומת AllowedIPs, כך שמחיקת קובץ התצורה מהמחשב הנייד לא משנה דבר בשרת. הסירו את בלוק העמית והחילו את הקובץ מחדש בלי להפיל את העמיתים שאתם משאירים, כפי שמתאר wg(8):
wg show
wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
wg syncconf wg0 <(wg-quick strip wg0)wg syncconf הוא החלק שחוסך לכם חלון תחזוקה. הוא בונה מחדש את הממשק מהקובץ במקום, כך שהסרת עמית אחד אינה מפילה את המנהרה שכולם משתמשים בה. אם אתם פורשים את המארח כולו ולא עמית אחד, הסדר עדיין חשוב, כי באותם מפתחות עשוי להיות אמון במקום אחר.
בהגדרת X.509 שלב הביטול הוא התעודה, לא הקובץ: openssl ca -revoke client.crt ואחר כך openssl ca -gencrl -out crl.pem. זה משפיע רק במקום שבו המאמת קורא אותו, כלומר OpenVPN שרת עם crl-verify מוגדר שנטען מחדש לאחר מכן. אם השער הזה הוא הצרכן היחיד של אותה CA, ה-CRL מפסיק להיות חשוב ביום שבו היא מתה; אם אותה CA חותמת עבור שער שני, תעודה שלא ביטלתם מעולם ממשיכה לעבוד שם.
חשבונות הם המקרה השלישי וזה שמדלגים עליו לרוב. כשהשער אימת מול RADIUS, LDAP או ספק זהות מתארח, החשבון חי מחוץ ל-VPN. השביתו אותו בספרייה. מחיקת בית משתמש בשרת משאירה אישור תקף שנקודת הקצה החלופית תקבל ברגע שהיא תצביע על אותה ספרייה.
סגרו את המאזינים ואת הדרכים אליהם
עצרו את השירות באופן שישרוד אתחול, ואז אמתו עם רשימת שקעים ולא עם מצב היחידה. systemctl disable --now wg-quick@wg0 עוצר את הממשק ומסיר את המסלולים והכללים ש-wg-quick הוסיף; systemctl disable --now openvpn-server@server עושה אותו דבר למופע OpenVPN מבוסס תבנית. עקבו אחרי כל אחד מהם עם ss -lunp ו-ss -ltnp. תוצאה ריקה עבור הפורט הישן היא ההוכחה היחידה שנחשבת.
מה ש-wg-quick הוסיף, wg-quick מסיר. מה שהוספתם ביד נשאר: כלל NAT קבוע, היתר בחומת האש, העברת פורט בנתב, כלל כניסה של קבוצת אבטחה בענן, מאזין של מאזן עומסים. אלה דורשים הסרה מפורשת, וגם רשומת ה-DNS, כלומר ה-A, ה-AAAA וכל CNAME שמצביע לשם. שם שמתורגם למארח מת נכשל אחרת משם שאינו מתורגם, וההבדל הזה יעלה למישהו אחר צהריים.
העותק שאתם שוכחים הוא המשובט. תמונת מצב או VM ששוחזרה מגיבוי עדיין מחזיקה את מפתחות המארח ואת רשימת העמיתים הישנה, ואם משהו מחזיר אותה לאותה כתובת, לקוחות מתחברים מחדש לשירות שאתם חושבים שנפרש. תייגו את ערכת הגיבוי כשייכת לשירות שהוצא מכלל שימוש והרחיקו אותה מנתיבי שחזור אוטומטיים.
רדפו אחרי מה שעדיין מצביע לנקודת הקצה הישנה
פרופילים במטמון מאריכים ימים יותר מ-DNS. תצורה שמורה עם כתובת מספרית ממשיכה לחייג אחרי שהרשומה נעלמה, ולקוח תמיד-פעיל מנסה שוב בכל שינוי רשת. זה רעש ולא גישה, כי המאזין סגור, אבל לדעת על איזה מהשניים אתם מסתכלים קובע איך תענו לקריאה.
אחר כך טאטאו את התלויות שאיש לא מתעד תחת VPN: בדיקות זמן פעילות שממששות את הפורט, משימות גיבוי שמשכו תצורות מהמארח, אישורי אוטומציה ששימשו לדחיפת רשומות עמיתים, חשבונות שחזור שנוצרו רק עבור נקודת הקצה הזו. כל אחת היא נתיב גישה עם אורך חיים משלו ובעלים משלו, ולכן כל אחת מקבלת החלטה במקום מחיקה שקטה.
אמתו, ואז רשמו
הפרישה מסתיימת כשבדיקה מבחוץ נכשלת כפי שאתם מצפים. מרשת שאינכם שולטים בה, התחברו לכתובת ולפורט הישנים. תוצאה מסוננת או נדחית היא מקרה ההצלחה. באפליקציית הלקוח, אשרו שהפרופיל הוסר ולא רק כובה, ושאין פרופיל ניהול שמוסיף אותו מחדש בשקט.
אחר כך תעדו מה עשיתם: נקודת קצה, תאריך, מפתחות ותעודות שבוטלו, חשבונות שהושבתו, היכן הגיבויים נמצאים. מי שימצא תצורה ישנה בהמשך צריך לענות אם היא בוטלה או רק נמחקה, בלי לנחש, וטבלה קצרה בקריאה עושה זאת.
לפני סגירת הקריאה:
- פרופילי לקוח הוסרו או הוחלפו, התקנים לא ידועים הוכרעו
- עמיתים הוסרו והתצורה הוחלה מחדש, או תעודות בוטלו וה-CRL פורסם
- חשבונות ספרייה הושבתו, לא רק קבצים מקומיים נמחקו
- השירות הושבת, לא נותר מאזין בפורט הישן
- חומת אש, העברת פורט, קבוצת אבטחה ורשומות DNS הוסרו
- גיבויים תויגו, תמונת מצב הוצאה מנתיבי שחזור
- אישורי ניטור ואוטומציה נפרשו
אמתו את התחליף בנפרד, מלקוח שמעולם לא החזיק את הפרופיל הישן. הבדיקה האחת הזו אומרת לכם אם פרשתם שירות או רק שיניתם את שם הבעיה.