Debian Server Absichern

Erste Verbindung zum Server

Unter Hostname müsst ihr eure IP vom Server eintragen.
Port 22 bleibt erstmal und dann auf Open.
Die Einblendung für (Fingerprint) einmal bestätigen.

Nun loggt ihr euch als “root” ein.

Passwort habt ihr beim Bestellen des Servers bekommen bzw. festgelegt

SSH User Erstellen & Login Absichern

Sobald wir uns das erste Mal auf unseren Linux-Server angemeldet haben, müssen wir das System auf den neusten Stand bringen, um so eine Grundlage zu schaffen.

apt update && apt upgrade -y


Jetzt erstellen wir uns einen neuen Benutzer der SSH und Sudo Rechte bekommt, für diesen Benutzer erstellen wir zusätzlich noch einen SSH-Schlüssel und blockieren den reinen Login via SSH für den Root-Nutzer.

[username = beliebiger Name für den Benutzer. z.b. hans (Hinweis: der Name muss kleingeschrieben werden)]

adduser --shell /bin/bash --ingroup 'ssh' --ingroup 'sudo' username


Wir bearbeiten nun die SSH-Konfigurations-Datei, um den SSH-Port zu ändern, SSH-Root-Login zu blockieren und eine SSH - Verbindung nur via SSH-Schlüssel zu erlauben.
(Vorsicht beim Eingeben!) (Sollte ein [#] vor der jeweiligen Zeile sein, entfernt das #)

nano /etc/ssh/sshd_config

Port [Zahl zwischen 30000 und 65535] (z.b. 40822)

PermitRootLogin “yes" ändern zu "no

AllowUsers username (unter MaxSessions eintragen)(Muss man selber hinzufügen)

PubkeyAuthenication yes 

PasswordAuthentication no

Nun speichern mit STRG + O [Enter zum bestätigen] und mit STRG + X die Config schließen

ED25519: Ein sicheres und effizientes Verfahren für SSH-Schlüssel

ED25519 ist ein relativ neues kryptografisches Verfahren, das auf der Edwards-Kurve basiert und das EdDSA (Edwards-curve Digital Signature Algorithm) verwendet. Es wurde entwickelt, um eine höhere Sicherheit und Effizienz zu bieten als ältere Verfahren wie RSA. Der Hauptvorteil von ED25519 liegt in seiner kleineren Schlüssellänge (256 Bit), die eine ähnliche oder sogar höhere Sicherheit als ein 4096-Bit RSA-Schlüssel bietet, aber schneller zu generieren und zu validieren ist.

Ein weiterer Vorteil von ED25519 ist die beständigere Sicherheit gegenüber bestimmten Angriffen, wie beispielsweise Kollisionsangriffen, und die deterministische Signaturerstellung, die potenzielle Risiken bei der Erzeugung von Schlüsseln durch unsichere Zufallszahlen ausschließt.

Im Vergleich zu RSA benötigt ED25519 nur deutlich weniger Speicherplatz, was die Verwaltung und Übertragung der Schlüssel erleichtert und die Performance verbessert, insbesondere bei der Verwendung in SSH-Verbindungen.

Warum ED25519 statt RSA?

  • Sicherheit: ED25519 bietet bei kürzeren Schlüsseln eine stärkere Sicherheit.
  • Leistung: Die Generierung und Validierung von Schlüsseln erfolgt schneller.
  • Einfachheit: ED25519 erfordert weniger Speicher und Bandbreite.

Für die meisten modernen Anwendungen, insbesondere beim Sichern von SSH-Verbindungen, wird ED25519 aufgrund dieser Vorteile bevorzugt. Ältere RSA-Methoden (insbesondere mit Schlüsseln von 2048 Bit oder weniger) gelten heute als weniger sicher und langsamer.

SSH-Key Erstellen

Wir wechseln zu unserem neuen erstellten Benutzer und generieren uns einen ED25519 Schlüssel, mit Passwort und erhalten somit eine verbesserte Authentifizierung auf kryptografischer Technik für den SSH-Login.

su username

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

Bestätigt den Namen: "/home/username/.ssh/ed25519" mit Enter und aktiviert die Passphrase (Passwort), somit gebt ihr euren Schlüssel ein zusätzliches Passwort.


Nun müssen wir den erstellten öffentlichen Schlüssel, in die authorized_keys einbinden / umbennen, damit dieser Schlüssel an den Benutzer angebunden weerden kann.

mv /home/username/.ssh/ed25519.pub /home/username/.ssh/authorized_keys

chmod 700 /home/username/.ssh

chmod 600 /home/username/.ssh/authorized_keys

cat /home/username/.ssh/ed25519

Markiert die komplette Ausgabe, 

Von

[ -----BEGIN OPENSSH PRIVATE KEY----- ]

Bis

[ -----END OPENSSH PRIVATE KEY----- ]


(Damit wird der Key kopiert, erstellt euch eine Textdatei auf dem Desktop und benennt diese in “sshkey" (ohne .txt am Ende!) fügt nun den kopierten Schlüssel ein und speichert diese Datei.

SSH-Key in Putty

Wir benötigen zunächst das Programm "PuTTYgen", das zusammen mit PuTTY geliefert wird.

Öffnen Sie PuTTYgen und klicken Sie auf "Load". Wählen Sie unter der Kategorie "Alle Dateien (*.*)" unsere gespeicherte sshkey-Datei aus.


Geben Sie das Passwort ein, das bei der Erstellung verwendet wurde, und klicken Sie anschließend auf "Save private Key".


Vergeben Sie einen Namen für den Schlüssel, z. B. "DebianKey".


Nun sollten wir einen Schlüssel namens "DebianKey.ppk" besitzen.
Dieser Schlüssel ist wichtig und darf niemals verloren gehen.
Er ist vergleichbar mit einem Wohnungsschlüssel - wenn Sie ihn verlieren, haben Sie keinen Zugriff mehr auf das System.

SSH - Sudo Konfiguration

Wir wechseln zunächst erstmal wieder zum Root-User und öffnen die "Sudoers" Konfigurations-Datei.

su -

visudo


Wir müssen in der Datei nun überprüfen, ob folgender Abschnitt vorhanden ist:

# Allow members of group sudo to execute any command

%sudo   ALL=(ALL:ALL) ALL

Sollte der oben genannte Eintrag, nicht vorhanden sein,

Müssen wir unter “#User privilege specification” nachträglich einfügen.


Wir speichern mit STRG + O [Enter zum Bestätigen] und mit STRG + X die Konfiguration schließen.


Jetzt müssen wir den SSH Dienst noch neu starten, um die Änderungen wirksam zu machen.

service sshd restart

SSH Verbindung Testen

Lasst das aktuelle Terminalfenster (Putty) geöffnet.

(Falls ihr einen Fehler gemacht habt, könnt ihr euch aus diesem Terminalfenster ausschließen und somit eure Änderungen rückgängig machen.)


Startet nun erneut Putty.


Als Erstes müssen wir unseren erstellten SSH-Key in Putty einbinden.

Unter dem Abschnitt "Auth" könnt ihr euren Key einfügen. Klickt dazu auf "Browse" und wählt euren Key aus.


Beachtet: Wenn ihr euren Key auf eurem PC in ein anderes Verzeichnis verschoben habt, müsst ihr diese Änderung auch in Putty anpassen.

Nun könnt ihr zur Sitzung (Session) zurückkehren.

Gebt unter "Host Name" erneut die IP-Adresse eures Servers ein. Beachtet jedoch, dass ihr den neuen SSH-Port angebt, den ihr zuvor in der "sshd_config" festgelegt habt.


Unter "Saved Sessions" könnt ihr einen Namen eingeben und mit "Save" speichern. 


Dadurch habt ihr eine Schnellverbindung zu eurem Server mit dem SSH-Key, ohne immer alles neu eingeben zu müssen.

Verbindet euch nun durch Doppelklick auf euren Server.


Wenn die Verbindung hergestellt ist, müsst ihr euch mit eurem [Benutzernamen] anmelden.


Der SSH-Key sollte nun automatisch erkannt werden.

Gebt nun das Passwort ein, das ihr für euren Key erstellt habt.

Wenn dies funktioniert, habt ihr alles richtig gemacht.

Crowdsec und die Firewall

CrowdSec ist ein neues Sicherheitsprojekt zum Schutz von Servern, Diensten, Containern oder virtuellen Maschinen im Internet mit einem serverseitigen Agenten.

Das Projekt wurde inspiriert von Fail2Ban und es soll eine kollaborative und modernisierte Version dieses Rahmens zur Verhinderung von Eindringlingen sein.

Die Hauptaufgabe von Crowdsec und der Firewall ist die Überwachung von Serveranfragen auf der Maschine, sollten hier auffällige Verbindungsversuche stattfinden, prüft Crowdsec dies, und sperrt die IP bei schweren Vorfällen, um so Distributed Denial of Service, Brute-Force Angriffe und vieles mehr zu verhindert.


Wir installieren zunächst erstmal die "Firewall" auf Basis von iptables und bestätigen beide Abfragen mit JA

apt install iptables -y

apt install iptables-persistent -y

apt install ufw -y


Jetzt müssen wir unseren neuen SSH Port in der Firewall freigeben, den alten Port blockieren und die Firewall aktivieren.
(Bestätigt die Abfrage mit Ja)

In unserem Dokument war der SSH-Port 40822, solltet ihr einen anderen Port gewählt haben, tragt ihr natürlich diesen ein.

Anschließend aktivieren wird das Logging und schalten die Firewall scharf.

ufw allow 40822 

ufw delete allow 22 

ufw logging on 

ufw enable 


Als nächsten installieren wir die Crowdsec Security Engine (Überwachung).
Dieser Dienst überwacht die Logs und analysiert diese auf verdächtige Aktivitäten.

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

apt install crowdsec


Die Crowdsec Konfiguration muss für die spätere Installation von Pterodactyl oder andere http Port-Dienste, aufgrund doppelter Port Belegung, konfiguriert werden.
Zeitgleich werden wir die Datenbankverarbeitung optimieren

nano /etc/crowdsec/config.yaml

db_config:
  use_wal: 
true


api: 

  server: 

   listen_uri: 127.0.0.1:8080 [Change to 8081]


Die Lokale API von Crowdsec müssen wir ebenfalls konfigurieren.

nano /etc/crowdsec/local_api_credentials.yaml

uri: http://127.0.0.1:8080 [Change to 8081]


Um die geänderte Konfigurationen von Crowdsec umzusetzen, müssen wir den Dienste neu starten.

systemctl restart crowdsec


Jetzt installieren wir unseren Crowdsec Bouncer (Abwehr).
Dieser Dienst setzt die Entscheidungen der Security Engine um, und blockiert gegebenenfalls die verdächtigten IP-Adressen.

apt install crowdsec-firewall-bouncer-iptables


Auch die Bouncer Konfiguration müssen wir ändern.

nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml

api_url: http://127.0.0.1:8080 [Change to 8081]


Zusätzlich werden wir die Crowdsec Kollektion für Pterodactyl (SFTP-Überwachung) installieren, damit SFTP ebenfalls überwacht wird.

cscli collections install lourys/pterodactyl


Damit Crowdsec auch richtig arbeiten kann, müssen wir den Port 8081 in der Firewall freigeben.

ufw allow 8081


Um die geänderte Konfigurationen von Crowdsec und der Firewall umzusetzen, müssen wir die beiden Dienste neu starten.

systemctl restart ufw

systemctl restart crowdsec

Durch diese durchgeführten sicherheitsrelevanten Einstellungen und Installationen haben wir nun einen robusten Schutzmechanismus aufgebaut.

Ihr seid inzwischen deutlich sicherer vor potenziellen Angriffen von bösartigen Angreifern geschützt.

Mit diesen Maßnahmen haben wir die Sicherheit eures Systems erheblich verbessert und können nun mit einem beruhigten Gefühl arbeiten.