
Authentik Multi Setup
30. April 2026
GitLab Community Edition – Sichere Installation hinter Nginx Proxy Manager
6. August 2026
Hochsicherheits-Komplettanleitung: Multi-App-Setup unter Debian 13
Schritt 1: System-Härtung (SSH & Firewall)
Logge dich als
root ein, erstelle einen Admin-User und sichere das System analog zum Tutorial ab.# 1. System auf den neuesten Stand bringen apt update && apt upgrade -y # 2. Neuen User anlegen (Ersetze 'deinuser' durch deinen Namen) adduser deinuser usermod -aG sudo deinuser # 3. SSH-Konfiguration anpassen sudo nano /etc/ssh/sshd_config # 4. Root-Login verbieten & SSH absichern # Wir erlauben den Login nur für deinen neuen User sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config # Diese Zeilen suchen und so anpassen (entferne das '#' falls vorhanden): PermitRootLogin no PasswordAuthentication yes # 5. SSH neu starten sudo systemctl restart ssh
Wichtig: Logge dich ab jetzt nur noch mit deinuser ein!
Schritt 2: Firewall (UFW) & Fail2Ban
Wir lassen nur das Nötigste durch und sperren Angreifer automatisch aus.
sudo apt update && sudo apt upgrade -y sudo apt install -y ufw fail2ban curl wget # Firewall-Regeln (SSH, Web & Admin-Ports) sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh # WICHTIG: SSH erlauben, damit du dich nicht aussperrst! sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 81/tcp # Für NPM Admin-Panel sudo ufw enable # Fail2Ban starten (schützt SSH sofort vor Brute-Force) sudo systemctl enable --now fail2ban
sudo nano /etc/fail2ban/jail.local [sshd] enabled = true maxretry = 3 findtime = 10m bantime = 1h sudo systemctl restart fail2ban
Kontrolle
sudo fail2ban-client status sshd
Du solltest sehen:
- aktive Jails
- gebannte IPs (falls vorhanden)
Schritt 3: Docker & Netzwerk-Fix
Wir installieren Docker und erstellen das Brücken-Netzwerk für die interne Kommunikation.
bash
# Docker installieren curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Das Netzwerk 'proxy-nw' manuell erstellen (löst deinen Start-Fehler) docker network create proxy-nw || true
Docker & Dual-Stack-Netzwerk
Optimierung für korrekte Client-IPs und IPv6-Support.
Erstelle
/etc/docker/daemon.json:{
"userland-proxy": false,
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"ip6tables": true
}
systemctl restart docker docker network create --ipv6 proxy-nw
Schritt 4: Nginx Proxy Manager (NPM) Setup
bash
mkdir -p ~/npm && cd ~/npm
cat <<EOF > docker-compose.yml
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-server
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '81:81'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- proxy-nw
networks:
proxy-nw:
external: true
EOF
docker compose up -d
Ändere das Port-Mapping für den Admin-Port von - '81:81' auf `- '127.0.0.1:81:81' (oder entferne die Zeile ganz, wenn du den Port 81 nur noch intern über das Docker-Netzwerk ansprechen willst):
cd ~/npm
nano docker-compose.yml
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-server
restart: unless-stopped
ports:
- '80:80'
- '443:443'
- '127.0.0.1:81:81' # Lauscht NUR noch lokal auf dem Server, blockiert das Internet
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
networks:
- proxy-nw
networks:
proxy-nw:
external: true
docker compose up -d
Schritt 5: Ordnerstruktur für die Anwendungen anlegen
Melde dich als dein neuer Benutzer (
deinuser) an. Erstelle eine strukturierte Verzeichnisumgebung im Heimatverzeichnis, um alle Konfigurationen und persistenten Daten sauber zu trennen:mkdir -p ~/infra/{grafana/data,paperless/{data,media,export,consume},uptime-kuma/data,peertube/{data,config},mastodon/{public/system,postgres14}}
# 1. Öffne die Hosts-Datei
sudo nano /etc/hosts
# 2. Füge den Hostnamen am Ende der Zeile für 127.0.0.1 hinzu, sodass sie so aussieht:
127.0.0.1 localhost.localdomain localhost ihrhostname
# 3. Speichern und Schließen (Strg+O, Enter, Strg+X)
Schritt 6: Finale Absicherung
# Ports in der Firewall schließen sudo ufw delete allow 81/tcp
Das Zusammenspiel mit deinem bestehenden System (NPM-Routing)
grafana.deinedomain.at->http://grafana-app:3000uptime.deinedomain.at->http://uptime-kuma-app:3001(Hier zwingend Websockets Support aktivieren)

