Debian Server / vServer grundlegend absichern
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 einen 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"
(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:
Ausführen der Updates:
Nicht mehr benötigte Pakete vom System automatisch entfernen lassen:
Ändern des Zeichensatzes
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.
Konfiguriere locales - Standard-Standorteinstellung für die Systemumgebung.
Pfeiltasten "hoch" und "runter" wählen den Eintrag
Pfeiltaste "rechts" oder "Tabulator" bringen uns nach unten um "Ok" oder "Abbruch" zu wählen.
Anpassen der Zeitzone
Passwort des root-Benutzeraccounts ändern
Das "root"-Passwort wurde uns irgendwie mitgeteilt, egal auf welchem Weg, wir wollen mitwissende möglichst ausschließen.
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".
Wir testen das Passwort bevor wir mehr Arbeit in den Server investieren:
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.
Wir vergeben wieder ein sicheres Passwort.
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:
Wir loggen uns jetzt direkt mit dem neuen Benutzer ein um root auszusperren.
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:
ACHTUNG: Das ist der erste Befehl den dieser Nutzer mit "sudo" benutzt also werden ihm einige Dinge erklärt:
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.)
Wir suchen in der Datei einen Eintrag der in etwa so aussehen sollte:
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:
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
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:
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:
Der Server sollte uns nach einem Passwort fragen und egal ob wir das korrekte oder ein falsches Passwort eingeben sollte er das ablehnen:
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"
Testen ob die Installation erfolgreich war:
Freigabe/Allow für SSH-Zugriff erstellen
SSH läuft in der Standardkonfiguration über den Port 22, also geben wir diesen frei.
Der Ausgabe vertrauen wir nicht blind. Wir schauen uns an ob die Zeilen wirklich in der Konfiguration ankamen
Wir haben die Bestätigung. Damit können wir mehr oder weniger beruhigt die Firewall starten
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.
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".
Wir holen die Installation von "curl" nach.
Wir antworten mit "y", bestätigen mit "ENTER". Nächster Versuch.
CrowdSec über apt installieren
Die letzten Zeilen der Ausgabe sagen uns welche "collections" Installiert wurden und bestätigen damit die erfolgreiche Installation.
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).
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.
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.