📚 Improved logging structure & added backup file 🔜

This commit is contained in:
2025-06-01 14:39:46 +02:00
parent 3287b4558b
commit 7fa7da74af
29 changed files with 1139 additions and 64 deletions

View File

@@ -139,6 +139,149 @@ update_system() {
log "✅ System-Update abgeschlossen"
}
configure_network_security() {
log "=== KONFIGURIERE ERWEITERTE NETZWERK-SICHERHEIT ==="
# IPv6 vollständig deaktivieren
progress "Deaktiviere IPv6..."
# IPv6 in GRUB deaktivieren
if [ -f /etc/default/grub ]; then
cp /etc/default/grub /etc/default/grub.backup
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& ipv6.disable=1/' /etc/default/grub
sed -i 's/GRUB_CMDLINE_LINUX="[^"]*/& ipv6.disable=1/' /etc/default/grub
update-grub 2>/dev/null || true
fi
# IPv6 in sysctl deaktivieren
cat >> /etc/sysctl.conf << 'EOF'
# ===================================================================
# MYP Netzwerk-Sicherheitskonfiguration
# ===================================================================
# IPv6 vollständig deaktivieren
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# IP-Spoofing-Schutz aktivieren
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Source-Routing deaktivieren (verhindert IP-Spoofing)
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# ICMP-Redirects ignorieren (verhindert Man-in-the-Middle)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# Secure ICMP-Redirects ignorieren
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
# SYN-Flood-Schutz aktivieren
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5
# TCP-RFC-Compliance (verhindert aggressive Paketwiederholungen)
net.ipv4.tcp_retries1 = 3
net.ipv4.tcp_retries2 = 15
net.ipv4.tcp_orphan_retries = 3
# TCP-Window-Skalierung optimieren (geringere Netzwerkauslastung)
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 65536 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 5000
# Broadcast-Pings ignorieren (verhindert Smurf-Angriffe)
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Bogus ICMP-Antworten ignorieren
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Paketweiterleitung verhindern (Router-Funktionalität deaktivieren)
net.ipv4.ip_forward = 0
# Martian-Pakete loggen (verdächtige Pakete)
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1
# TCP-Timestamps deaktivieren (verhindert Fingerprinting)
net.ipv4.tcp_timestamps = 0
# TCP-SACK deaktivieren (verhindert bestimmte Angriffe)
net.ipv4.tcp_sack = 0
# TCP-Keepalive optimieren
net.ipv4.tcp_keepalive_time = 7200
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_intvl = 75
# Memory-Limits für Netzwerk-Buffers
net.core.rmem_default = 262144
net.core.wmem_default = 262144
# Schutz vor Time-Wait-Assassination
net.ipv4.tcp_rfc1337 = 1
EOF
# Sysctl-Einstellungen sofort anwenden
sysctl -p || warning "Einige sysctl-Einstellungen konnten nicht angewendet werden"
# IPv6 in Netzwerk-Interfaces deaktivieren
progress "Deaktiviere IPv6 in Netzwerk-Interfaces..."
# Für systemd-networkd
if systemctl is-enabled systemd-networkd 2>/dev/null; then
mkdir -p /etc/systemd/network
cat > /etc/systemd/network/99-disable-ipv6.network << 'EOF'
[Match]
Name=*
[Network]
IPv6AcceptRA=no
LinkLocalAddressing=no
EOF
systemctl restart systemd-networkd 2>/dev/null || true
fi
# Für NetworkManager
if systemctl is-enabled NetworkManager 2>/dev/null; then
cat > /etc/NetworkManager/conf.d/99-disable-ipv6.conf << 'EOF'
[main]
plugins=keyfile
[keyfile]
unmanaged-devices=none
[connection]
ipv6.method=ignore
EOF
systemctl restart NetworkManager 2>/dev/null || true
fi
# IPv6 in /etc/hosts auskommentieren
sed -i 's/^::1/#::1/' /etc/hosts 2>/dev/null || true
log "✅ Erweiterte Netzwerk-Sicherheit konfiguriert:"
log " 🚫 IPv6 vollständig deaktiviert"
log " 🛡️ IP-Spoofing-Schutz aktiviert"
log " 🔒 SYN-Flood-Schutz aktiviert"
log " 📝 Verdächtige Pakete werden geloggt"
log " 🚫 Paketweiterleitung deaktiviert"
log " ⚡ TCP-Performance optimiert"
log " 🔐 RFC-Compliance für TCP aktiviert"
}
# =========================== DESKTOP-ENVIRONMENT ENTFERNUNG ===========================
remove_desktop_environments() {
log "=== ENTFERNE DESKTOP ENVIRONMENTS FÜR KIOSK-MODUS ==="
@@ -823,7 +966,9 @@ install_dependencies_only() {
check_debian_system
check_internet_connection
configure_hostname
update_system
configure_network_security
install_python_dependencies
install_nodejs_npm
install_ssl_certificates
@@ -847,6 +992,7 @@ install_dependencies_only() {
success "✅ Abhängigkeiten-Installation abgeschlossen!"
info "Das System ist bereit für manuelle Tests und Entwicklung"
info "Hostname wurde auf 'raspberrypi' gesetzt"
info "HTTPS-Backend kann manuell gestartet werden mit:"
info " cd /opt/myp && python3 app.py"
}
@@ -858,10 +1004,14 @@ install_full_production_system() {
check_debian_system
check_internet_connection
# Hostname zuerst setzen
configure_hostname
# Führe zuerst Abhängigkeiten-Installation durch (falls noch nicht geschehen)
if [ ! -d "$APP_DIR" ] || [ ! -f "$APP_DIR/app.py" ]; then
warning "Anwendung noch nicht deployed - führe Abhängigkeiten-Installation durch..."
update_system
configure_network_security
install_python_dependencies
install_nodejs_npm
install_ssl_certificates
@@ -869,6 +1019,9 @@ install_full_production_system() {
deploy_application
install_npm_dependencies
generate_ssl_certificate
else
# Netzwerk-Sicherheit auch bei bestehender Installation konfigurieren
configure_network_security
fi
# Desktop-Environments entfernen und minimale X11 installieren
@@ -897,10 +1050,11 @@ install_full_production_system() {
success "✅ Vollständige Kiosk-Installation abgeschlossen!"
info "Das System ist vollständig konfiguriert:"
info " 🖥️ Hostname: raspberrypi"
info " 🖥️ Automatischer Kiosk-Modus beim Boot"
info " 📡 SSH: ssh user@<ip> (Passwort: raspberry)"
info " 🖥️ RDP: <ip>:3389 (Benutzer: root, Passwort: 744563017196A)"
info " 🔒 Firewall: 192.168.0.0/16 + localhost + m040tbaraspi001"
info " 🔒 Firewall: 192.168.0.0/16 + localhost + raspberrypi + m040tbaraspi001"
warning "⚠️ Neustart erforderlich für automatischen Kiosk-Start: sudo reboot"
}
@@ -1032,30 +1186,36 @@ configure_firewall() {
# Zone definieren
firewall-cmd --permanent --new-zone=myp-backend 2>/dev/null || true
# Erweiterte Netzwerk-Quellen definieren
# Erweiterte Netzwerk-Quellen definieren (nur IPv4)
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32
firewall-cmd --permanent --zone=myp-backend --add-source=::1/128
# Lokaler Hostname hinzufügen (falls auflösbar)
local local_hostname=$(hostname)
if [ -n "$local_hostname" ]; then
progress "Füge lokalen Hostname hinzu: $local_hostname"
# Versuche IP-Adresse des lokalen Hostnames zu ermitteln
local local_ip=$(getent hosts "$local_hostname" | awk '{print $1}' | head -1 2>/dev/null || true)
if [ -n "$local_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || true
fi
# Lokaler Hostname "raspberrypi" hinzufügen
local local_hostname="raspberrypi"
progress "Füge lokalen Hostname hinzu: $local_hostname"
local local_ip=$(getent hosts "$local_hostname" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
if [ -n "$local_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || true
log "✅ Lokaler Hostname $local_hostname hinzugefügt: $local_ip"
else
info "Lokaler Hostname $local_hostname nicht auflösbar - wird beim nächsten Boot verfügbar sein"
fi
# Remote-Hostname m040tbaraspi001 hinzufügen (falls auflösbar)
progress "Füge Remote-Hostname hinzu: m040tbaraspi001"
local remote_ip=$(getent hosts "m040tbaraspi001" | awk '{print $1}' | head -1 2>/dev/null || true)
if [ -n "$remote_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$remote_ip/32" 2>/dev/null || true
log "Remote-Hostname m040tbaraspi001 hinzugefügt: $remote_ip"
# Frontend-Server m040tbaraspi001 hinzufügen (falls auflösbar)
progress "Füge Frontend-Server hinzu: m040tbaraspi001"
local frontend_ip=$(getent hosts "m040tbaraspi001" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
if [ -n "$frontend_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || true
log "Frontend-Server m040tbaraspi001 hinzugefügt: $frontend_ip"
else
info "Remote-Hostname m040tbaraspi001 nicht auflösbar - überspringe"
# Versuche auch mit FQDN
local frontend_fqdn_ip=$(getent hosts "m040tbaraspi001.de040.corpintra.net" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
if [ -n "$frontend_fqdn_ip" ]; then
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || true
log "✅ Frontend-Server m040tbaraspi001.de040.corpintra.net hinzugefügt: $frontend_fqdn_ip"
else
info "Frontend-Server m040tbaraspi001 nicht auflösbar - überspringe"
fi
fi
# HTTPS für API & Kiosk zulassen
@@ -1067,6 +1227,11 @@ configure_firewall() {
# RDP für Remote-Desktop
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp
# IPv6 in firewalld deaktivieren
progress "Deaktiviere IPv6 in firewalld..."
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || true
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || true
# Default-Zone setzen
firewall-cmd --set-default-zone=myp-backend
@@ -1079,11 +1244,12 @@ configure_firewall() {
log "✅ Firewall konfiguriert:"
log " 🔒 Zone: myp-backend"
log " 🌐 Netzwerk: 192.168.0.0/16"
log " 🏠 Localhost: 127.0.0.1, ::1"
log " 🖥️ Lokaler Host: $local_hostname"
log " 📡 Remote Host: m040tbaraspi001"
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
log " 🏠 Localhost: 127.0.0.1"
log " 🖥️ Lokaler Host: raspberrypi"
log " 📡 Frontend-Server: m040tbaraspi001"
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
log " 🚫 IPv6 vollständig blockiert"
}
# =========================== REMOTE-ZUGANG TESTEN ===========================
@@ -1135,6 +1301,45 @@ test_remote_access() {
log "✅ Remote-Zugang-Test abgeschlossen"
}
# =========================== HOSTNAME KONFIGURATION ===========================
configure_hostname() {
log "=== KONFIGURIERE HOSTNAME ==="
local target_hostname="raspberrypi"
local current_hostname=$(hostname)
if [ "$current_hostname" != "$target_hostname" ]; then
progress "Setze Hostname von '$current_hostname' auf '$target_hostname'..."
# Hostname sofort setzen
hostnamectl set-hostname "$target_hostname" || error "Fehler beim Setzen des Hostnames"
# /etc/hostname aktualisieren
echo "$target_hostname" > /etc/hostname
# /etc/hosts aktualisieren
cp /etc/hosts /etc/hosts.backup
sed -i "s/127.0.1.1.*/127.0.1.1\t$target_hostname/" /etc/hosts
# Falls kein 127.0.1.1 Eintrag existiert, hinzufügen
if ! grep -q "127.0.1.1" /etc/hosts; then
echo "127.0.1.1 $target_hostname" >> /etc/hosts
fi
log "✅ Hostname erfolgreich auf '$target_hostname' gesetzt"
else
log "✅ Hostname bereits korrekt: '$target_hostname'"
fi
# Hostname-Auflösung testen
if getent hosts "$target_hostname" >/dev/null 2>&1; then
local resolved_ip=$(getent hosts "$target_hostname" | awk '{print $1}' | head -1)
log "✅ Hostname-Auflösung funktioniert: $target_hostname -> $resolved_ip"
else
warning "⚠️ Hostname-Auflösung für '$target_hostname' fehlgeschlagen"
fi
}
# =========================== NETZWERK-SICHERHEIT ===========================
configure_network_security() {
log "=== KONFIGURIERE ERWEITERTE NETZWERK-SICHERHEIT ==="