🎉 Feature: Enhanced log management & firewall integration in backend

This commit is contained in:
2025-06-01 13:54:05 +02:00
parent d6f00ab40d
commit 38202de49f
9 changed files with 799 additions and 118 deletions

View File

@@ -19,6 +19,7 @@ readonly HTTPS_SERVICE_NAME="myp-https"
readonly KIOSK_SERVICE_NAME="myp-kiosk"
readonly WATCHDOG_SERVICE_NAME="kiosk-watchdog"
readonly WATCHDOG_PYTHON_SERVICE_NAME="kiosk-watchdog-python"
readonly FIREWALL_SERVICE_NAME="myp-firewall"
readonly KIOSK_USER="kiosk"
readonly CURRENT_DIR="$(pwd)"
readonly INSTALL_LOG="/var/log/myp-install.log"
@@ -560,6 +561,7 @@ install_systemd_services() {
"$KIOSK_SERVICE_NAME.service"
"$WATCHDOG_SERVICE_NAME.service"
"$WATCHDOG_PYTHON_SERVICE_NAME.service"
"$FIREWALL_SERVICE_NAME.service"
)
for service_file in "${service_files[@]}"; do
@@ -603,6 +605,12 @@ enable_and_start_services() {
systemctl enable "$WATCHDOG_SERVICE_NAME" || warning "Fehler beim Aktivieren des Watchdog-Service"
systemctl start "$WATCHDOG_SERVICE_NAME" || warning "Fehler beim Starten des Watchdog-Service"
# Firewall-Service aktivieren (falls vorhanden)
if [ -f "$SYSTEM_SYSTEMD_DIR/$FIREWALL_SERVICE_NAME.service" ]; then
progress "Aktiviere Firewall-Service..."
systemctl enable "$FIREWALL_SERVICE_NAME" || warning "Fehler beim Aktivieren des Firewall-Service"
fi
log "✅ Services erfolgreich konfiguriert"
}
@@ -679,13 +687,16 @@ show_menu() {
echo -e "${GREEN}3)${NC} Nur Services installieren/aktualisieren"
echo -e " ${BLUE}→ Systemd-Services aus systemd/ Verzeichnis kopieren${NC}"
echo ""
echo -e "${GREEN}4)${NC} System-Test durchführen"
echo -e " ${BLUE}HTTPS-Verbindung und SSL-Zertifikat testen${NC}"
echo -e "${GREEN}4)${NC} Remote-Zugang konfigurieren (RDP + SSH + Firewall)"
echo -e " ${BLUE}SSH (user:raspberry), RDP (root:744563017196A), firewalld${NC}"
echo ""
echo -e "${GREEN}5)${NC} Beenden"
echo -e "${GREEN}5)${NC} System-Test durchführen"
echo -e " ${BLUE}→ HTTPS-Verbindung, SSL-Zertifikat, Remote-Zugang testen${NC}"
echo ""
echo -e "${GREEN}6)${NC} Beenden"
echo ""
echo -e "${CYAN}=================================================================${NC}"
echo -n "Ihre Wahl [1-5]: "
echo -n "Ihre Wahl [1-6]: "
}
# =========================== INSTALLATIONS-MODI ===========================
@@ -740,6 +751,17 @@ install_full_kiosk() {
configure_autologin
install_systemd_services
enable_and_start_services
# Frage nach Remote-Zugang
echo ""
echo -n "Remote-Zugang (RDP + SSH + Firewall) konfigurieren? [j/N]: "
read -r configure_remote
if [[ "$configure_remote" =~ ^[Jj]$ ]]; then
install_remote_access
configure_firewall
fi
test_application
cleanup_old_files
@@ -769,6 +791,23 @@ install_services_only() {
success "✅ Service-Installation abgeschlossen!"
}
install_remote_access_only() {
log "=== MODUS: NUR REMOTE-ZUGANG KONFIGURIEREN ==="
check_root
check_debian_system
check_internet_connection
install_remote_access
configure_firewall
test_remote_access
success "✅ Remote-Zugang-Konfiguration abgeschlossen!"
info "Zugang verfügbar über:"
info " 📡 SSH: ssh user@<ip-adresse> (Passwort: raspberry)"
info " 🖥️ RDP: <ip-adresse>:3389 (Benutzer: root, Passwort: 744563017196A)"
}
run_system_test() {
log "=== MODUS: SYSTEM-TEST ==="
@@ -777,7 +816,7 @@ run_system_test() {
# Zusätzliche Tests
progress "Prüfe Service-Status..."
local services=("$HTTPS_SERVICE_NAME" "$KIOSK_SERVICE_NAME" "$WATCHDOG_SERVICE_NAME")
local services=("$HTTPS_SERVICE_NAME" "$KIOSK_SERVICE_NAME" "$WATCHDOG_SERVICE_NAME" "$FIREWALL_SERVICE_NAME")
for service in "${services[@]}"; do
if systemctl is-enabled --quiet "$service" 2>/dev/null; then
@@ -791,9 +830,220 @@ run_system_test() {
fi
done
# Remote-Zugang testen (falls konfiguriert)
if systemctl is-enabled --quiet ssh 2>/dev/null || systemctl is-enabled --quiet xrdp 2>/dev/null; then
test_remote_access
else
info " Remote-Zugang nicht konfiguriert"
fi
success "✅ System-Test abgeschlossen!"
}
# =========================== RDP & SSH ZUGANG ===========================
install_remote_access() {
log "=== INSTALLIERE REMOTE-ZUGANG (RDP & SSH) ==="
# SSH-Server installieren und konfigurieren
progress "Installiere und konfiguriere SSH-Server..."
apt-get install -y openssh-server || error "SSH-Server Installation fehlgeschlagen"
# SSH-Service aktivieren
systemctl enable ssh
systemctl start ssh
# SSH-Benutzer 'user' erstellen (falls nicht vorhanden)
if ! id "user" &>/dev/null; then
progress "Erstelle SSH-Benutzer: user"
useradd -m -s /bin/bash user || error "Kann SSH-Benutzer nicht erstellen"
echo "user:raspberry" | chpasswd || error "Kann Passwort für SSH-Benutzer nicht setzen"
usermod -aG sudo user 2>/dev/null || true
log "✅ SSH-Benutzer 'user' erstellt mit Passwort 'raspberry'"
else
info "SSH-Benutzer 'user' existiert bereits"
echo "user:raspberry" | chpasswd || warning "Konnte Passwort für SSH-Benutzer nicht aktualisieren"
fi
# RDP-Server (xrdp) installieren
progress "Installiere RDP-Server (xrdp)..."
# Minimale Desktop-Umgebung für RDP installieren
progress "Installiere minimale Desktop-Umgebung für RDP..."
apt-get install -y tasksel || error "tasksel Installation fehlgeschlagen"
# XFCE als leichtgewichtige Desktop-Umgebung installieren
progress "Installiere XFCE Desktop-Umgebung..."
apt-get install -y xfce4 xfce4-goodies || error "XFCE Installation fehlgeschlagen"
# xrdp installieren
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
# xrdp-Service aktivieren
systemctl enable xrdp
systemctl start xrdp
# SSL-Zertifikate für xrdp erstellen
progress "Erstelle SSL-Zertifikate für xrdp..."
mkdir -p /etc/xrdp/certs
cd /etc/xrdp/certs
openssl req -x509 -newkey rsa:2048 -nodes -keyout key.pem -out cert.pem -days 3650 \
-subj "/C=DE/ST=Baden-Wuerttemberg/L=Stuttgart/O=Mercedes-Benz/OU=IT/CN=myp-rdp" \
|| error "SSL-Zertifikat-Generierung für xrdp fehlgeschlagen"
# Berechtigungen für xrdp-Zertifikate setzen
chown -R xrdp:xrdp /etc/xrdp/certs
chmod 0644 /etc/xrdp/certs/cert.pem
chmod 0600 /etc/xrdp/certs/key.pem
# xrdp-Konfiguration für TLS
progress "Konfiguriere xrdp für TLS..."
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.backup
cat > /etc/xrdp/xrdp.ini << 'EOF'
[Globals]
ini_version=1
fork=true
port=3389
tcp_nodelay=true
tcp_keepalive=true
security_layer=tls
certificate=/etc/xrdp/certs/cert.pem
key_file=/etc/xrdp/certs/key.pem
ssl_protocols=TLSv1.2, TLSv1.3
autorun=
allow_channels=true
allow_multimon=true
bitmap_cache=true
bitmap_compression=true
bulk_compression=true
max_bpp=32
new_cursors=true
use_fastpath=both
require_credentials=true
ask_for_reconnect_reason=true
enable_token_login=true
[Xorg]
name=Xorg
lib=libxup.so
username=ask
password=ask
ip=127.0.0.1
port=-1
code=20
EOF
# Root-Passwort für RDP setzen
progress "Setze Root-Passwort für RDP-Zugang..."
echo "root:744563017196A" | chpasswd || error "Kann Root-Passwort nicht setzen"
# xrdp-Service neu starten
systemctl restart xrdp
cd "$CURRENT_DIR"
log "✅ Remote-Zugang konfiguriert:"
log " 📡 SSH: user:raspberry (Port 22)"
log " 🖥️ RDP: root:744563017196A (Port 3389)"
}
# =========================== FIREWALL KONFIGURATION ===========================
configure_firewall() {
log "=== KONFIGURIERE FIREWALL (firewalld) ==="
# firewalld installieren
progress "Installiere firewalld..."
apt-get install -y firewalld || error "firewalld Installation fehlgeschlagen"
# firewalld aktivieren und starten
systemctl enable firewalld
systemctl start firewalld
# Warte kurz bis firewalld vollständig gestartet ist
sleep 3
progress "Konfiguriere firewalld-Zonen und -Regeln..."
# Zone definieren
firewall-cmd --permanent --new-zone=myp-backend 2>/dev/null || true
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/24
# Nur HTTPS für API & Kiosk zulassen
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp
# SSH für Wartung
firewall-cmd --permanent --zone=myp-backend --add-service=ssh
# RDP für Remote-Desktop
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp
# Default-Zone setzen
firewall-cmd --set-default-zone=myp-backend
# Änderungen übernehmen
firewall-cmd --reload
# Firewall-Status anzeigen
progress "Firewall-Konfiguration:"
firewall-cmd --list-all-zones | grep -A 10 "myp-backend" || true
log "✅ Firewall konfiguriert:"
log " 🔒 Zone: myp-backend (192.168.0.0/24)"
log " 🌐 HTTPS: Port 443/tcp"
log " 📡 SSH: Port 22/tcp"
log " 🖥️ RDP: Port 3389/tcp"
}
# =========================== REMOTE-ZUGANG TESTEN ===========================
test_remote_access() {
log "=== TESTE REMOTE-ZUGANG ==="
# SSH-Service testen
progress "Teste SSH-Service..."
if systemctl is-active --quiet ssh; then
success "✅ SSH-Service läuft"
# SSH-Port testen
if ss -tlnp | grep -q ":22 "; then
success "✅ SSH-Port 22 ist offen"
else
warning "⚠️ SSH-Port 22 nicht erreichbar"
fi
else
error "❌ SSH-Service läuft nicht"
fi
# RDP-Service testen
progress "Teste RDP-Service..."
if systemctl is-active --quiet xrdp; then
success "✅ RDP-Service läuft"
# RDP-Port testen
if ss -tlnp | grep -q ":3389 "; then
success "✅ RDP-Port 3389 ist offen"
else
warning "⚠️ RDP-Port 3389 nicht erreichbar"
fi
else
error "❌ RDP-Service läuft nicht"
fi
# Firewall-Status testen
progress "Teste Firewall-Status..."
if systemctl is-active --quiet firewalld; then
success "✅ Firewall läuft"
# Aktive Zone anzeigen
local active_zone=$(firewall-cmd --get-active-zones | head -1)
info "Aktive Zone: $active_zone"
else
warning "⚠️ Firewall läuft nicht"
fi
log "✅ Remote-Zugang-Test abgeschlossen"
}
# =========================== HAUPTPROGRAMM ===========================
main() {
# Erstelle Log-Datei
@@ -823,17 +1073,23 @@ main() {
read -r
;;
4)
run_system_test
install_remote_access_only
echo ""
echo -n "Drücken Sie Enter um fortzufahren..."
read -r
;;
5)
run_system_test
echo ""
echo -n "Drücken Sie Enter um fortzufahren..."
read -r
;;
6)
log "Setup-Skript beendet"
exit 0
;;
*)
error "Ungültige Auswahl. Bitte wählen Sie 1-5."
error "Ungültige Auswahl. Bitte wählen Sie 1-6."
;;
esac
done