# MYP Druckerverwaltung - Setup-Anleitung

## Übersicht

Das neue konsolidierte `setup.sh` Skript ersetzt alle bisherigen Installationsskripte und bietet eine benutzerfreundliche Menüführung für verschiedene Installationsmodi.

## Voraussetzungen

- **Betriebssystem**: Debian/Raspbian (Raspberry Pi OS)
- **Berechtigung**: Root-Zugriff (sudo)
- **Internetverbindung**: Für Paket-Downloads erforderlich
- **Hardware**: Raspberry Pi oder kompatibles Debian-System

## Neue Struktur

### Dateien
- `setup.sh` - Konsolidiertes Hauptinstallationsskript
- `systemd/` - Verzeichnis mit allen systemd-Service-Dateien
  - `myp-https.service` - HTTPS-Backend-Service
  - `myp-kiosk.service` - Kiosk-Browser-Service
  - `kiosk-watchdog.service` - Überwachungsservice
  - `kiosk-watchdog-python.service` - Python-Watchdog-Service

### Entfernte Dateien
- `combined.sh` - Konsolidiert in `setup.sh`
- `installer.sh` - Konsolidiert in `setup.sh`

## Installationsmodi

### 1. Abhängigkeiten installieren für manuelles Testen

**Zweck**: System vollständig vorbereiten für manuelle Tests und Entwicklung

**Was wird installiert**:
- Python 3 und pip
- Node.js und npm
- SSL-Zertifikate (inkl. Mercedes Corporate)
- Python-Pakete (Flask, SQLAlchemy, etc.)
- npm-Abhängigkeiten
- Anwendungsdeployment nach `/opt/myp`
- SSL-Zertifikat-Generierung
- Minimaler Funktionstest

**Verwendung**:
```bash
sudo ./setup.sh
# Wähle Option 1
```

**Ideal für**:
- Entwicklungsumgebungen
- Manuelle Tests und Debugging
- Systeme ohne automatischen Kiosk-Modus
- Erste Installation und Validierung

**Nach der Installation**:
- HTTPS-Backend manuell starten: `cd /opt/myp && python3 app.py`
- System bereit für Entwicklung und Tests

### 2. Vollständige Kiosk-Installation mit Remote-Zugang

**Zweck**: Komplette Produktionsinstallation mit automatischem Kiosk-Modus

**Was wird konfiguriert**:
- Alle Abhängigkeiten (automatisch falls noch nicht installiert)
- Desktop-Environments vollständig entfernen
- Minimale X11-Umgebung installieren
- **SSH-Server** mit Benutzer `user:raspberry`
- **RDP-Server (xrdp)** mit TLS für `root:744563017196A`
- **XFCE Desktop-Umgebung** für RDP-Sessions
- **firewalld** mit erweiterten Netzwerk-Regeln
- Kiosk-Benutzer erstellen und konfigurieren
- **Automatischen Login** auf tty1 konfigurieren
- **Automatischen Kiosk-Start** beim Login einrichten
- Systemd-Services installieren und aktivieren
- Umfassende System-Tests
- Alte Dateien aufräumen

**Verwendung**:
```bash
sudo ./setup.sh
# Wähle Option 2
```

**Ideal für**:
- Produktionsumgebungen
- Dedizierte Kiosk-Systeme
- Finale Deployment mit Remote-Administration
- Vollautomatische Systeme

**Nach der Installation**:
- **Neustart erforderlich**: `sudo reboot`
- Automatischer Kiosk-Modus beim Boot
- Remote-Zugang verfügbar über SSH und RDP

## Systemd-Services

### myp-https.service
- **Zweck**: HTTPS-Backend auf Port 443
- **Benutzer**: root (für privilegierten Port)
- **Abhängigkeiten**: network.target
- **SSL**: Automatische Zertifikat-Generierung

### myp-kiosk.service
- **Zweck**: Chromium-Browser im Kiosk-Modus
- **Benutzer**: kiosk
- **Abhängigkeiten**: myp-https.service, graphical-session.target
- **Features**: Vollbild, SSL-Ignorierung, automatische Auflösungserkennung

### kiosk-watchdog.service
- **Zweck**: Intelligente Systemüberwachung
- **Funktionen**:
  - HTTPS-Backend-Überwachung
  - SSL-Zertifikat-Überwachung
  - Kiosk-Session-Überwachung
  - Speicher-Überwachung
  - Automatische Neustarts

### kiosk-watchdog-python.service
- **Zweck**: Python-basierte Überwachung
- **Ergänzung**: Zusätzliche Überwachungsfunktionen

### myp-firewall.service
- **Zweck**: Automatische Firewall-Konfiguration beim Systemstart
- **Benutzer**: root
- **Abhängigkeiten**: firewalld.service
- **Funktionen**:
  - Zone `myp-backend` für Netzwerk 192.168.0.0/24
  - HTTPS-Port 443/tcp
  - SSH-Port 22/tcp
  - RDP-Port 3389/tcp
  - Automatische Aktivierung beim Boot

## Konfiguration

### SSL-Zertifikate

**Mercedes Corporate Zertifikate**:
- Automatische Installation aus `certs/mercedes/`
- Unterstützte Formate: .crt, .pem, .cer
- DER-zu-PEM Konvertierung

**Localhost-Zertifikat**:
- Automatische Generierung für HTTPS
- Gültigkeitsdauer: 365 Tage
- Speicherort: `/opt/myp/certs/localhost/`

### Kiosk-Benutzer

**Benutzer**: `kiosk`
- Automatischer Login auf tty1
- Gruppen: audio, video, input, dialout, plugdev, users
- Passwortlos für Sicherheit

### Remote-Zugang

**SSH-Zugang**:
- Benutzer: `user`
- Passwort: `raspberry`
- Port: 22
- Sudo-Berechtigung: ja

**RDP-Zugang**:
- Benutzer: `root`
- Passwort: `744563017196A`
- Port: 3389
- Desktop: XFCE
- Verschlüsselung: TLS 1.2/1.3

**Firewall-Konfiguration**:
- Zone: `myp-backend`
- Quell-Netzwerke: 
  - `192.168.0.0/16` (erweitertes lokales Netzwerk)
  - `127.0.0.1/32` (localhost IPv4)
  - `raspberrypi` (lokaler Hostname - automatisch gesetzt)
  - `m040tbaraspi001` (Frontend-Server - falls auflösbar)
- Erlaubte Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)
- **IPv6 vollständig deaktiviert und blockiert**
- Automatische Konfiguration beim Systemstart

### Hostname-Konfiguration

**Automatische Hostname-Setzung**:
- Lokaler Hostname wird automatisch auf `raspberrypi` gesetzt
- `/etc/hostname` und `/etc/hosts` werden entsprechend aktualisiert
- Hostname-Auflösung wird getestet und konfiguriert
- Firewall-Integration für lokalen Hostname

**Frontend-Server Integration**:
- `m040tbaraspi001` wird als separater Frontend-Server behandelt
- Automatische IP-Auflösung für `m040tbaraspi001` und `m040tbaraspi001.de040.corpintra.net`
- Firewall-Regel wird hinzugefügt, falls der Server auflösbar ist
- Keine Abhängigkeit - System funktioniert auch ohne Frontend-Server

### Netzwerk-Sicherheit

**IPv6-Deaktivierung**:
- Vollständige Deaktivierung auf Kernel-Ebene
- GRUB-Konfiguration: `ipv6.disable=1`
- Sysctl-Konfiguration für alle Interfaces
- NetworkManager/systemd-networkd Konfiguration
- Firewall blockiert alle IPv6-Pakete

**IP-Spoofing-Schutz**:
- Reverse Path Filtering aktiviert
- Source Routing deaktiviert
- ICMP Redirects ignoriert
- Secure Redirects deaktiviert

**DDoS-Schutz**:
- SYN-Flood-Schutz mit SYN-Cookies
- Optimierte TCP-Backlog-Größe
- Begrenzte SYN/SYNACK-Wiederholungen
- Broadcast-Ping-Schutz (Smurf-Angriffe)

**TCP-Optimierungen**:
- RFC-konforme Retry-Limits
- Optimierte Window-Skalierung
- Deaktivierte TCP-Timestamps (Anti-Fingerprinting)
- Deaktivierte TCP-SACK (Sicherheit)
- Time-Wait-Assassination-Schutz

**Logging und Monitoring**:
- Martian-Pakete werden geloggt
- Verdächtige Netzwerkaktivitäten protokolliert
- Bogus ICMP-Antworten ignoriert

### Verzeichnisstruktur

```
/opt/myp/                    # Hauptanwendungsverzeichnis
├── app.py                   # Flask-Hauptanwendung
├── models.py                # Datenbankmodelle
├── blueprints/              # Flask-Blueprints
├── config/                  # Konfigurationsdateien
├── database/                # SQLite-Datenbank
├── static/                  # Statische Dateien (CSS, JS)
├── templates/               # HTML-Templates
├── uploads/                 # Upload-Verzeichnis
├── utils/                   # Hilfsfunktionen
├── logs/                    # Log-Dateien
└── certs/                   # SSL-Zertifikate
    └── localhost/           # Localhost-Zertifikate
```

## Logging

**Installationslog**: `/var/log/myp-install.log`
**Service-Logs**: `journalctl -u <service-name>`
**Watchdog-Log**: `/var/log/kiosk-watchdog.log`

## Fehlerbehebung

### Häufige Probleme

1. **HTTPS-Backend nicht erreichbar**
   ```bash
   sudo systemctl status myp-https
   sudo journalctl -u myp-https -f
   ```

2. **Kiosk-Browser startet nicht**
   ```bash
   sudo systemctl status myp-kiosk
   sudo journalctl -u myp-kiosk -f
   ```

3. **SSL-Zertifikat-Probleme**
   ```bash
   sudo ./setup.sh
   # Option 5 für System-Test
   ```

4. **Service-Neustart**
   ```bash
   sudo systemctl restart myp-https
   sudo systemctl restart kiosk-watchdog
   ```

5. **SSH-Verbindung fehlgeschlagen**
   ```bash
   # SSH-Service prüfen
   sudo systemctl status ssh
   
   # SSH-Port prüfen
   sudo ss -tlnp | grep :22
   
   # Firewall-Regeln prüfen
   sudo firewall-cmd --list-all
   ```

6. **RDP-Verbindung fehlgeschlagen**
   ```bash
   # xrdp-Service prüfen
   sudo systemctl status xrdp
   
   # RDP-Port prüfen
   sudo ss -tlnp | grep :3389
   
   # xrdp-Logs prüfen
   sudo journalctl -u xrdp -f
   ```

7. **Firewall-Probleme**
   ```bash
   # Firewall-Status prüfen
   sudo systemctl status firewalld
   
   # Aktive Zonen anzeigen
   sudo firewall-cmd --get-active-zones
   
   # Zone-Konfiguration prüfen
   sudo firewall-cmd --zone=myp-backend --list-all
   
   # Firewall neu konfigurieren
   sudo ./setup.sh
   # Option 4 für Remote-Zugang
   ```

### Manuelle Service-Verwaltung

```bash
# Services aktivieren
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog myp-firewall

# Services starten
sudo systemctl start myp-https myp-kiosk kiosk-watchdog

# Remote-Services aktivieren
sudo systemctl enable ssh xrdp firewalld
sudo systemctl start ssh xrdp firewalld

# Status prüfen
sudo systemctl status myp-https myp-kiosk kiosk-watchdog myp-firewall
sudo systemctl status ssh xrdp firewalld

# Logs anzeigen
sudo journalctl -u myp-https -f
sudo journalctl -u xrdp -f
sudo journalctl -u firewalld -f
```

## Wartung

### Regelmäßige Aufgaben

1. **System-Updates**
   ```bash
   sudo apt update && sudo apt upgrade -y
   ```

2. **Log-Rotation**
   - Automatisch durch systemd
   - Watchdog rotiert eigene Logs bei >10MB

3. **SSL-Zertifikat-Erneuerung**
   - Automatisch durch Watchdog bei Ablauf
   - Manuell: Option 1 im Setup-Skript

4. **System-Test**
   ```bash
   sudo ./setup.sh
   # Option 5
   ```

## Sicherheit

### Implementierte Maßnahmen

- **Minimale Berechtigungen**: Services laufen mit minimal nötigen Rechten
- **SSL-Verschlüsselung**: HTTPS für alle Verbindungen
- **Systemd-Härtung**: NoNewPrivileges, ProtectSystem
- **Automatische Updates**: Watchdog überwacht und repariert
- **Passwortlose Kiosk**: Reduziert Angriffsfläche

### Empfohlene Zusatzmaßnahmen

- Firewall-Konfiguration
- SSH-Schlüssel statt Passwörter
- Regelmäßige Backups
- Monitoring der Log-Dateien

## Migration von alten Installationen

Wenn Sie eine bestehende Installation mit `combined.sh` oder `installer.sh` haben:

1. **Backup erstellen**
   ```bash
   sudo cp -r /opt/myp /opt/myp.backup
   ```

2. **Neue Installation**
   ```bash
   sudo ./setup.sh
   # Option 3 für Service-Update
   ```

3. **Konfiguration übertragen**
   - Datenbank-Dateien
   - Upload-Verzeichnisse
   - Benutzerdefinierte Konfigurationen

## Support

Bei Problemen:

1. **Log-Dateien prüfen**
2. **System-Test durchführen** (Option 5)
3. **Services neu starten**
4. **Installation wiederholen** mit entsprechender Option

Das konsolidierte Setup-System bietet maximale Flexibilität bei minimaler Komplexität und ermöglicht sowohl Entwicklungs- als auch Produktionsumgebungen. 