بیرون کردن یک کلاینت OpenVPN: kill، deny یا ابطال گواهی؟
سه اقدام OpenVPN کلاینت را حذف میکند، اما هر یک چیز دیگری را پایان میدهد: نشست زنده، یک تلاش ورود، یا حق اتصال دوباره. بر اساس هویت انتخاب کنید.
در یادداشتهایتان یک common name و یک نشانی دارید، و سه فرمانی که همه به نظر میرسد کلاینت را حذف میکنند. تنها یکی کاری را میکند که میخواهید، و انتخاب بستگی دارد به اینکه باید نشستی را که همین حالا اجرا میشود پایان دهید، ورود بعدی را رد کنید، یا حق اتصال را بهکلی بگیرید. پیش از دست زدن به هر چیزی، هویتی را که واقعاً دارید بخوانید، زیرا استخر OpenVPN بعداً همان نشانی تونل را به نشست دیگری میدهد.
واقعاً چه هویتی دارید
فایل وضعیت نسخهٔ 3 نقطهٔ شروع معمول است. بخش CLIENT_LIST شامل common name، نشانی واقعی، شمارندههای بایت و زمان اتصال است؛ بخش ROUTING TABLE نشانی مجازی را با common name و برچسب زمان آخرین ارجاع نگاشت میکند. common name همان هویت پایدار است. نشانی مجازی یک تخصیص است، و نشانی واقعی پشت NAT میتواند بین نشستها تغییر کند بیآنکه چیزی روی سرور تغییر کند.
رابط مدیریت نمای مشابهی را از طریق فرمان status نشان میدهد و برای هر نشست یک شناسهٔ کلاینت میافزاید. client-kill دقیقاً همان شناسه را انتظار دارد، و آن نشانی تونل نیست. اگر باید بدانید کدام common name در لحظهٔ اتصال کدام نشانی را گرفت، محیط اسکریپت client-connect هر دو را همراه با نشانی بیرونی مورد اعتماد دارد، اما آن اسکریپت با کاربر OpenVPN اجرا میشود و به مسیر گزارش قابل نوشتن نیاز دارد.
| What you hold | Where it came from | What it can act on |
|---|---|---|
| Common name | CLIENT_LIST, or the auth hook | kill, and credential revocation |
| Client ID | status on the management socket | client-kill, that one session |
| Tunnel address | ROUTING TABLE, client-connect environment | Nothing durable, the address is recycled |
همین حالا بکش، هنگام ورود رد کن، برای همیشه باطل کن
هر دو فرمان حذف در رابط مدیریت اقدامهای نشست هستند. kill یک common name یا نشانی واقعی و پورت میگیرد؛ client-kill شناسهٔ کلاینت را میگیرد و فوراً آن نمونه را پایان میدهد. هیچکدام مسدودسازی نیست: کلاینت اخراجشده با گواهی و گذرواژهٔ معتبر در چند ثانیه دوباره وصل میشود، که هنگام استفادهٔ دوباره از peer آزمایشی خوب است و وقتی لپتاپ دزدیده شده بیفایده.
client-deny تصمیمی از نوع دیگر است. معمولاً از قلاب احراز هویت یا client-connect صادر میشود و نشست را با دلیل رد میکند، پس به سیاستی میخورد که ورود را رد میکند نه سیاستی که اتصال را قطع میکند. مستندات همچنین هشدار میدهد که رد صادرشده در زمان مذاکرهٔ مجدد TLS کلید مذاکرهشده را باطل میکند در حالی که نشست موجود میتواند تا بسته شدن پنجرهٔ گذار ادامه یابد. اگر شرط این است که کلاینت همین حالا رفته باشد، پاسخ مستند client-kill است.
حذف پایدار زیر همهٔ اینهاست. گواهی را باطل کنید و مطمئن شوید crl-verify به فهرستی اشاره میکند که سرور واقعاً دوباره بارگذاری میکند، فایل پیکربندی مخصوص کلاینت را در پوشهٔ ccd غیرفعال کنید، یا حساب را در همان backendی که قلاب احراز هویت میپرسد غیرفعال کنید. ابطال هم فوری نیست: با تنظیمات پیشفرض reneg-sec یک نشست برقرار میتواند تا مذاکرهٔ مجدد ادامه یابد، بنابراین اقدام نشست و اقدام اعتبارنامه مکمل یکدیگرند، نه جایگزین.
آیا سوکت مدیریت آزاد است؟
رابط مدیریت هر بار به یک کلاینت خدمت میدهد. اگر رابط گرافیکی یا دیمن پایش از قبل اتصال را در دست دارد، اسکریپت شما نمیتواند کنارش متصل شود، و بسته به کلاینت ممکن است کلاینت موجود را بیرون بیندازید نه اینکه تمیز شکست بخورید. گذرواژهاش بهصورت متن روشن روی آن سوکت سفر میکند، پس جای آن نشانی محلی یا سوکت unix است، هرگز رابط عمومی.
وقتی نمیتوانید سوکت را بگیرید، هنوز گزینههایی دارید و همه کندترند. ابتدا نشست رابط گرافیکی را رها کنید اگر کنترلش میکنید، یا مسیر لایهٔ اعتبارنامه را بپذیرید و منتظر مذاکرهٔ مجدد بعدی بمانید. کاری که نباید بکنید راهاندازی دوبارهٔ سرویس برای خلاص شدن از یک کلاینت است، چون آن همهٔ نشستهای دیگر را هم پایان میدهد و شواهد فایل وضعیت این نشست را نابود میکند.
ترتیبی که روی سرور زنده اجرا میکنم
وصل شوید، وضعیت فعلی را بخوانید، بر اساس شناسهای که همین حالا خواندید عمل کنید، سپس دوباره بخوانید. مقادیری که از یک سند کپی شدهاند رایجترین راه کشتن آدم اشتباهی هستند.
status # note the client ID and common name
client-kill 3 # end that session now
kill Test-Client # alternative: by common name
status # confirm the session is goneنام و شمارهٔ بالا جاینگهدارند، و شناسهها پس از قطع شدن کلاینتهای دیگر دوباره استفاده میشوند. پیش از آنکه چیزی را انجامشده بنویسید تأیید کنید که سطر وجود ندارد، و بررسی کنید که تعداد کلاینتهای متصل یک واحد جابهجا شده باشد نه چند واحد.
تأیید کنید که بیرون مانده است
common name، نشانی تونل، نشانی بیرونی و دقیقهٔ حذف را ثبت کنید. اگر همان common name یک دقیقه بعد دوباره ظاهر شود، اقدام نشست کار کرده و لایهٔ اعتبارنامه نه، که تعمیری کاملاً متفاوت از فرمانی است که هرگز به اجرا درنیامد.
سپس از سمت کلاینت آزمایش کنید. گواهی باطلشده باید در دستدادن بعدی شکست بخورد؛ اگر هنوز وصل میشود، CRL اصلاً خوانده نمیشود، و این همان یافتهای است که ارزش گزارش دارد. اقدام را بر اساس آنچه باید پایان دهید انتخاب کنید، با status دوم تأیید کنید، و وقتی پاسخ باید بیشتر از نشست دوام بیاورد لایهٔ اعتبارنامه را درست کنید.