چرا OpenVPN پس از ارتقای Ubuntu از اتصال بازماند؟
Ubuntu 22.04 و 22.10 سیاست OpenSSL، مذاکرهٔ پیشفرض رمزنگاری و پیشفرضهای بسته را تغییر دادند. پیش از ویرایش پروفایل، مرحلهٔ شکستخورده را بخوانید.
پروفایلهای VPN که هفتهٔ گذشته کار میکردند، پس از ارتقای نسخهٔ Ubuntu خراب میشوند و گزارش بهندرت حتی به ارتقا اشاره میکند. آنچه نام میبرد لایهای است که شکست خورده: دستدهی TLS، رمزنگاری مذاکرهشده برای کانال داده، بستهٔ نصبشده، یا نسخهٔ OpenSSL که فایل اجرایی هنگام راهاندازی بار میکند. هر لایه شکل خطای خود و تعمیر خود را دارد، و همین طبقهبندی را کار اول و ویرایش را کار دوم میکند. تا وقتی گزارش نامش را نبرده، پروفایل را بیگناه بدانید.
کدام لایه شکست خورد: دستدهی، رمزنگاری، بسته یا کتابخانه
پیش از دست زدن به پروفایل، گزارش کارخواه را بخوانید. نخستین خطای خروجی همان است که لایه را مشخص میکند؛ هر چیزی که پس از آن چاپ شود معمولاً پیامد همان شکست اول است. وقتی کارخواه اصلاً شروع نمیشود، گزارش VPN فایل اشتباهی برای باز کردن است.
شکایت دربارهٔ گواهیها و امضاها، یا پیامی دربارهٔ طول کلید، از کانال کنترل و سیاست کتابخانهای میآید که آن را اداره میکند. اما هشداری که با DEPRECATED OPTION آغاز شود، به مذاکرهٔ کانال داده تعلق دارد.
خطی به شکل Unrecognized option دستهٔ سوم است: فایل اجرایی جدید دیگر دستوری را نمیپذیرد که قدیمی تحمل میکرد، پس باید پروفایل بازنویسی شود نه اینکه کتابخانه شل شود. شکستهای بسته دوباره متفاوت به نظر میرسند چون پیش از اجرای هر کد تونل رخ میدهند. فایل اجرایی غایب، افزونهای که بار نمیشود، یا مخزنی که به نام رمز نادرست اشاره میکند همگی این شکل را تولید میکنند. چهار نشانه، چهار جای نگاه کردن، و تقریباً هیچ همپوشانی میان تعمیرها.
وقتی دستدهی شکست میخورد، سیاست TLS گواهی را رد میکند
Ubuntu 22.04 سامانه را به OpenSSL 3 منتقل کرد، و سطح امنیت پیشفرض در آن شاخه دربارهٔ امضای گواهیها و اندازهٔ کلیدها سختگیرتر از 20.04 است. گواهی CA که با خلاصهٔ قدیمیتر امضا شده، یا کلیدی زیر آستانهٔ کنونی، اکنون هنگام دستدهی شکست میخورد. چون هنوز چیزی احراز هویت نشده، خطا مانند گذرواژهٔ نادرست یا سرور مرده خوانده میشود.
تعمیر باریک یک رشتهٔ رمزنگاری فقط به این اتصال میچسباند. در ویرایشگر رومیزی پروفایل را باز کنید، به تنظیمات پیشرفته بروید و DEFAULT:@SECLEVEL=0 را در میدان رمزنگاری TLS بگذارید. فایل کلید NetworkManager همان مقدار را زیر [vpn] میگیرد:
[vpn]
tls-cipher=DEFAULT:@SECLEVEL=0NetworkManager را دوباره راهاندازی کنید و از نو متصل شوید، چون سرویس پروفایلهای تجزیهشده را در حافظهٔ نهان نگه میدارد و در غیر این صورت همان نسخهای را که دارد به کار میبرد. پیش از نگه داشتن خط بدانید چه میکند: آن تنظیم آستانهای بر چند پارامتر گواهی و کلید است نه نام رمزنگاری، پس پایین آوردنش دامنهٔ پذیرش همان پروفایل را گسترده میکند. بنویسید کدام سرور آن را لازم داشت و وقتی بهرهبردار مادهٔ بهروز را دوباره صادر کرد تنظیم را بردارید. اما تغییر /etc/ssl/openssl.cnf همان آستانه را برای هر برنامهای که آن فایل را میخواند فراهم میکند، که بسیار فراتر از VPN است.
OpenVPN 2.6 میخواهد رمزنگاری برای مذاکره فهرست شود
Ubuntu 22.10 نسخهٔ OpenVPN 2.6 را آورد، و در آن نسخه --cipher دیگر خودش کانال داده را انتخاب نمیکند. رمزنگاری باید در فهرست data-ciphers مذاکرهشده هم حاضر باشد، وگرنه کارخواه هشدار منسوخشدن چاپ میکند و سپس نمیتواند تونل را بالا بیاورد.
افزونهٔ NetworkManager از همان دوره هنوز فقط دستور قدیمی را مینوشت. این جزئیات تشخیص را تقسیم میکند، چون پروفایلی که با دست اصلاح شده میتواند از پوسته متصل شود و همچنان از برنامهٔ رومیزی شکست بخورد. فهرست را در فایل اتصال زیر [vpn] بیفزایید:
data-ciphers=AES-256-CBCمقداری را به کار ببرید که سرور اعلام میکند نه آنچه به یاد دارید؛ سروری که AES-256-GCM پیشنهاد میدهد با فهرست کارخواهی که فقط CBC را نام میبرد مذاکره نمیکند. مدیر را دوباره راهاندازی کنید و از نو متصل شوید، سپس کوشش را از پوسته تکرار کنید و رمزنگاری را صریحاً هم برای مذاکره و هم برای جانشین بدهید:
sudo openvpn --config client.ovpn --data-ciphers AES-256-CBC --data-ciphers-fallback AES-256-CBCاگر آن فرمان تونل را بالا بیاورد، سرور، گواهیها و اعتبارنامهها همه سالماند و تنها عیب باقیمانده گزینهٔ ذخیرهشدهٔ مدیر است. هشدار دربارهٔ دستور keysize به همان پاکسازی تعلق دارد: آن را به صورت توضیح بگذارید و فایل اصلی را کنار پروفایل نگه دارید.
عیبهای بسته و افزونه شبیه عیبهای VPN به نظر میرسند
هر شکست پس از ارتقا رمزنگارینیست. مخزن OpenVPN که زیر نام رمزی افزوده شده که نسخه از آن استفاده نمیکند بستهای میسازد که هرگز نصب نمیشود، پس آنچه lsb_release -a گزارش میکند با فایل فهرستی که افزودهاید مقایسه کنید. جزء universe غایب یا جیب امنیتی بستهای میسازد که اصلاً یافت نمیشود. هر دو حالت پروفایل را دستنخورده و تونل را ناممکن میگذارند.
پیش از گزارش VPN، خطای مدیر بسته را بخوانید. اگر کارخواه هرگز نصب نشده باشد، هیچ مقدار ویرایش پروفایل دستدهی تولید نمیکند.
پروفایلهای دوعاملی که دیگر نمیپرسند نسخهٔ افزونهای همین داستاناند. چالش از افزونهٔ احراز هویت میآید و ارتقایی که آن را حذف یا جایگزین کرده پروفایل را سالم میگذارد در حالی که اعلان ناپدید میشود. افزونهٔ پشتیبانیشده را دوباره نصب کنید بهجای حذف عامل دوم برای کارکردن اتصال.
کتابخانهٔ فروشنده میتواند پشت خطای سیاست پنهان شود
یک الگو شایستهٔ شناختن است چون هر تعمیر سیاستی را شکست میدهد. ابزار پیکربندی فروشندهٔ سختافزار میتواند کتابخانههای OpenSSL خود را نصب کند و آنها را در مسیر جستجوی بارگذار پیش از نسخههای سامانه بگذارد. آنگاه کارخواه در برابر کتابخانهای شروع میکند که هیچکس ارتقایش نداده و شکست راهاندازی دقیقاً مانند گواهی ردشده به نظر میرسد.
نصب دوبارهٔ بستهٔ VPN تغییر نمیدهد کدام کتابخانه اول یافت میشود، و پایین آوردن سطح TLS به کتابخانهای نمیرسد که هرگز از سامانه نیامده است. از بارگذار بپرسید فایل اجرایی واقعاً کدام اشیای رمزنگاری را حل میکند:
ldd /usr/sbin/openvpn | grep -i -E 'ssl|crypto'نسخهٔ فروشنده را بردارید یا مسیرش را عوض کنید، سپس همان بررسی را دوباره اجرا کنید. نسخهٔ مورد انتظار باید همان باشد که در حال استفاده است، پیش از آنکه به پروفایل برگردید.
سنجاق کردن کارخواه قدیمی زمان میخرد، نه راهحل
نگه داشتن نسخهٔ پیشین کارخواه تا زمانی که نگهداشت ادامه دارد تونل را برمیگرداند. همچنین بهروزرسانیهای امنیتی آن بسته را منجمد میکند و همان شکست را برای ارتقای بعدی برنامهریزی میکند، پس آن را راهحلی موقت و تاریخدار بدانید نه حل مسئله.
اگر باز هم سنجاقش کردید، بسته را صریحاً نگه دارید تا ارتقای بینظارت نتواند سنجاق را باطل کند، دلیل و تاریخ بازبینی را بنویسید و برای انتشار بعدی پروفایل از سوی فراهمکننده یادآور بگذارید. شرطی که ارزش پایش دارد پروفایل سروری است که رمزنگاری روزآمد را مذاکره میکند؛ همین که چنین چیزی باشد، سنجاق دیگر هیچ توجیهی ندارد. در مقابل، سنجاق ثبتنشده به قطعی تبدیل میشود که شش ماه بعد هیچکس نمیتواند توضیحش دهد، چون کسی که آن را اعمال کرده رفته است و فایل چیزی ثبت نمیکند.
دفعهٔ بعد که VPN پس از ارتقای نسخه میمیرد، پنج پرسش را به ترتیب بپرسید: کدام لایه خطای اول را تولید کرد، آیا سیاست TLS گواهی را رد کرد، آیا رمزنگاری در هر دو جهت قابل مذاکره است، آیا بسته و افزونهاش واقعاً نصب شدند، و فرایند کدام کتابخانه را بار میکند. تنها وقتی هر پنج پرسش پاک برگردند، تنزل نسخه معنا دارد.