Repository navigation
DE Security
🌐 Sprache / Language: EN · FR · ES · TR · EL · DE
Tesla Carview verarbeitet sensible Daten: Fahrzeugstandort, Ladehistorie und Steuerbefehle an dein Auto. Diese Seite erklärt, wie die App abgesichert ist und was du tun solltest, um deine Installation sicher zu halten.
- Passwörter werden mit bcrypt gehasht (Kostenfaktor 12)
- Fehlgeschlagene Logins sind rate-limitiert: nach 5 Fehlversuchen wird das Konto für 15 Minuten gesperrt
- Alle Login-Ereignisse werden im Audit-Log festgehalten
Gute Passwort-Praktiken:
- Verwende eine Passphrase:
Sonne-Berg-Auto-Kaffee(4+ Wörter, leicht zu merken, schwer zu knacken) - Mindestens 12 Zeichen — länger ist besser
- Keine Passwörter von anderen Diensten wiederverwenden
- Passwort-Manager nutzen (Bitwarden, 1Password, KeePass)
Passkeys verwenden die Biometrie deines Geräts (Fingerabdruck, Face ID) anstelle eines Passworts. Sie sind Phishing-resistent und deutlich sicherer.
Einrichten:
- Einstellungen → Sicherheit → Passkey hinzufügen
- Der Browser öffnet eine biometrische Aufforderung — bestätige mit Finger oder Gesicht
- Fertig — du kannst dich jetzt nur mit deiner Biometrie anmelden
Passkeys funktionieren auf:
- Mac (Touch ID)
- iPhone/iPad (Face ID / Touch ID)
- Android (Fingerabdruck)
- Windows (Windows Hello)
- Hardware-Keys (YubiKey)
Der Tesla-Auto-Browser unterstützt keine Passkeys. Im Auto Benutzername + Passwort mit „Angemeldet bleiben" verwenden.
Füge eine zusätzliche Sicherheitsschicht mit einer Authenticator-App hinzu:
- Einstellungen → Sicherheit → MFA aktivieren
- QR-Code mit Google Authenticator, Authy, Bitwarden oder ähnlichem scannen
- Den 6-stelligen Code zur Bestätigung eingeben
Nach dem Einrichten: Jeder Login erfordert dein Passwort + den 6-stelligen Code.
Backup-Codes nicht vergessen: Die 10 Backup-Codes werden nur einmal angezeigt — in einem Passwort-Manager speichern oder ausdrucken.
Admins können MFA für alle Benutzer erzwingen:
# .env — MFA-Pflicht für alle neuen Benutzer:
MFA_REQUIRED_FOR_NEW_USERS=true| Einstellung | Wert |
|---|---|
| Access-Token-Laufzeit | 15 Minuten (kurzlebig) |
| Refresh-Token — Standard | 7 Tage |
| Refresh-Token — „Angemeldet bleiben" | 90 Tage |
| Refresh-Token Speicherort |
httpOnly, Secure, SameSite=Lax Cookie |
| Token-Rotation | Neuer Refresh-Token bei jeder Nutzung |
Tokens werden als SHA-256-Hashes gespeichert — der Klartext berührt nie die Datenbank.
Warum kein localStorage? localStorage ist per JavaScript lesbar und damit XSS-anfällig. Der Access-Token im Arbeitsspeicher verschwindet bei Tab-Schließung, der httpOnly-Cookie nicht und kann von JavaScript nicht gelesen werden.
Sensible Datenbankfelder werden mit AES-256-GCM verschlüsselt:
| Daten | Verschlüsselt |
|---|---|
| Tesla OAuth Access-Token | Ja (v1:iv:tag:ciphertext) |
| Tesla OAuth Refresh-Token | Ja |
| TOTP MFA-Secret | Ja |
| Tesla Virtual-Key Private-Key | Ja |
Der Verschlüsselungskey liegt unter data/.encryption-key und wird beim ersten Start automatisch erzeugt. Dieser Key gehört ins Backup — ohne ihn sind Tesla-Verbindungen, MFA-Setups und Virtual-Keys verloren.
Neben der integrierten Sicherheit von Tesla Carview braucht auch dein Server Schutz.
Passwort-Authentifizierung deaktivieren — nur SSH-Keys nutzen:
# Schlüsselpaar auf deinem LOKALEN Computer generieren:
ssh-keygen -t ed25519 -C "tesla-server"
# Public Key auf den Server kopieren:
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@DEINE-SERVER-IP
# Auf dem Server Passwort-Auth deaktivieren:
nano /etc/ssh/sshd_configDiese Zeilen ändern:
PasswordAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
systemctl restart sshdTeste den Key-basierten Login bevor du die aktuelle SSH-Session schließt.
Standard-SSH-Port ändern (optional, reduziert Log-Rauschen):
# In /etc/ssh/sshd_config:
Port 2222 # Beliebiger nicht-standardmäßiger Port
# Firewall aktualisieren:
ufw allow 2222/tcp
ufw delete allow 22/tcp
systemctl restart sshdDas Setup-Skript konfiguriert UFW automatisch. Überprüfen:
ufw status verboseSollte zeigen:
Status: active
To Action From
-- ------ ----
22/tcp (oder dein Port) ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
Alle anderen Ports sollten nicht öffentlich erreichbar sein.
Fail2ban sperrt automatisch IPs, die wiederholt SSH- oder Web-Logins fehlschlagen. Das Setup-Skript installiert und konfiguriert es.
Status prüfen:
fail2ban-client status
fail2ban-client status sshd
fail2ban-client status nginx-tesla-loginIP entsperren (falls du dich ausgesperrt hast):
fail2ban-client set sshd unbanip DEINE-IPSperrzeiten:
| Szenario | Fehlversuche | Zeitraum | Sperrzeit |
|---|---|---|---|
| Login 401 (Brute-Force) | 3 | 60 s | 10 min |
| Rate-Limit überschritten | 3 | 60 s | 3 min |
| SSH-Brute-Force | 5 | 600 s | 1 h |
Das App-seitige Account-Lockout (5 Fehlversuche → 15 min) und fail2ban ergänzen sich: fail2ban schützt auf Netzwerkebene, bevor Anfragen Node.js erreichen.
Automatische OS-Updates:
apt install unattended-upgrades -y
dpkg-reconfigure unattended-upgrades # Ja auswählenAutomatische Tesla Carview Updates:
# In /opt/tesla-carview/backend/.env:
AUTO_UPDATE_ENABLED=trueUpdates laufen nächtlich um ~03:30 (Europe/Berlin).
Docker-Image Updates:
docker compose -f /opt/tesla-carview/docker-compose.prod.yml pull
docker compose -f /opt/tesla-carview/docker-compose.prod.yml up -dLet's Encrypt Zertifikate laufen alle 90 Tage ab und erneuern sich automatisch per Cron-Job (vom Install-Skript eingerichtet).
Zertifikatsstatus prüfen:
certbot certificatesErneuerung testen (Probelauf, keine Änderungen):
certbot renew --dry-runErneuerung erzwingen:
certbot renew --force-renewal
systemctl restart nginxDeine .env-Datei enthält Tesla Client-ID, Client-Secret und JWT-Secret. Sie darf niemals:
- In git commitet werden (steht in
.gitignore— nicht überschreiben) - Öffentlich zugänglich sein
- In Screenshots oder Support-Anfragen geteilt werden
# Berechtigungen prüfen — sollte 600 sein (nur Eigentümer lesen/schreiben):
ls -la /opt/tesla-carview/backend/.env
# Korrigieren falls falsch:
chmod 600 /opt/tesla-carview/backend/.envTesla Carview protokolliert alle sicherheitsrelevanten Aktionen:
- Login-Versuche (Erfolg und Fehlschlag)
- Konto-Sperrungen
- Passwort-Änderungen
- Fahrzeugbefehl-Ausführungen
- Datenlöschungen
- Admin-Aktionen
Einsehen unter: Admin → Audit-Log
Exportieren: Admin → Audit-Log → CSV exportieren
Die nginx-Konfiguration von Tesla Carview enthält moderne Sicherheits-Header:
-
Content-Security-Policy(CSP) — verhindert XSS -
Strict-Transport-Security(HSTS) — erzwingt HTTPS -
X-Frame-Options: DENY— verhindert Clickjacking X-Content-Type-Options: nosniff-
Permissions-Policy— schränkt Browser-Features ein
Header prüfen: securityheaders.com
Sicherheitsproblem gefunden? Bitte verantwortungsvoll melden:
- Kein öffentliches GitHub-Issue öffnen
- E-Mail: siehe SECURITY.md im Repository
- Antwort wird innerhalb von 48 Stunden angestrebt
- SSH Key-basierte Auth aktiviert, Passwort-Auth deaktiviert
- Firewall aktiv (UFW), nur Ports 22/80/443 offen
- Fail2ban läuft
- Starkes Admin-Passwort (16+ Zeichen oder Passphrase)
- MFA für Admin-Konto aktiviert
-
.env-Datei-Berechtigungen auf 600 gesetzt - Auto-Updates aktiviert (OS + Tesla Carview)
- Regelmäßige Backups konfiguriert (siehe Backup & Wiederherstellung)
- Audit-Log regelmäßig geprüft
Dieses Wiki wird automatisch aus dem Repository generiert. Zuletzt aktualisiert: siehe Commits.
🇬🇧 Home · Installation · Troubleshooting · License | 🇩🇪 Startseite · Installation · Fehlerbehebung | 🇫🇷 Accueil | 🇪🇸 Inicio | 🇹🇷 Ana Sayfa | 🇬🇷 Αρχική
GitHub Repository · Report an Issue
Tesla Carview — non-commercial, self-hosted Tesla data logger · © Sven Krische
🇬🇧 English
🚀 Getting Started
🌐 Network & Infrastructure
⚙️ Configuration
🔐 Security
📱 Reference
🇩🇪 Deutsch
🚀 Einstieg
🌐 Netzwerk & Infrastruktur
⚙️ Konfiguration
🔐 Sicherheit
📱 Referenz
🇫🇷 Français
🚀 Démarrage
🌐 Réseau & Infrastructure
⚙️ Configuration
🔐 Sécurité
📱 Référence
🇪🇸 Español
🚀 Primeros pasos
🌐 Red & Infraestructura
⚙️ Configuración
🔐 Seguridad
📱 Referencia
🇹🇷 Türkçe
🚀 Başlarken
🌐 Ağ & Altyapı
⚙️ Yapılandırma
🔐 Güvenlik
📱 Başvuru