بازگشت به وبلاگ

پروکسی برای Home Assistant: دسترسی ایمن از راه دور به خانه هوشمند بدون هک

پورت باز Home Assistant یک نقطه ضعف در امنیت خانه هوشمند شماست. در اینجا توضیح می‌دهیم که چگونه دسترسی از راه دور ایمن را از طریق پروکسی تنظیم کنید و قربانی هک نشوید.

📅۲۲ خرداد ۱۴۰۵
```html

شما Home Assistant را نصب کرده‌اید، پریزهای هوشمند، ترموستات و دوربین‌ها را متصل کرده‌اید و می‌خواهید همه این‌ها را از طریق گوشی هوشمند خود از هر نقطه‌ای از جهان مدیریت کنید. اما دسترسی باز به اینترنت بدون حفاظت، خانه هوشمند شما را به هدفی آسان برای هکرها تبدیل می‌کند. در این مقاله بررسی می‌کنیم که چگونه دسترسی از راه دور به Home Assistant را از طریق پروکسی به درستی سازماندهی کنیم و شبکه خانگی خود را ایمن کنیم.

چرا دسترسی مستقیم به Home Assistant خطرناک است

Home Assistant یک پلتفرم قدرتمند برای اتوماسیون خانه هوشمند با کد منبع باز است. میلیون‌ها کاربر در سرتاسر جهان از طریق آن نور، آب و هوا، قفل‌ها، دوربین‌ها و ده‌ها دستگاه دیگر را مدیریت می‌کنند. اما همین محبوبیت، Home Assistant را به هدفی جذاب برای مجرمان تبدیل می‌کند.

وقتی شما پورت 8123 (پورت استاندارد Home Assistant) را به طور مستقیم از طریق روتر به اینترنت باز می‌کنید، به معنای واقعی کلمه یک تابلو «خوش آمدید» برای اسکنرهای خودکار نصب می‌کنید. این اسکنرها تمام دامنه آدرس‌های IP را جستجو می‌کنند و به دنبال پورت‌های باز خدمات معروف هستند. طبق داده‌های Shodan (موتور جستجو برای دستگاه‌ها در اینترنت)، ده‌ها هزار نمونه Home Assistant به طور مداوم در دسترس عمومی قرار دارند.

چه اتفاقی بعد از شناسایی Home Assistant شما توسط یک مجرم می‌افتد:

  • حمله بروز فورس به رمز عبور — اسکریپت‌های خودکار هزاران ترکیب نام کاربری/رمز عبور را امتحان می‌کنند. اگر رمز عبور شما ضعیف باشد، هک شدن فقط چند دقیقه زمان می‌برد.
  • استفاده از آسیب‌پذیری‌ها — در نسخه‌های قدیمی Home Assistant به طور دوره‌ای حفره‌های بحرانی پیدا می‌شود که اجازه دسترسی بدون رمز عبور را می‌دهد.
  • نظارت از طریق دوربین‌ها — با دسترسی به HA، مجرم می‌تواند پخش زنده تمام دوربین‌های متصل را در زمان واقعی ببیند.
  • مدیریت قفل‌ها و سیستم‌های امنیتی — اگر شما یک قفل هوشمند متصل کرده‌اید، هکر می‌تواند درب خانه شما را از راه دور باز کند.
  • سرقت داده‌های اتوماسیون — از تاریخچه HA می‌توان فهمید که شما چه زمانی در خانه هستید، چه زمانی می‌روید، حالت خواب و سایر داده‌های خصوصی.

⚠️ مورد واقعی

در سال 2023، محققان امنیتی آسیب‌پذیری CVE-2023-27482 را در Home Assistant شناسایی کردند که اجازه می‌داد بدون هیچ گونه اطلاعات کاربری احراز هویت را دور بزنند. تمام نمونه‌ها با دسترسی باز به اینترنت تا زمان انتشار پچ آسیب‌پذیر بودند. کسانی که از لایه پروکسی یا VPN استفاده کردند به طور خودکار محافظت شدند.

چگونه پروکسی خانه هوشمند را محافظت می‌کند: اصل کار

پروکسی در زمینه Home Assistant به عنوان واسطه‌ای بین اینترنت و سرور شما عمل می‌کند. به جای اینکه Home Assistant شما به طور مستقیم از شبکه قابل مشاهده باشد، فقط سرور پروکسی از بیرون قابل مشاهده است — و آن درخواست‌ها را به داخل منتقل می‌کند و بررسی‌های اضافی را اعمال می‌کند.

طرح کار به این صورت است:

گوشی هوشمند شما (اینترنت)
        ↓
  سرور پروکسی
  (فیلتر کردن، رمزگذاری، احراز هویت)
        ↓
  شبکه خانگی (بسته)
        ↓
  Home Assistant (192.168.1.X:8123)
  

این لایه اضافی چه مزایایی دارد:

  • پنهان کردن IP واقعی — اسکنرها IP پروکسی را می‌بینند، نه آدرس خانگی شما. حتی اگر پروکسی هک شود، آن‌ها به طور مستقیم به شبکه خانگی دسترسی نخواهند داشت.
  • رمزگذاری SSL/TLS — پروکسی می‌تواند ارتباط HTTPS را خاتمه دهد و گواهی معتبر ارائه دهد، که ترافیک را از شنود محافظت می‌کند.
  • احراز هویت اضافی — می‌توان قبل از Home Assistant احراز هویت پایه یا احراز هویت دو مرحله‌ای را در سطح پروکسی قرار داد.
  • محدودیت نرخ — محدود کردن تعداد درخواست‌ها از یک IP، حملات بروز فورس را قبل از رسیدن به Home Assistant مسدود می‌کند.
  • مسدودسازی جغرافیایی — می‌توان دسترسی را فقط از کشورهای خاص یا دامنه‌های IP مجاز کرد.
  • ثبت وقایع — تمام تلاش‌های دسترسی ثبت می‌شود که به شناسایی فعالیت‌های مشکوک کمک می‌کند.

مهم است که تفاوت بین دو نوع پروکسی که در این سناریو استفاده می‌شود را درک کنید: پروکسی معکوس (reverse proxy) بر روی سرور یا روتر شما نصب می‌شود و اتصالات ورودی را می‌پذیرد، در حالی که پروکسی خارجی یک سرور واسطه در ابر است که ترافیک شما از طریق آن تونل می‌شود. هر دو رویکرد مزایای خاص خود را دارند و ما هر یک را بررسی خواهیم کرد.

کدام نوع پروکسی برای Home Assistant مناسب است

قبل از انتخاب راه حل، مهم است که درک کنید که وظایف Home Assistant و به عنوان مثال، یک کاربر SMM یا یک کارگزار به طور اصولی متفاوت است. برای خانه هوشمند، ما به یک پروکسی ناشناس برای دور زدن مسدودسازی‌ها نیاز نداریم، بلکه به یک تونل ایمن برای مدیریت از راه دور نیاز داریم. گزینه‌ها را بررسی می‌کنیم:

نوع راه حل چگونه کار می‌کند مزایا معایب پیچیدگی
پروکسی معکوس (Nginx/Caddy) درخواست‌های HTTPS را از بیرون می‌پذیرد و به HA در داخل منتقل می‌کند رایگان، کنترل کامل، SSL نیاز به IP سفید یا DDNS، پورت 443 باز متوسط
Cloudflare Tunnel تونل از HA به سرورهای Cloudflare، نیازی به پورت‌ها نیست رایگان، نیازی به IP سفید نیست، حفاظت در برابر DDoS ترافیک از طریق Cloudflare می‌رود، نیاز به دامنه دارد پایین
VPS + پروکسی یک VPS اجاره می‌کنید و ترافیک را از طریق آن تونل می‌کنید IP خودتان، کنترل حداکثری هزینه‌بر، نیاز به تنظیمات دارد بالا
Nabu Casa (رسمی) سرویس ابری از توسعه‌دهندگان HA بسیار ساده، از Alexa/Google پشتیبانی می‌کند اشتراک پولی ~$6.50/ماه بسیار پایین
پروکسی مسکونی مسیر یابی ترافیک خروجی از طریق IP واقعی خانگی IP واقعی، مسدود نمی‌شود برای ترافیک خروجی مناسب است، نه برای ورودی پایین

برای اکثر کاربران Home Assistant، انتخاب بهینه Cloudflare Tunnel (رایگان، نیازی به IP سفید ندارد) یا پروکسی معکوس بر روی Nginx/Caddy (اگر IP سفید یا DNS دینامیک دارید) خواهد بود. Nabu Casa برای کسانی مناسب است که نمی‌خواهند با تنظیمات سر و کار داشته باشند. هر گزینه را به صورت دقیق بررسی می‌کنیم.

پروکسی معکوس (Nginx، Caddy): تنظیم گام به گام

پروکسی معکوس یک روش کلاسیک و انعطاف‌پذیر برای سازماندهی دسترسی ایمن به Home Assistant است. این پروکسی بر روی همان دستگاهی که HA نصب شده (به عنوان مثال، Raspberry Pi یا Home Assistant OS) یا بر روی یک سرور جداگانه در شبکه خانگی نصب می‌شود.

گزینه 1: Caddy (برای مبتدیان توصیه می‌شود)

Caddy یک وب‌سرور مدرن است که به طور خودکار گواهی‌های SSL را از طریق Let's Encrypt دریافت و به‌روزرسانی می‌کند. هیچ تنظیم دستی برای certbot نیاز نیست.

گام 1: چه چیزی نیاز دارید

  • یک نام دامنه (می‌توانید از دامنه رایگان در DuckDNS یا No-IP استفاده کنید)
  • پروکسی پورت 443 بر روی روتر به IP Home Assistant شما
  • Home Assistant نصب شده (هر گزینه‌ای)

گام 2: نصب Caddy به عنوان افزونه در Home Assistant OS

اگر از Home Assistant OS (HAOS) استفاده می‌کنید، به بخش تنظیمات → افزونه‌ها → فروشگاه افزونه‌ها بروید و افزونه Caddy 2 را پیدا کنید. آن را نصب کرده و به پیکربندی بروید.

گام 3: پیکربندی پایه Caddyfile

your-domain.duckdns.org {
    reverse_proxy localhost:8123
    
    # حفاظت اضافی: احراز هویت پایه قبل از HA
    # basicauth {
    #     admin $2a$14$هش_رمز
    # }
    
    # محدودیت نرخ: حداکثر 10 درخواست در ثانیه
    rate_limit {
        zone static_zone {
            key    {remote_host}
            events 10
            window 1s
        }
    }
    
    # هدرهای امنیتی
    header {
        X-Frame-Options DENY
        X-Content-Type-Options nosniff
        Referrer-Policy no-referrer
    }
}
  

گام 4: پیکربندی Home Assistant برای کار در پشت پروکسی

فایل configuration.yaml را باز کنید و خطوط زیر را اضافه کنید. این کار الزامی است — در غیر این صورت HA درخواست‌ها را از پروکسی رد خواهد کرد:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 127.0.0.1
    - ::1
  

پس از ذخیره، Home Assistant را مجدداً راه‌اندازی کنید. اکنون به آن از طریق آدرس https://your-domain.duckdns.org دسترسی پیدا کنید — ارتباط رمزگذاری شده و IP واقعی روتر شما پشت دامنه پنهان شده است.

گزینه 2: Cloudflare Tunnel (بدون IP سفید)

اگر IP سفیدی ندارید (بیشتر ارائه‌دهندگان خانگی IP‌های خاکستری را از طریق NAT ارائه می‌دهند)، Cloudflare Tunnel یک راه حل ایده‌آل است. شما یک عامل کوچک cloudflared را بر روی دستگاهی که Home Assistant روی آن نصب شده است، نصب می‌کنید و آن به طور خودکار یک تونل رمزگذاری شده به سرورهای Cloudflare ایجاد می‌کند. نیازی به پورت‌های باز بر روی روتر نیست!

تنظیم گام به گام:

  1. در cloudflare.com ثبت‌نام کنید و دامنه خود را اضافه کنید (یا از یک زیر دامنه رایگان استفاده کنید).
  2. در پنل Cloudflare به بخش Zero Trust → Networks → Tunnels بروید.
  3. بر روی Create a tunnel کلیک کنید، به تونل یک نام بدهید (به عنوان مثال، home-assistant).
  4. دستور نصب را کپی کرده و آن را بر روی دستگاهی که HA روی آن نصب شده است اجرا کنید (یا افزونه Cloudflared را از فروشگاه HAOS نصب کنید).
  5. در بخش Public Hostname مشخص کنید:
    — زیر دامنه: ha
    — دامنه: دامنه شما
    — سرویس: http://localhost:8123
  6. پروکسی‌های معتبر Cloudflare را به configuration.yaml اضافه کنید (محدوده‌های IP را می‌توانید در cloudflare.com/ips پیدا کنید).
  7. اختیاری: Zero Trust Access را فعال کنید — یک سطح اضافی از احراز هویت از طریق ایمیل یا حساب Google قبل از ورود به HA.

💡 نکته

Cloudflare Tunnel کاملاً رایگان برای استفاده شخصی است. تنها محدودیت این است که ترافیک از طریق سرورهای Cloudflare می‌گذرد. برای مدیریت خانه هوشمند، این کاملاً قابل قبول است و حفاظت در برابر DDoS و ربات‌ها به همراه آن می‌آید.

پروکسی سرور خارجی: چه زمانی نیاز است و چگونه متصل شویم

پروکسی سرور خارجی یک گره واسطه در ابر است که ترافیک شما از طریق آن مسیریابی می‌شود. در زمینه Home Assistant، این پروکسی در چند سناریوی خاص استفاده می‌شود که توسط پروکسی معکوس پوشش داده نمی‌شود.

سناریو 1: دسترسی به Home Assistant از شبکه شرکتی

بسیاری از شبکه‌های شرکتی پورت‌های غیر استاندارد و اتصالات VPN را مسدود می‌کنند. اگر می‌خواهید از کامپیوتر کاری خود که بیشتر اتصالات در آن مسدود شده است، خانه هوشمند را مدیریت کنید، ترافیک از طریق پروکسی مسکونی به عنوان ترافیک HTTPS عادی یک کاربر خانگی به نظر می‌رسد و باعث مشکوک شدن فایروال شرکتی نمی‌شود.

سناریو 2: ادغام با خدمات جغرافیایی محدود

Home Assistant می‌تواند با هزاران سرویس خارجی ادغام شود: API‌های آب و هوا، بلندگوهای هوشمند، پلتفرم‌های استریم. برخی از آن‌ها فقط در کشورهای خاص در دسترس هستند. به عنوان مثال، ادغام با Amazon Alexa یا Google Assistant نیاز دارد که سرور از ایالات متحده یا اروپا قابل دسترسی باشد. در این صورت، ترافیک خروجی از HA می‌تواند از طریق پروکسی دیتا سنتر در منطقه مورد نظر هدایت شود.

سناریو 3: ناشناس‌سازی درخواست‌های خروجی HA

Home Assistant به طور منظم به API‌های خارجی مراجعه می‌کند: وضعیت آب و هوا را بررسی می‌کند، داده‌های ترافیک را دریافت می‌کند، با خدمات ابری همگام‌سازی می‌شود. تمام این درخواست‌ها از IP خانگی شما ارسال می‌شود و موقعیت شما را به خدمات خارجی افشا می‌کند. تنظیم پروکسی خروجی در تنظیمات سیستم HA به پنهان کردن IP واقعی کمک می‌کند.

چگونه پروکسی خروجی را در Home Assistant تنظیم کنیم:

در Home Assistant OS به تنظیمات → سیستم → شبکه بروید. در اینجا می‌توانید پروکسی HTTP/HTTPS را برای تمام اتصالات خروجی مشخص کنید. داده‌های پروکسی را به فرمت زیر وارد کنید:

HTTP Proxy:  http://کاربر:رمز@پروکسی-سرور:پورت
HTTPS Proxy: http://کاربر:رمز@پروکسی-سرور:پورت
  

به طور جایگزین، اگر HA را در Docker اجرا می‌کنید، می‌توانید متغیرهای محیطی HTTP_PROXY و HTTPS_PROXY را در فایل docker-compose.yml تنظیم کنید:

version: '3'
services:
  homeassistant:
    image: ghcr.io/home-assistant/home-assistant:stable
    environment:
      - HTTP_PROXY=http://کاربر:رمز@پروکسی-سرور:پورت
      - HTTPS_PROXY=http://کاربر:رمز@پروکسی-سرور:پورت
      - NO_PROXY=localhost,127.0.0.1,192.168.0.0/16
    volumes:
      - ./config:/config
    network_mode: host
    restart: unless-stopped
  

به متغیر NO_PROXY توجه کنید — این متغیر آدرس‌های محلی را از پروکسی کردن مستثنی می‌کند تا HA بتواند به طور مستقیم با دستگاه‌های موجود در شبکه خانگی شما ارتباط برقرار کند.

Nabu Casa در مقابل پروکسی مستقل: چه چیزی را انتخاب کنیم

Nabu Casa یک سرویس ابری رسمی از تیم Home Assistant است. این سرویس مشکل دسترسی از راه دور را با یک کلیک حل می‌کند: هیچ تنظیمات DNS، SSL یا پورت‌های باز نیاز نیست. فقط ثبت‌نام می‌کنید و یک URL آماده به شکل https://your-id.ui.nabu.casa دریافت می‌کنید.

معیار Nabu Casa Cloudflare Tunnel Nginx/Caddy
هزینه ~$6.50/ماه رایگان رایگان
پیچیدگی تنظیمات ⭐ بسیار ساده ⭐⭐ ساده ⭐⭐⭐ متوسط
نیاز به IP سفید خیر خیر بله (یا DDNS)
دامنه خودتان خیر بله بله
Alexa / Google Home ✅ به صورت داخلی تنظیم دستی تنظیم دستی
حریم خصوصی ترافیک از طریق سرورهای Nabu Casa ترافیک از طریق Cloudflare کنترل کامل
پشتیبانی از توسعه‌دهندگان HA ✅ بله خیر خیر

نتیجه‌گیری: اگر تازه کار هستید و می‌خواهید کمترین دردسر را داشته باشید — Nabu Casa را انتخاب کنید. اگر می‌خواهید یک راه حل رایگان بدون IP سفید داشته باشید — Cloudflare Tunnel را انتخاب کنید. اگر کنترل کامل و یک نام دامنه خودتان برایتان مهم است — Nginx یا Caddy را تنظیم کنید.

چک لیست امنیتی: 10 قانون برای محافظت از Home Assistant

پروکسی یک عنصر مهم، اما نه تنها عنصر حفاظت است. در اینجا یک چک لیست کامل وجود دارد که بیشتر وکتورهای حمله به خانه هوشمند شما را پوشش می‌دهد:

✅ چک لیست امنیتی Home Assistant

  1. یک لایه پروکسی نصب کنید (Caddy، Nginx یا Cloudflare Tunnel) — هرگز پورت 8123 را به طور مستقیم باز نکنید.
  2. HTTPS را فعال کنید — فقط اتصالات رمزگذاری شده. Caddy این کار را به طور خودکار انجام می‌دهد.
  3. از رمز عبور پیچیده استفاده کنید — حداقل 16 کاراکتر، شامل اعداد و نمادهای خاص. بهتر است از یک مدیر رمز عبور استفاده کنید.
  4. احراز هویت دو مرحله‌ای را در Home Assistant فعال کنید: تنظیمات → کاربران → فعال کردن 2FA (TOTP از طریق Google Authenticator یا Authy).
  5. ایجاد حساب‌ها از طریق UI را غیرفعال کنید (onboarding) پس از تنظیم اولیه.
  6. محدودیت نرخ را در پروکسی تنظیم کنید — حداکثر 5-10 تلاش ورود در دقیقه از یک IP.
  7. fail2ban یا مشابه آن را فعال کنید — مسدود کردن خودکار IP پس از چند تلاش ناموفق برای ورود.
  8. Home Assistant را به طور منظم به‌روزرسانی کنید — بیشتر آسیب‌پذیری‌های بحرانی در عرض 24-48 ساعت پس از شناسایی بسته می‌شوند.
  9. دستگاه‌های خانه هوشمند را در یک VLAN جداگانه یا شبکه Wi-Fi مهمان ایزوله کنید — اگر یک دستگاه هک شود، بقیه شبکه در امنیت باقی می‌ماند.
  10. ادغام‌ها و افزونه‌های غیرضروری را غیرفعال کنید — هر مؤلفه فعال سطح حمله را گسترش می‌دهد.

اضافی: تنظیم fail2ban برای Home Assistant

اگر از سیستم Linux استفاده می‌کنید (به عنوان مثال، Home Assistant Supervised بر روی Debian)، fail2ban را برای مسدود کردن خودکار IP‌های مهاجم نصب کنید:

# نصب fail2ban
sudo apt install fail2ban

# فایل /etc/fail2ban/filter.d/hass.conf را ایجاد کنید
[Definition]
failregex = ^%(__prefix_line)s.*Login attempt or request with invalid authentication from <HOST>.*$
ignoreregex =

# یک قانون در /etc/fail2ban/jail.d/hass.conf ایجاد کنید
[hass]
enabled  = true
filter   = hass
logpath  = /config/home-assistant.log
maxretry = 5
bantime  = 3600
findtime = 600
  

این قانون IP را به مدت 1 ساعت پس از 5 تلاش ناموفق برای ورود در 10 دقیقه مسدود می‌کند. می‌توانید پارامترها را سخت‌تر کنید: bantime را به 86400 (24 ساعت) افزایش دهید یا maxretry را به 3 کاهش دهید.

نظارت بر فعالیت‌های مشکوک

Home Assistant دارای یک لاگ احراز هویت داخلی است. به طور منظم آن را از طریق تنظیمات → سیستم → لاگ‌ها بررسی کنید. به دنبال خطوطی با Login attempt و invalid authentication باشید. اگر تلاش‌هایی از IP‌های ناشناس مشاهده کردید — این نشانه‌ای است که HA شما توسط اسکنرها شناسایی شده است.

همچنین می‌توانید یک اعلان خودکار در تلگرام هنگام تلاش ناموفق برای ورود تنظیم کنید. یک اتوماسیون در Home Assistant ایجاد کنید:

alias: اعلان درباره ورود ناموفق
trigger:
  - platform: event
    event_type: system_log_event
    event_data:
      level: WARNING
condition:
  - condition: template
    value_template: "{{ 'Login attempt' in trigger.event.data.message }}"
action:
  - service: notify.telegram
    data:
      message: "⚠️ تلاش ورود به Home Assistant: {{ trigger.event.data.message }}"
  

نتیجه‌گیری

دسترسی ایمن از راه دور به Home Assistant یک «ویژگی» اختیاری نیست، بلکه یک شرط ضروری برای همه کسانی است که می‌خواهند خانه هوشمند خود را از طریق اینترنت مدیریت کنند. باز بودن پورت بدون لایه حفاظتی، سوال «آیا هک می‌شود» را به «کی هک می‌شود» تبدیل می‌کند. لایه پروکسی (پروکسی معکوس یا تونل) تصویر را به طور اساسی تغییر می‌دهد: مجرمان فقط پروکسی را می‌بینند، نه سرور واقعی و شبکه خانگی شما.

خلاصه‌ای از انتخاب راه حل:

  • مبتدی هستم، می‌خواهم ساده و سریع باشد → Nabu Casa یا Cloudflare Tunnel
  • IP سفید دارم، می‌خواهم کنترل داشته باشم → Caddy یا Nginx به عنوان پروکسی معکوس
  • IP سفید ندارم، می‌خواهم رایگان باشد → Cloudflare Tunnel + DuckDNS
  • حداکثر حریم خصوصی → VPS + تونل WireGuard + پروکسی معکوس

فراموش نکنید که پروکسی اولین خط دفاع است. آن را با احراز هویت دو مرحله‌ای، به‌روزرسانی‌های منظم و نظارت بر لاگ‌ها تکمیل کنید. خانه هوشمند باید در مسائل امنیتی نیز هوشمند باشد.

اگر علاوه بر حفاظت از ترافیک ورودی، نیاز دارید که درخواست‌های خروجی Home Assistant به API‌های خارجی را پنهان کنید یا به ادغام‌های جغرافیایی محدود دسترسی پیدا کنید، پیشنهاد می‌کنیم پروکسی‌های مسکونی را در نظر بگیرید — آن‌ها IP‌های واقعی خانگی را فراهم می‌کنند که توسط خدمات ابری و ارائه‌دهندگان API مسدود نمی‌شوند.

```