کارگزار «هوم آپس» من از پیش مدیریت پروندهها، کانتینرها، پایش و خودکارسازیهای خانهٔ هوشمند را بر عهده داشت؛ پس به آن اعتماد داشتم. اما مرورگرم چندان قانع نشده بود. سرویس کوکپیت با هشدار تمامصفحهای دربارهٔ گواهی به استقبالم میآمد، در حالی که هومار، پورتینر، آپتایم کوما و رابطهای دیگر همچنان به 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` و `۱۲۷.۰.۰.۱` را پوشش میداد. بنابراین، دسترسی به ۱۹۲.۱۶۸.۹۱.۱۳۱ از دو جهت شکست خورده بود: مرورگرم به صادرکننده اعتماد نداشت و گواهی حتی نشانیای را که وارد کرده بودم پوشش نمیداد.
یکبار عبور کردن از هشدار قابلتحمل بود. اما با وجود همهٔ زحمتی که از ابتدا برای برپا کردن این سرویسها کشیده بودم، تکرار این تشریفات در هر دستگاه و هر مرورگر، حس ناتمامبودن کل کار را به من میداد.
تیلاسکیل یک درگاه محلی را به وبسایتی با HTTPS معتبر بدل کرد
سِرو، نام میزبان، گواهی، پراکسی معکوس و تمدید را یکجا مدیریت کرد

پنهان نیست که تیلاسکیل را دوست دارم و چون پیشتر آن را برای بیدار کردن رایانههایم از راه دور پیکربندی کرده بودم، برای حل مشکل گواهیام گزینهای ایدئال بود. تیلاسکیل از پیش برای رمزگذاری رفتوآمد داده میان دستگاهها و تیلنت من، از وایرگارد بهره میگرفت. این کار اتصال زیربنایی را فراهم میکرد، اما مرورگرم آن را نمیدید. مرورگر همچنان یک نشانی HTTPS و گواهیای از مرجع مورداعتمادش میخواست.
مجیکدیاِناِس تیلاسکیل برای کارگزار «هوم آپس» من یک نام خصوصی پایدار فراهم کرد:
home-ops.tailfaeb31.ts.net
پسوند ناشناس تیلنت و نام خنثیِ ماشین `home-ops` اهمیت داشتند؛ زیرا حتی وقتی ماشینها دسترسناپذیرند، گزارشهای شفافیت گواهی همچنان نامهای میزبان گواهی را ثبت میکنند. در این چیدمان، هیچیک از این دو بخش هویت من، حساب کاربریام یا محل سکونتم را آشکار نمیکرد.
با نصب بودن تیلاسکیل روی کارگزار، این فرمان را اجرا کردم:
sudo tailscale serve --bg 7575
سِرو برای نام میزبان کامل `.ts.net` یک گواهی معتبر لِتساِنکریپت درخواست کرد. همچنین در شبکهٔ تیلنت من روی درگاه HTTPS ۴۴۲ گوش میداد و درخواستها را به داشبورد هومارم در `۱۲۷.۰.۰.۱:۷۵۷۵` میفرستاد. گزینهٔ `–bg` باعث میشد پراکسی پس از بستن پایانه همچنان فعال بماند و با راهاندازی دوبارهٔ کارگزار نیز از سر گرفته شود.
برخلاف صدور پروندههای گواهی با `tailscale cert`، سِرو میدانست گواهی باید کجا قرار بگیرد و حتی میتوانست آن را خودکار تمدید کند.

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

نشانی تازهٔ 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 سر باز زد

متأسفانه نخستین بارگذاری امن هومار آن پیروزی کاملی نبود که انتظارش را داشتم. با این حال، درس ارزشمندی دربارهٔ شیوهٔ برخورد مرورگرها با محتوای فعالِ ترکیبی به من داد. دو کاشی من که از صفحههای HTML اِنجیناکس تغذیه میشدند، خالی بودند.
کنسول مرورگر فایرفاکسم دقیقاً توضیح داد چه اتفاقی افتاده است:
Blocked loading mixed active content
“http://homeops.local:8090/”
Blocked loading mixed active content
“http://homeops.local:8091/”
از آنجا که هر دو کاشی، صفحههای کاملی را که کانتینرهای اِنجیناکس ارائه میکنند در خود جاسازی میکنند، یک صفحهٔ HTTPS نمیتواند با اطمینان محتوای HTTP را جاسازی کند؛ زیرا ممکن است صفحهٔ درونی در مسیر انتقال دستکاری شود. اجازه دادن به محتوای ناامن در مرورگرم، این محافظت را بیاثر میکرد.
بنابراین برای هر کانتینر، شنوندهٔ سرور جداگانهای در نظر گرفتم:
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/

پس آن «یک فرمانی» که در آغاز از آن گفتم، در واقع برای هر سرویس یک فرمان Serve است، نه برای کل هوملب. با این همه، از مدیریت گواهیها درون تکتک کانتینرها سادهتر و آسانتر بود.
تیلاسکیل هشدارها را برداشت، اما جای شبکهٔ محلیام را نگرفت
ورودی خصوصی HTTPS به این دلیل کارآمد است که محدودیتهایش آگاهانه طراحی شدهاند

تیلاسکیل هیچ برنامهای را از نو نساخت و جای شبکهٔ محلیام را نیز نگرفت. هر کارخواه همچنان به تیلاسکیل نیاز دارد و نشانیهای .ts.net هم، روشن است که وقتی دستگاهی در تیلنت نباشد کار نمیکنند. چند سرویس روی یک دستگاه نیز به درگاههای HTTPS جداگانه نیاز دارند؛ مگر آنکه بخواهم مسیریابی پیچیدهتری پیکربندی کنم.
Serve صفحههای HTTP جاسازیشده در هومار را هم شناسایی نکرد؛ مرورگرم ناچار بود آنها را جداگانه آشکار کند.
در کنار اینها، چند هزینه نیز از نظر حریم خصوصی و وابستگی وجود دارد. هرچند نامهای خنثیِ دستگاهها و تیلنت من اطلاعات چندانی فاش نمیکنند، «شفافیت گواهی» همچنان نام میزبان home-ops.tailfaeb31.ts.net را بهصورت عمومی ثبت میکند. این موضوع محتوای هوملب من را در معرض جستوجوهای OSINT قرار میدهد. تیلاسکیل حالا در مسیر مدیریت من هم قرار گرفته است؛ در حالی که نشانیهای اصلی HTTP و گواهی خودامضای دستوپاگیر Cockpit همچنان وجود دارند.
این مرزبندی عمدی بود. Funnel را غیرفعال گذاشتم؛ بنابراین با قطع اتصال تیلاسکیل، همهٔ نشانیهای سرورها از دسترس خارج میشدند. صرفِ داشتن گواهی مورد اعتماد عمومی، هیچچیز را عمومی نکرد. البته میتوانم با محدود کردن سرویسهای اصلی به localhost یا بستن پورتهای شبکهٔ محلیشان با قوانین اختصاصی دیوار آتش، این سازوکار را باز هم سختگیرانهتر کنم؛ اما این کاری است برای روزی دیگر.
برای دستگاههای شخصی خودم، پذیرفتن این بدهبستان آسان است؛ چون رایانهها و تلفنم از پیش از تیلاسکیل استفاده میکنند. نشانیهای تیلاسکیل را بهعنوان مسیر معمول ورود به عملیات خانگی نگه میدارم. Homarr حالا صفحهٔ فرود امنی است، Cockpit دیگر مرورگرم را نمیترساند و تمام این چیدمان خصوصی میماند؛ در عین حال، آن حس آزاردهنده و ناامیدکنندهای را که هر بار با دیدن هشدار گواهی خودامضا سراغم میآمد، خاموش میکند.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Gregory Gibson است. مشاهده مقاله اصلی