🔒 Debian Server Absicherung

Sichere deinen Debian-Server mit SSH-Key-Authentifizierung, Firewall (UFW) und CrowdSec. In diesem Tutorial richten wir Schritt für Schritt einen sicheren Zugang ein und schützen den Server vor Angriffen.

1. Erste Verbindung zum Server

Verbindung via PuTTY / SSH

Unter Hostname tragt ihr die IP-Adresse eures Servers ein. Port 22 bleibt erstmal, dann klickt auf Open.

Die Einblendung für den Fingerprint einmal bestätigen.

Loggt euch als root ein. Das Passwort habt ihr beim Bestellen des Servers bekommen bzw. festgelegt.

PuTTY Hostname und Port eingeben
PuTTY – Hostname & Port eingeben
Fingerprint-Bestätigung
PuTTY – Fingerprint-Bestätigung

2. SSH User Erstellen & Login Absichern

System aktualisieren

Sobald ihr euch das erste Mal angemeldet habt, bringt das System auf den neusten Stand:

apt update && apt upgrade -y

Neuen Benutzer erstellen

Wir erstellen einen neuen Benutzer mit SSH- und Sudo-Rechten. Für diesen Benutzer erstellen wir zusätzlich einen SSH-Schlüssel und blockieren den Root-Login via SSH.

[username = beliebiger Name für den Benutzer, z.B. hans – muss kleingeschrieben sein]

adduser --shell /bin/bash username

Anschließend den User den benötigten Gruppen zuweisen. Auf Debian 12/13 heißt die SSH-Gruppe _sshadduser --ingroup lehnt Namen mit Unterstrich ab, daher via usermod:

# Debian 12 / 13:
usermod -aG _ssh,sudo username

# Debian 10 / 11:
# usermod -aG ssh,sudo username

SSH-Konfiguration anpassen

Wir bearbeiten die SSH-Konfigurations-Datei, um den Port zu ändern, Root-Login zu blockieren und nur SSH-Key-Login zuzulassen.

⚠️ Vorsicht beim Eingeben! Sollte ein # vor der jeweiligen Zeile sein, entfernt das #.

nano /etc/ssh/sshd_config

Folgende Einstellungen anpassen:

  • Port → Zahl zwischen 30000 und 65535 (z.B. 40822)
  • PermitRootLogin → von yes auf no ändern
  • AllowUsers username → unter MaxSessions eintragen (muss man selbst hinzufügen)
  • PubkeyAuthenticationyes
  • PasswordAuthenticationno

Speichern mit STRG + OEnter zum Bestätigen → STRG + X zum Schließen.

sshd_config Konfiguration
sshd_config – Konfiguration

3. ED25519 – SSH-Schlüssel

Warum ED25519 statt RSA?

ED25519 ist ein modernes kryptografisches Verfahren, das auf der Edwards-Kurve basiert. Es bietet bei kürzerer Schlüssellänge (256 Bit) eine höhere Sicherheit als ein 4096-Bit RSA-Schlüssel – und ist dabei schneller zu generieren und zu validieren.

  • Sicherheit — stärkere Sicherheit bei kürzeren Schlüsseln
  • Leistung — schnellere Generierung und Validierung
  • Einfachheit — weniger Speicher und Bandbreite nötig

Quellen: Wikipedia zu ED25519 · UnixTutorial

SSH-Key erstellen

Zum neuen Benutzer wechseln und ED25519-Schlüssel generieren:

su username
ssh-keygen -t ed25519 -C "Kommentar oder E-Mail"

Den Dateinamen bestätigen: /home/username/.ssh/ed25519Enter. Passphrase aktivieren (zusätzliches Passwort für den Schlüssel).

ssh-keygen Ausgabe im Terminal
ssh-keygen – Ausgabe im Terminal

Schlüssel einbinden

Den öffentlichen Schlüssel in die authorized_keys umbenennen und Berechtigungen setzen:

mv /home/username/.ssh/id_ed25519.pub /home/username/.ssh/authorized_keys
chmod 700 /home/username/.ssh
chmod 600 /home/username/.ssh/authorized_keys

Privaten Schlüssel sichern

Den privaten Schlüssel anzeigen und kopieren:

cat /home/username/.ssh/id_ed25519

Markiert die komplette Ausgabe von -----BEGIN OPENSSH PRIVATE KEY----- bis -----END OPENSSH PRIVATE KEY-----.

Erstellt eine Textdatei auf dem Desktop, benennt sie sshkey (ohne .txt!) und fügt den kopierten Schlüssel ein.

4. SSH-Key in PuTTY einrichten

Key konvertieren

Öffnet PuTTYgen (wird zusammen mit PuTTY geliefert):

  1. Klickt auf Load und wählt unter Alle Dateien (*.*) eure gespeicherte sshkey-Datei aus
  2. Gebt das Passwort ein, das bei der Erstellung verwendet wurde
  3. Klickt auf Save private Key und vergebt einen Namen (z.B. DebianKey)

Ihr habt nun eine DebianKey.ppk-Datei. ⚠️ Dieser Schlüssel darf niemals verloren gehen! Er ist vergleichbar mit einem Wohnungsschlüssel.

PuTTYgen Key laden und speichern
PuTTYgen – Key laden & als .ppk speichern

5. SSH – Sudo Konfiguration

Sudoers prüfen

Wechselt zurück zum Root-User und öffnet die Sudoers-Datei:

su -
visudo

Überprüft, ob folgender Abschnitt vorhanden ist:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Sollte der Eintrag nicht vorhanden sein, fügt ihn unter #User privilege specification ein.

Speichern mit STRG + OEnterSTRG + X.

SSH-Dienst neu starten

service sshd restart

6. SSH-Verbindung testen

Neue Verbindung aufbauen

⚠️ Lasst das aktuelle Terminalfenster geöffnet! Falls ihr einen Fehler gemacht habt, könnt ihr eure Änderungen noch rückgängig machen.

Startet PuTTY erneut und konfiguriert:

  1. Unter Connection → SSH → Auth den SSH-Key einbinden (Browse → DebianKey.ppk auswählen)
  2. Zur Session zurückkehren
  3. IP-Adresse eintragen und den neuen SSH-Port (z.B. 40822) angeben
  4. Unter Saved Sessions einen Namen eingeben und Save klicken

Per Doppelklick verbinden → Benutzernamen eingeben → SSH-Key wird automatisch erkannt → Key-Passwort eingeben.

Wenn die Verbindung funktioniert, habt ihr alles richtig gemacht! ✅

PuTTY Auth Key einbinden
PuTTY – SSH-Key einbinden (Auth)
PuTTY Session mit neuem Port
PuTTY – Session speichern & neuer SSH-Port

7. CrowdSec & Firewall

Was ist CrowdSec?

CrowdSec ist ein modernes Sicherheitsprojekt zum Schutz von Servern, Diensten, Containern oder VMs. Es wurde als kollaborative und modernisierte Version von Fail2ban entwickelt.

Die Hauptaufgabe: Überwachung von Serveranfragen, Erkennung von auffälligen Verbindungsversuchen und automatische Sperrung bei DDoS, Brute-Force und mehr.

Firewall installieren (UFW)

UFW (Uncomplicated Firewall) ist ein einfaches Frontend zur Firewall-Verwaltung. Ab Debian 11 (und Ubuntu 20.04+) läuft UFW automatisch auf nftables als Backend – dem modernen Nachfolger von iptables. Ihr müsst nftables nicht extra installieren, es ist Bestandteil des Kernels.

Debian 10
iptables (klassisch)
Debian 11
nftables (Übergang)
Debian 12 / 13
● nftables (Standard)
apt install ufw -y

Die Abfrage mit JA bestätigen.

⚠️ Wichtig – Plesk oder andere Firewall-Lösungen:

UFW ist eine eigenständige Firewall. Wer bereits Plesk Firewall, CSF oder eine andere Host-Firewall betreibt, sollte nicht zusätzlich UFW aktivieren – zwei Firewalls gleichzeitig führen zu Konflikten.

Entscheidet euch für eine Lösung: UFW oder Plesk-Firewall – nicht beide.

Firewall konfigurieren

Bevor UFW aktiviert wird, zuerst alle benötigten Ports freigeben. Sobald UFW eingeschaltet wird, werden alle nicht explizit erlaubten Ports sofort gesperrt – einschließlich eurer SSH-Verbindung!

🚨 Achtung – Aussperrgefahr!

Stellt sicher, dass euer neuer SSH-Port freigegeben ist, bevor ihr ufw enable ausführt. Wer das vergisst, verliert die SSH-Verbindung und kommt nur noch über den Provider-Notfallzugang (z.B. KVM/VNC-Konsole) rein.

Schritt für Schritt:

# 1. Neuen SSH-Port freigeben (VOR dem Aktivieren!)
ufw allow 40822

# 2. Alten SSH-Port schließen
ufw delete allow 22

# 3. Logging aktivieren
ufw logging on

# 4. Firewall aktivieren – ab jetzt alle anderen Ports geschlossen
ufw enable

⚠️ Wenn ihr einen anderen SSH-Port gewählt habt, tragt diesen entsprechend ein!

CrowdSec Security Engine installieren

Die Security Engine überwacht Logs und analysiert verdächtige Aktivitäten:

curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | bash
apt install crowdsec

CrowdSec konfigurieren

API-Port anpassen (um Konflikte mit z.B. Pterodactyl zu vermeiden) und Datenbank optimieren:

nano /etc/crowdsec/config.yaml

Folgende Einstellungen anpassen:

  • db_config:use_wal: true
  • listen_uri: → von 127.0.0.1:8080 auf 127.0.0.1:8081 ändern

Lokale API-Credentials ebenfalls anpassen:

nano /etc/crowdsec/local_api_credentials.yaml
  • uri: → von http://127.0.0.1:8080 auf http://127.0.0.1:8081 ändern
systemctl restart crowdsec

CrowdSec Bouncer installieren

Der Bouncer setzt die Entscheidungen der Security Engine um und blockiert verdächtige IP-Adressen. CrowdSec liefert einen einzigen universellen Bouncer, der automatisch erkennt ob nftables oder iptables genutzt wird:

apt install crowdsec-firewall-bouncer

💡 Trotz des Namens ohne „-nftables": auf Debian 11/12/13 wird automatisch nftables verwendet – das Paket erkennt das Backend selbstständig.

Bouncer-Konfiguration anpassen:

nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
  • api_url: → von http://127.0.0.1:8080 auf http://127.0.0.1:8081 ändern

Pterodactyl-Kollektion (optional)

Falls ihr Pterodactyl nutzt, installiert die SFTP-Überwachung:

cscli collections install lourys/pterodactyl

Abschluss & Neustart

Port für CrowdSec freigeben und alle Dienste neu starten:

ufw allow 8081
systemctl restart ufw
systemctl restart crowdsec

✅ Geschafft!

Durch diese sicherheitsrelevanten Einstellungen und Installationen habt ihr einen robusten Schutzmechanismus aufgebaut. Euer Server ist nun deutlich besser vor DDoS, Brute-Force und anderen Angriffen geschützt.