چگونه یک سرور 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 حذف شده
- پشتیبانها برچسب خورده، عکس لحظهای از مسیرهای بازیابی حذف شده
- اعتبارنامههای پایش و خودکارسازی بازنشسته شده
جانشین را جداگانه تأیید کنید، از کلاینتی که هرگز پروفایل قدیمی را نداشت. همان یک آزمون میگوید سرویسی را بازنشسته کردید یا فقط مشکل را تغییر نام دادید.