UK Security - KnevS/Tesla-Carview GitHub Wiki

Безпека — Аутентифікація, MFA і найкращі практики IT

🤖 Цей український переклад створений з AI-підтримкою з англійського оригіналу. Виправлення приймаються на GitHub.

🌐 Мова: EN · DE · FR · ES · TR · EL · UK

Tesla Carview обробляє чутливі дані: локацію автомобіля, історію заряджання та команди керування вашим авто. Ця сторінка охоплює, як це захищено і що ви повинні робити, щоб ваша інсталяція залишалася безпечною.


Опції входу

1. Ім'я користувача + пароль (стандарт)

  • Пароль хешується bcrypt (cost factor 12)
  • Невдалі входи мають обмеження швидкості: після 5 невдалих спроб обліковий запис блокується на 15 хвилин
  • Усі події входу записуються в audit log

Хороші практики паролів:

  • Використовуйте парольну фразу: Sonne-Berg-Auto-Kaffee (4+ слова, легко запам'ятати, важко зламати)
  • Мінімум 12 символів — довше краще
  • Не використовуйте повторно паролі з інших сервісів
  • Використовуйте менеджер паролів (Bitwarden, 1Password, KeePass)

2. Passkey (без пароля, рекомендовано)

Passkey використовують біометрію вашого пристрою (відбиток пальця, Face ID) замість пароля. Вони стійкі до фішингу та значно безпечніші.

Налаштування:

  1. Settings → Security → Add Passkey
  2. Ваш браузер відкриває біометричний запит — підтвердьте пальцем або обличчям
  3. Готово — тепер ви можете входити лише за допомогою біометрії

Passkey працюють на:

  • Mac (Touch ID)
  • iPhone/iPad (Face ID / Touch ID)
  • Android (відбиток пальця)
  • Windows (Windows Hello)
  • Апаратні ключі (YubiKey)

⚠️ Браузер автомобіля Tesla не підтримує Passkey. Використовуйте ім'я користувача + пароль із "Stay signed in" у автомобілі.

3. MFA / Двофакторна аутентифікація (TOTP)

Додайте додатковий рівень із застосунком-автентифікатором:

  1. Settings → Security → Enable MFA
  2. Скануйте QR-код у Google Authenticator, Authy, Bitwarden або подібному
  3. Введіть 6-значний код для підтвердження

Після налаштування: кожен вхід вимагає вашого пароля + 6-значний код.

Адміністратори можуть вимагати MFA для всіх користувачів:

# .env — примушує MFA для всіх нових користувачів:
MFA_REQUIRED_FOR_NEW_USERS=true

Безпека сесії

Налаштування Значення
Час життя access-токена 15 хвилин (короткочасний)
Refresh-токен — стандарт 7 днів
Refresh-токен — "Stay signed in" 90 днів
Зберігання refresh-токена httpOnly, Secure, SameSite=Lax cookie
Ротація токенів Новий refresh-токен при кожному використанні

Токени зберігаються як SHA-256 хеші — відкритий текст ніколи не торкається бази даних.


Найкращі практики IT-безпеки для вашого сервера

Поза вбудованою безпекою Tesla Carview ваш сервер також потребує захисту.

🔒 Зміцнення SSH

Вимкніть аутентифікацію паролем — використовуйте лише ключі:

# Згенеруйте пару ключів на вашому ЛОКАЛЬНОМУ комп'ютері:
ssh-keygen -t ed25519 -C "tesla-server"

# Скопіюйте публічний ключ на сервер:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@YOUR-SERVER-IP

# На сервері вимкніть аутентифікацію паролем:
nano /etc/ssh/sshd_config

Змініть ці рядки:

PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
systemctl restart sshd

⚠️ Перевірте, що вхід за ключем працює, перш ніж закривати вашу поточну сесію SSH.

Змініть стандартний SSH-порт (опціонально, зменшує шум у журналі):

# У /etc/ssh/sshd_config:
Port 2222    # Будь-який нестандартний порт

# Оновіть фаєрвол:
ufw allow 2222/tcp
ufw delete allow 22/tcp
systemctl restart sshd

🔥 Фаєрвол (UFW)

Скрипт налаштування налаштовує UFW автоматично. Перевірте, чи правильно:

ufw status verbose

Має показати:

Status: active
To                         Action      From
--                         ------      ----
22/tcp (або ваш SSH-порт)  ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere

Заблокуйте все інше — жодні інші порти не повинні бути відкритими публічно.

🛡️ Fail2ban (захист від брутфорсу)

Fail2ban автоматично банить IP, які повторно зазнають невдачі при SSH або веб-входах. Скрипт налаштування встановлює та налаштовує його.

Перевірте статус:

fail2ban-client status
fail2ban-client status sshd
fail2ban-client status nginx-http-auth

Розбаньте IP (якщо ви заблокували себе):

fail2ban-client set sshd unbanip YOUR-IP

🔄 Тримайте все оновленим

Авто-оновлення для OS:

apt install unattended-upgrades -y
dpkg-reconfigure unattended-upgrades  # Виберіть yes

Авто-оновлення для Tesla Carview:

# У /opt/tesla-carview/backend/.env:
AUTO_UPDATE_ENABLED=true

Оновлення запускаються щовечора о 03:30 (Europe/Berlin), якщо ввімкнено.

Оновлення образів Docker:

docker compose -f /opt/tesla-carview/docker-compose.prod.yml pull
docker compose -f /opt/tesla-carview/docker-compose.prod.yml up -d

🌐 HTTPS і поновлення сертифікатів

Сертифікати Let's Encrypt закінчуються кожні 90 днів і поновлюються автоматично через cron-завдання (налаштоване скриптом установки).

Перевірте статус сертифіката:

certbot certificates

Перевірка поновлення (dry run, без змін):

certbot renew --dry-run

Примусово поновіть за потреби:

certbot renew --force-renewal
systemctl restart nginx

🔑 Захистіть ваш .env файл

Ваш .env файл містить Tesla Client ID, Client Secret і JWT secret. Він ніколи не повинен бути:

  • Закомічений до git (він у .gitignore — не перевизначайте це)
  • Доступний публічно
  • Поширений у скріншотах або запитах підтримки
# Перевірте дозволи — мають бути 600 (читання/запис лише для власника):
ls -la /opt/tesla-carview/backend/.env

# Виправте, якщо неправильно:
chmod 600 /opt/tesla-carview/backend/.env

📝 Audit log

Tesla Carview записує всі чутливі дії:

  • Спроби входу (успіх і невдача)
  • Блокування облікових записів
  • Зміни пароля
  • Виконання команд автомобіля
  • Видалення даних
  • Дії адміністратора

Переглядайте на: Admin → Audit Log

Експорт для аналізу: Admin → Audit Log → Export CSV


Заголовки безпеки

Конфігурація nginx Tesla Carview включає сучасні заголовки безпеки:

  • Content-Security-Policy (CSP) — запобігає XSS
  • Strict-Transport-Security (HSTS) — примушує HTTPS
  • X-Frame-Options: DENY — запобігає clickjacking
  • X-Content-Type-Options: nosniff
  • Permissions-Policy — обмежує функції браузера

Перевірте свої заголовки: securityheaders.com


Повідомлення про вразливість безпеки

Знайшли проблему безпеки? Будь ласка, повідомте про це відповідально:

  • Не відкривайте публічне GitHub issue
  • Email: див. SECURITY.md у репозиторії
  • Ми прагнемо відповісти протягом 48 годин

Чек-лист безпеки для нових інсталяцій

  • SSH-аутентифікація за ключем увімкнена, аутентифікація паролем вимкнена
  • Фаєрвол активний (UFW), відкриті лише порти 22/80/443
  • Fail2ban працює
  • Сильний пароль адміна (16+ символів або парольна фраза)
  • MFA увімкнено для облікового запису адміна
  • Дозволи файлу .env встановлено на 600
  • Авто-оновлення увімкнено (OS + Tesla Carview)
  • Регулярні резервні копії налаштовані (див. Резервне копіювання та відновлення)
  • Audit log періодично переглядається