Voraussetzungen:
Ihr solltet einen Server oder vServer beim Anbieter eures Vertrauens gemietet haben. Im Beispiel benutzen wir einen Server von netcup. Hier konntest du dich entscheiden welche Version des Systems installiert wurde. Die Standardinstallation von netcup ist debian 10 minimal. Wir gehen von Debian 11 aus. Solltet ihr Debian 10 nutzen haben wir eine Anleitung wie wir auf Debian 11 Upgraden.
Wir gehen davon aus, dass ihr einen neuen Server habt. Oder euch noch mit “root” auf dem Server anmelden könnt und genau das ist der erste Schritt.
Anmeldung auf dem Server mit “root”
|
|
Eingabe im Terminal um Verbindung zum Server herzustellen
(Sollte das nicht möglich sein meldet euch mit einem Benutzer der über “sudo”-Rechte verfügt auf dem Server an.)
Server auf den neusten Stand bringen
Aktualisieren der Paketquellen:
|
|
Eingabe um Paketquellen aktualisieren
Ausführen der Updates:
|
|
Eingabe um gefundene Upgrades zu installieren
Nicht mehr benötigte Pakete vom System automatisch entfernen lassen:
|
|
Eingabe um nicht mehr benötigte Pakete zu entfernen
Ändern des Zeichensatzes
|
|
Eingabe um den Assistenten “Konfiguriere locales” zu starten
Konfiguriere locales - Zu generierende Locales wählen
Pfeiltasten hoch/runter Einträge suchen
Leertaste Einträge wählen oder abwählen.
Wir wählen:
[] de_DE.UTF-8 UTF-8
[] en-GB.UTF-8 UTF-8
[*] en_US.UTF-8 UTF-8
Die Taste “Tabulator” bringt uns nach unten um zwischen “Ok” und “Abbrechen” wählen zu können.
Pfeiltasten “hoch” und “runter” wählen den Eintrag
Pfeiltaste “rechts” oder “Tabulator” bringen uns nach unten um “Ok” oder “Abbruch” zu wählen.
|
|
Ausgabe nach Bestätigung mit “Ok”
Anpassen der Zeitzone
|
|
Eingabe um die Zeitzone zu ändern
Passwort des root-Benutzeraccounts ändern
Das “root”-Passwort wurde uns irgendwie mitgeteilt, egal auf welchem Weg, wir wollen mitwissende möglichst ausschließen.
|
|
Eingabe um Passwort für “root” zu ändern
An der Stelle muss auf Passwort Manager hingewiesen werden, denn wir möchten natürlich in Zukunft nicht überall das gleiche oder leicht abgewandelte Passwörter verwenden.
Ich habe das Passwort an der Stelle 40-stellig generieren lassen - von Bitwarden - es direkt in die Zwischenablage kopiert und einen Eintrag im Passwortmanager gespeichert/geprüft bevor ich das Passwort verwende. Sicher ist sicher. Ich möchte mit dem Server ja nicht direkt von vorn beginnen …
Wir geben oder fügen das neue Passwort ein, drücken “ENTER”.
Passwort ein zweites mal eingeben oder -fügen, “ENTER”.
|
|
Ausgabe nach erfolgreicher Änderung des Passworts
Wir testen das Passwort bevor wir mehr Arbeit in den Server investieren:
|
|
Eingabe - Verbindung trennen
|
|
Eingabe - Verbindung mit neuem Passwort neu aufbauen
Ihr seid wieder auf dem Server? Perfekt!
Neuen Benuter mit “sudo”-Rechten erstellen & “root” die Anmeldung verbieten
Unseren Recherchen mit dem Telekom Honeypot nach erfolgen die meisten Versuche, auf einen Server über ssh einzubrechen, mit dem User “root”.
Wir sprechen hier nicht von gezielten Angriffen, sondern von standarisierten Angriffen die auf jeden Server automatisch erfolgen sobald dieser im Netz ist.
Darüber hinaus ist es keine gute Idee immer mit root Rechten zu arbeiten. Wir legen uns also einen neuen Benutzer an von dem nicht jeder ausgeht ihn auf dem System zu finden.
In meinem Fall soll “viertelwissen” der Name des neuen Benutzers werden.
An allen Stellen an denen wir hier “viertelwissen” schreiben benutzt ihr den Benutzernamen eurer Wahl.
|
|
Eingabe um neuen Benutzer anzulegen
|
|
Ausgabe / Abfrage eines Passworts
Wir vergeben wieder ein sicheres Passwort.
|
|
Abfrage weiterer Informationen und beispielhafte Eingaben.
Wir bestätigen mit “J” oder “Y” und einer Betätigung der “ENTER”-Taste
Der neue Benutzer soll natürlich auch die Möglichkeit haben “sudo” zu nutzen.
Dazu fügen wir ihn der Gruppe “sudo” hinzu:
|
|
Eingabe um dem neuen Benutzer die Gruppe “sudo” zuzuweisen
Wir loggen uns jetzt direkt mit dem neuen Benutzer ein um root auszusperren.
|
|
Eingaben - Verbindung erneut trennen und mit neu erstelltem Benutzer anmelden
Sind wir erfolgreich mit dem neuen Benutzer verbunden können wir root aussperren. Hierzu verändern wir die Datei sshd_config
Wir legen uns eine Sicherungskopie an - für den Fall der Fälle:
|
|
Eingabe - Sicherheitskopie der sshd_config im home-Verzeichnis
ACHTUNG: Das ist der erste Befehl den dieser Nutzer mit “sudo” benutzt also werden ihm einige Dinge erklärt:
|
|
Ausgabe erste Verwendung “sudo” - Abfrage unseres Passworts
Wir geben unser Benutzerpasswort ein.
Datei im Editor öffnen und bearbeiten. (wir suchen die einträge von unten nach oben, denn so wird die Datei abgearbeitet.)
|
|
Eingabe - Öffnen der sshd_config im Editor “nano”
Wir suchen in der Datei einen Eintrag der in etwa so aussehen sollte:
|
|
Eine dieser Zeilen sollte in der sshd_config zu finden sein
Eine dieser Varianten sollte in der Datei zu finden sein. Diese ändern wir.
Finden wir diese Zeile nicht ergänzen wir sie einfach ganz unten in der Datei.
Welche Variante auf euch zu trifft ist egal. Die Zeile soll so aussehen:
|
|
So soll die Zeile geändert, oder am Ende der Daei ergänzt aussehen
Speichern und schließen des Editors.
Im Falle des “nano”-Editors erledigen wir das mit STRG+O, bestätigen die Rückfrage mit Y und schließen mit STRG+X
ACHTUNG: Wir testen jetzt bevor wir uns abmelden ob die neuen Einstellungen funktionieren!
SSH-Dienst neu starten
|
|
Eingabe um sshd neu zu starten
Dieses Fenster lassen wir jetzt genau so stehen und öffnen ein neues Terminal-Fenster.
In dem neuen Fenster oder Tab verbinden wir uns jetzt neu auf den Server:
|
|
Eingabe - Verbinden auf den Server in neuem “Terminal” Fenster um sicher zu gehen keinen Fehler gemacht zu haben der uns aussperrt
Kommen wir mit der Passworteingabe ganz normal auf den Server haben wir uns zumindest nicht ausgesperrt. Perfekt.
In diesem neuen Fenster testen wir jetzt ob wir uns noch als root verbinden können:
|
|
Eingabe - Abmelden vom Server
|
|
Eingabe - Verbindungsversuch auf den Server als “root”
Der Server sollte uns nach einem Passwort fragen und egal ob wir das korrekte oder ein falsches Passwort eingeben sollte er das ablehnen:
|
|
Passwortabfrage mit richtigem und falschem Passwort testen
Wir haben den root damit ausgesperrt und können uns mit dem/den user/n die wir definiert haben weiterhin per SSH auf den Server verbinden.
Firewall
Wir benutzen dafür “ufw”
|
|
Eingabe - “ufw” über apt installieren
Testen ob die Installation erfolgreich war:
|
|
Eingabe - “ufw” Status abfragen
|
|
Ausgabe - “ufw” installiert und inaktiv
Freigabe/Allow für SSH-Zugriff erstellen
SSH läuft in der Standardkonfiguration über den Port 22, also geben wir diesen frei.
|
|
Eingabe - Ausnahme für Port 22 über TCP einrichten. Damit sind SSH Verbindungen möglich.
|
|
Ausgabe - Bestätigung der Regeländerungen für ipv4 und ipv6
Der Ausgabe vertrauen wir nicht blind. Wir schauen uns an ob die Zeilen wirklich in der Konfiguration ankamen
|
|
Eingabe - Ausgabe der “ufw”-Regeln
|
|
Ausgabe
Wir haben die Bestätigung. Damit können wir mehr oder weniger beruhigt die Firewall starten
|
|
Eingabe - Aktivieren der Firewall
Nachfrage mit dem Hinweis, dass eine mangelhafte Konfiguration dazu führen kann den Server nicht mehr über SSH erreichen zu können. Wir bestätigen mit “y” und betätigen die “ENTER”-Taste.
|
|
Ausgabe
Damit haben wir eine Firewall und die Ausnahme für SSH eingerichtet. Es sind alle Ports zu, außer dem Port 22 für eine erfolgreiche SSH-Verbindung.
Der Server ist jetzt nur noch über SSH im Internet erreichbar und der Benutzer root kann sich nicht mehr anmelden. Wir sind fast fertig.
CrowdSec - Angriffe auf SSH und die Systemanmeldung automatisch abwehren
Natürlich möchten wir bekannte Angreifer aussperren und zu viele Anmeldeversuche über SSH mit falschen Eingaben sperren. Automatisch. Dazu installieren und verwenden wir “CrowdSec”.
|
|
Eingabe - Herunterladen und ausführen des CrowdSec Installationsscripts
|
|
Ausgabe - In meinem Fall war curl auf dem Server nicht vorinstalliert. Bekommt ihr diese Meldung nicht steigt ihr bei “CrowdSec über apt installieren” wieder ein.
Wir holen die Installation von “curl” nach.
|
|
Eingabe - Herunterladen und ausführen des CrowdSec Installationsscripts
|
|
Ausgabe - Installation “curl” - Nachfrage ob wir das wirklich möchten
Wir antworten mit “y”, bestätigen mit “ENTER”. Nächster Versuch.
|
|
Eingabe - Herunterladen und ausführen des CrowdSec Installationsscripts
|
|
Ausgabe - Nur die letzte Zeile. Wir haben die Vorbereitungen getroffen und können …
CrowdSec über apt installieren
|
|
Eingabe - CrowdSec über apt installieren
Die letzten Zeilen der Ausgabe sagen uns welche “collections” Installiert wurden und bestätigen damit die erfolgreiche Installation.
|
|
Ausgabe - Erfolgreiche CrowdSec Einrichtung
CrowdSec überwacht demnach Anmeldungen am System selbst “collection ‘crowdsecurity/linux’” und Anmeldungen über SSH “Installing collection ‘crowdsecurity/sshd’”.
Diese Daten müssen jetzt noch in Firewall regeln umgesetzt werden, angreifende IPs werden damit automatisch gesperrt. Das erledigen bei CrowdSec sogenannte “Bouncer” (Rausschmeisser).
|
|
Eingabe - CrowdSec Firewall-Bouncer installieren
Wir erkennen jetzt zu viele falsche Angaben von Usern oder Passworten bei der Systemanmeldung und über SSH nicht nur, sondern sperren auch IPs die dafür verantwortlich sind. Allerdings gibt es sehr viele IPs die nur dafür da sind Server anzugreifen. Diese können wir über CrowdSec auch sperren lassen. Jede IP die CrowdSec auf unserem Server blockt wird an CrowdSec übermittelt - fällt diese IP auf verschiedenen Servern oft genug negativ auf kommt sie auf eine zentrale Blocklist.
Wir profitieren noch nicht von der “Cummunity” Funktion von CrowdSec, damit können wir automatisch bekannte IP Adressen welche die CrowdSec Community als schädlich ermittelt hat blocken lassen. Finden wir gut - installieren und benutzen wir.
|
|
Eingabe - CrowdSec Blocklist Mirror installieren
|
|
Eingabe - CrowdSec Blocklist Mirror service hinzufügen und starten.
Damit haben wir unseren Server grundlegend abgesichert.
Wir haben deiner Meinung nach etwas vergessen was hier unbedingt rein soll?
Du hast Fragen dazu?
Bei Anmerkungen oder Fragen kommt gerne auf unseren Discord.