خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

بالاخره با یک فرمان تیل‌اسکیل، از شر همهٔ هشدارهای گواهی خودامضا در خانه خلاص شدم

سرانجام با یک فرمان Tailscale از همهٔ هشدارهای گواهی خودامضا در خانه خلاص شدم
اکنون داشبوردهای خصوصی‌ام، بی‌آن‌که مرجع صدور گواهی راه بیندازم یا آن‌ها را در معرض اینترنت عمومی بگذارم، از HTTPS معتبر بهره می‌برند.

کارگزار «هوم آپس» من از پیش مدیریت پرونده‌ها، کانتینرها، پایش و خودکارسازی‌های خانهٔ هوشمند را بر عهده داشت؛ پس به آن اعتماد داشتم. اما مرورگرم چندان قانع نشده بود. سرویس کوک‌پیت با هشدار تمام‌صفحه‌ای دربارهٔ گواهی به استقبالم می‌آمد، در حالی که هومار، پورتینر، آپ‌تایم کوما و رابط‌های دیگر همچنان به HTTP قدیمی و معمولی تکیه داشتند.

می‌توانستم یک مرجع صدور گواهی خصوصی بسازم و همه‌چیز را خودم امضا کنم. همچنین می‌توانستم گواهی ریشهٔ آن را روی تک‌تک کارگزارها، رایانه‌ها و تلفن‌های شبکه‌ام وارد کنم. اما این کار، حتی برای من هم، برای یک آزمایشگاه خانگی کمی افراطی بود.

تیل‌اسکیل سِرو راه‌حلی بسیار کوچک‌تر پیش پایم گذاشت. یک فرمان به داشبوردها و سرویس‌هایم نشانی HTTPS خصوصی و معتبری داد و با اندکی تغییر، کوک‌پیت هم دیگر مرورگرم را نمی‌ترساند.

کارگزار خانگی‌ام همه‌جور اعتراض امنیتی مرورگر را برمی‌انگیخت

یک رابط از گواهی خودامضا استفاده می‌کرد و بیشتر بقیه، HTTPS را یکسره کنار گذاشته بودند

کارگزار لینوکسی «هوم آپس» من در نشانی ۱۹۲.۱۶۸.۹۱.۱۳۱ سرویس‌هایی بسیار بیشتر از آنچه به یاد داشتم نصب‌شده داشت. اجرای `sudo ss -tulpn` خیلی زود حافظه‌ام را تازه کرد:

  • داشبورد هومار روی درگاه ۷۵۷۵.
  • کوک‌پیت روی درگاه ۹۰۹۰.
  • پورتینر روی درگاه ۹۰۰۰.
  • آپ‌تایم کوما روی درگاه ۳۰۰۱.
  • مرورگر پرونده روی درگاه ۰۸۰۱.
  • چند صفحهٔ سفارشی اِن‌جین‌اکس روی درگاه‌های ۸۰۹۰ تا ۸۰۹۹.

بیشتر این‌ها فقط از HTTP استفاده می‌کردند. هشدار تمام‌صفحهٔ گواهی خودامضا را در مرورگرم برنمی‌انگیختند، اما مرورگر همچنان نمی‌توانست ورودها و نشست‌هایشان را امن بداند. با این حال، کوک‌پیت واقعاً همان هشدار گواهی را نشان می‌داد.

برای دریافت اطلاعات بیشتر دربارهٔ هشدار، گواهی کوک‌پیت را مستقیم بررسی کردم:

openssl s_client \
-connect 127.0.0.1:9090 \
-servername home-ops.home </dev/null 2>/dev/null |
openssl x509 -noout -subject -issuer -dates -ext subjectAltName

موضوع و صادرکنندهٔ آن هر دو `home-ops` بودند؛ چیزی که تأیید می‌کرد کوک‌پیت صرفاً گواهی خودش را امضا کرده است. افزونهٔ نام جایگزین نیز فقط `localhost` و `۱۲۷.۰.۰.۱` را پوشش می‌داد. بنابراین، دسترسی به ۱۹۲.۱۶۸.۹۱.۱۳۱ از دو جهت شکست خورده بود: مرورگرم به صادرکننده اعتماد نداشت و گواهی حتی نشانی‌ای را که وارد کرده بودم پوشش نمی‌داد.

یک‌بار عبور کردن از هشدار قابل‌تحمل بود. اما با وجود همهٔ زحمتی که از ابتدا برای برپا کردن این سرویس‌ها کشیده بودم، تکرار این تشریفات در هر دستگاه و هر مرورگر، حس ناتمام‌بودن کل کار را به من می‌داد.

مطلب مرتبط:   7 برنامه افزودنی کروم برای پیام‌رسانی و الگوهای ایمیل

تیل‌اسکیل یک درگاه محلی را به وب‌سایتی با HTTPS معتبر بدل کرد

سِرو، نام میزبان، گواهی، پراکسی معکوس و تمدید را یک‌جا مدیریت کرد

نصب و اجرای Tailscale و افزودن دستگاه از راه نشانی وب

پنهان نیست که تیل‌اسکیل را دوست دارم و چون پیش‌تر آن را برای بیدار کردن رایانه‌هایم از راه دور پیکربندی کرده بودم، برای حل مشکل گواهی‌ام گزینه‌ای ایدئال بود. تیل‌اسکیل از پیش برای رمزگذاری رفت‌وآمد داده میان دستگاه‌ها و تیل‌نت من، از وایرگارد بهره می‌گرفت. این کار اتصال زیربنایی را فراهم می‌کرد، اما مرورگرم آن را نمی‌دید. مرورگر همچنان یک نشانی HTTPS و گواهی‌ای از مرجع مورداعتمادش می‌خواست.

مجیک‌دی‌اِن‌اِس تیل‌اسکیل برای کارگزار «هوم آپس» من یک نام خصوصی پایدار فراهم کرد:

home-ops.tailfaeb31.ts.net

پسوند ناشناس تیل‌نت و نام خنثیِ ماشین `home-ops` اهمیت داشتند؛ زیرا حتی وقتی ماشین‌ها دسترس‌ناپذیرند، گزارش‌های شفافیت گواهی همچنان نام‌های میزبان گواهی را ثبت می‌کنند. در این چیدمان، هیچ‌یک از این دو بخش هویت من، حساب کاربری‌ام یا محل سکونتم را آشکار نمی‌کرد.

با نصب بودن تیل‌اسکیل روی کارگزار، این فرمان را اجرا کردم:

sudo tailscale serve --bg 7575

سِرو برای نام میزبان کامل `.ts.net` یک گواهی معتبر لِتس‌اِنکریپت درخواست کرد. همچنین در شبکهٔ تیل‌نت من روی درگاه HTTPS ۴۴۲ گوش می‌داد و درخواست‌ها را به داشبورد هومارم در `۱۲۷.۰.۰.۱:۷۵۷۵` می‌فرستاد. گزینهٔ `–bg` باعث می‌شد پراکسی پس از بستن پایانه همچنان فعال بماند و با راه‌اندازی دوبارهٔ کارگزار نیز از سر گرفته شود.

برخلاف صدور پرونده‌های گواهی با `tailscale cert`، سِرو می‌دانست گواهی باید کجا قرار بگیرد و حتی می‌توانست آن را خودکار تمدید کند.

راه‌اندازی Tailscale Serve در حالی که Funnel غیرفعال مانده است

Serve هنوز در تیل‌نت من مجوز نگرفته بود؛ بنابراین در نخستین اجرا، پیوند تأیید تیل‌اسکیل را نشان داد. HTTPS خصوصی را تأیید کردم، اما Funnel را غیرفعال گذاشتم. دلیلش این است که Serve فقط می‌تواند یک برنامه را درون تیل‌نت‌های احراز هویت‌شده به اشتراک بگذارد، حال آن‌که Funnel عمداً آن را از اینترنت عمومی در دسترس می‌گذارد. این قابلیت برای برخی سرویس‌ها سودمند است، اما نه برای داشبوردها و برنامه‌هایی که کنترلشان در اختیار سرور خودم است.

مطلب مرتبط:   شش قانون اساسی Outlook من برای یک روز کاری با صندوق ورودی صفر

همان گواهی، گواهی خودامضای کاک‌پیت را پشت پراکسی پنهان کرد

با آن‌که کاک‌پیت پشت پراکسی گواهی اصلی‌اش را حفظ کرده بود، مرورگر HTTPS معتبر می‌دید

ارائهٔ Cockpit با HTTPS از طریق پراکسی Tailscale Serve

نشانی تازهٔ HTTPS هومار به‌طرز دلپذیری بی‌دردسر بود:

https://home-ops.tailfaeb31.ts.net/

اکنون هومار از راه نام‌میزبانی پایدار و خوانا بارگذاری می‌شد؛ مرورگرم دیگر آن را مشکوک نمی‌دانست و نیازی هم نبود جایی یک مرجع صدور گواهی بسازم یا گواهی ریشه نصب کنم. کاک‌پیت به تغییر کوچکی در فرمانی که برای هومار به کار برده بودم نیاز داشت:

sudo tailscale serve --bg --https=8443 https+insecure://localhost:9090

گزینهٔ https+insecure فقط برای اتصال محلی Serve به کاک‌پیت به کار می‌رفت. Serve گواهی خودامضای موجود کاک‌پیت را در localhost:۹۰۹۰ می‌پذیرفت و سپس گواهی معتبر تیل‌اسکیل را روی درگاه ۸۴۴۳ ارائه می‌کرد. در عمل، کاک‌پیت پشت پراکسی تقریباً بی‌تغییر مانده بود:

نشانی اصلی کاک‌پیت دسترسی از راه تیل‌اسکیل Serve
نشانی IP شبکهٔ محلی روی درگاه ۹۰۹۰ نام‌میزبان مجیک‌دی‌ان‌اس روی درگاه ۸۴۴۳
صادرکنندهٔ خودامضا صادرکنندهٔ مورد اعتماد عمومی
فقط برای localhost معتبر است برای نام‌میزبان .ts.net معتبر است
صفحهٔ هشدار میان‌پردهٔ گواهی در مرورگر اتصال عادی HTTPS

با باز کردن نشانی تازه، بی‌آن‌که مرورگر هراسان شود و صفحهٔ هشدار میان‌پرده را نشان دهد، مستقیم به کاک‌پیت رسیدم. مرورگرم نام‌میزبان .ts.net را با گواهی مورد اعتماد عمومی بررسی کرد، در حالی که Serve بی‌سروصدا گواهی خودامضای پشت آن را مدیریت می‌کرد.

HTTPS دو صفحهٔ ناامنِ پنهان در هومار را آشکار کرد

فایرفاکس داشبورد را امن می‌دید، اما از بارگذاری کاشی‌های صرفاً HTTP سر باز زد

کارکرد Tailscale Serve با داشبورد Homarr و ناتوانی در نمایش محتوای تعبیه‌شده

متأسفانه نخستین بارگذاری امن هومار آن پیروزی کاملی نبود که انتظارش را داشتم. با این حال، درس ارزشمندی دربارهٔ شیوهٔ برخورد مرورگرها با محتوای فعالِ ترکیبی به من داد. دو کاشی من که از صفحه‌های HTML اِن‌جین‌اکس تغذیه می‌شدند، خالی بودند.

کنسول مرورگر فایرفاکسم دقیقاً توضیح داد چه اتفاقی افتاده است:

Blocked loading mixed active content
“http://homeops.local:8090/”
Blocked loading mixed active content
“http://homeops.local:8091/”

از آن‌جا که هر دو کاشی، صفحه‌های کاملی را که کانتینرهای اِن‌جین‌اکس ارائه می‌کنند در خود جاسازی می‌کنند، یک صفحهٔ HTTPS نمی‌تواند با اطمینان محتوای HTTP را جاسازی کند؛ زیرا ممکن است صفحهٔ درونی در مسیر انتقال دست‌کاری شود. اجازه دادن به محتوای ناامن در مرورگرم، این محافظت را بی‌اثر می‌کرد.

مطلب مرتبط:   فرم‌های سفارشی را در Word ایجاد کنید که واقعاً کار می‌کنند: در اینجا چگونه است

بنابراین برای هر کانتینر، شنوندهٔ سرور جداگانه‌ای در نظر گرفتم:

sudo tailscale serve --bg --https=8451 8090
sudo tailscale serve --bg --https=8452 8091

سپس نشانی iframe درون هومار را جایگزین کردم:

https://home-ops.tailfaeb31.ts.net:8451/
https://home-ops.tailfaeb31.ts.net:8452/
داشبورد Homarr با گواهی HTTPS از Tailscale Serve که اکنون محتوای تعبیه‌شده را نمایش می‌دهد

پس آن «یک فرمانی» که در آغاز از آن گفتم، در واقع برای هر سرویس یک فرمان Serve است، نه برای کل هوم‌لب. با این همه، از مدیریت گواهی‌ها درون تک‌تک کانتینرها ساده‌تر و آسان‌تر بود.

تیل‌اسکیل هشدارها را برداشت، اما جای شبکهٔ محلی‌ام را نگرفت

ورودی خصوصی HTTPS به این دلیل کارآمد است که محدودیت‌هایش آگاهانه طراحی شده‌اند

خطای نشانی Tailscale Serve هنگام دسترسی در وضعیت قطع بودن Tailscale

تیل‌اسکیل هیچ برنامه‌ای را از نو نساخت و جای شبکهٔ محلی‌ام را نیز نگرفت. هر کارخواه همچنان به تیل‌اسکیل نیاز دارد و نشانی‌های .ts.net هم، روشن است که وقتی دستگاهی در تیل‌نت نباشد کار نمی‌کنند. چند سرویس روی یک دستگاه نیز به درگاه‌های HTTPS جداگانه نیاز دارند؛ مگر آن‌که بخواهم مسیریابی پیچیده‌تری پیکربندی کنم.

Serve صفحه‌های HTTP جاسازی‌شده در هومار را هم شناسایی نکرد؛ مرورگرم ناچار بود آن‌ها را جداگانه آشکار کند.

در کنار این‌ها، چند هزینه نیز از نظر حریم خصوصی و وابستگی وجود دارد. هرچند نام‌های خنثیِ دستگاه‌ها و تیل‌نت من اطلاعات چندانی فاش نمی‌کنند، «شفافیت گواهی» همچنان نام میزبان home-ops.tailfaeb31.ts.net را به‌صورت عمومی ثبت می‌کند. این موضوع محتوای هوم‌لب من را در معرض جست‌وجوهای OSINT قرار می‌دهد. تیل‌اسکیل حالا در مسیر مدیریت من هم قرار گرفته است؛ در حالی که نشانی‌های اصلی HTTP و گواهی خودامضای دست‌وپاگیر Cockpit همچنان وجود دارند.

این مرزبندی عمدی بود. Funnel را غیرفعال گذاشتم؛ بنابراین با قطع اتصال تیل‌اسکیل، همهٔ نشانی‌های سرورها از دسترس خارج می‌شدند. صرفِ داشتن گواهی مورد اعتماد عمومی، هیچ‌چیز را عمومی نکرد. البته می‌توانم با محدود کردن سرویس‌های اصلی به localhost یا بستن پورت‌های شبکهٔ محلی‌شان با قوانین اختصاصی دیوار آتش، این سازوکار را باز هم سخت‌گیرانه‌تر کنم؛ اما این کاری است برای روزی دیگر.

برای دستگاه‌های شخصی خودم، پذیرفتن این بده‌بستان آسان است؛ چون رایانه‌ها و تلفنم از پیش از تیل‌اسکیل استفاده می‌کنند. نشانی‌های تیل‌اسکیل را به‌عنوان مسیر معمول ورود به عملیات خانگی نگه می‌دارم. Homarr حالا صفحهٔ فرود امنی است، Cockpit دیگر مرورگرم را نمی‌ترساند و تمام این چیدمان خصوصی می‌ماند؛ در عین حال، آن حس آزاردهنده و ناامیدکننده‌ای را که هر بار با دیدن هشدار گواهی خودامضا سراغم می‌آمد، خاموش می‌کند.

منبع: این مطلب ترجمه و بومی‌سازی مقاله‌ای از MakeUseOf به قلم Gregory Gibson است. مشاهده مقاله اصلی