Jetzt Linux Server absichern (debian-basiert) von A-Z | 2024

Linux Server absichern und sicher betreiben

In diesem neuen Video auf meinem YouTube-Kanal zeige ich euch, wie ihr euren debian-basierenden Linux Server mithilfe verschiedener Anpassungen sicher betreiben könnt und so vor Angriffe schützen könnt.

Wie der Presse und etwaigen IT-Portalen immer wieder zu entnehmen, nehmen die Angriffe auf öffentliche Server immer mehr zu.

Oft werden Dienste im Internet sowie im Unternehmensumfeld auf Grundlage von Linux Betriebssysteme bereitgestellt. Daher möchte ich in diesem Tutorial auf das Absichern eines debianbasierten Linux-Server näher eingehen und euch zeigen, wie ihr eure Server entsprechend vor Angriffe schützen könnt.

Wie immer gilt „Eine 100 %-Sicherheit gibt es nicht!“.

Video-Tutorial zum Thema Linux Server absichern

Da dieses Thema schon sehr umfassend ist, habe ich das Tutorial auf mehrere Videos aufgeteilt und als Playlist auf meinem YouTube-Kanal zur Verfügung gestellt.

Dieser Playlist werden nach und nach immer weitere Video-Tutorials zum Thema ‚Linux Server absichern‘ hinzugefügt.

Sie sehen gerade einen Platzhalterinhalt von Youtube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen
Playlist der Videoreihe | Linux Server absichern / hardening

Verwendete Befehle und Anmerkungen in den entsprechenden Videos

Alle Befehle die ich im Video-Tutorial ‚Linux Server absichern‘ verwendet habe, findet hier chronologisch aufgelistet.

Voraussetzungen:

Die folgenden Voraussetzungen sollten / müssen erfüllt sein, dass ihr die einzelnen Konfigurationen am Linux-Server vornehmen könnt:

  • Das Server-OS muss ein Betriebssystem sein, welches auf Debian basiert
  • Zugriff per SSH auf den Linux-Server ist möglich
  • Ihr habt die nötigen Berechtigungen (root-Zugriff) um am System Änderungen vorzunehmen
  • SSH-Client (Putty, Terminal)

Hinweis

Da manche Konfigurationen sehr umfassend sind, habe ich manche Schritte in separate Beiträge ausgelagert. Diese Beiträge habe ich dann bei den entsprechenden Schritten verlinkt.

Schritt 1 Linux Server absichern | Anmelden per SSH und System aktualisieren:

# SSH-Verbindung herstellen
ssh root@IP-Adresse-vom-Pi
# Betriebssystem aktualisieren
sudo apt update && apt upgrade -y

Schritt 2 Linux Server absichern | Ändern Root-User-Passwort

Natürlich ist es sehr empfehlenswert das Passwort des Standard-User durch ein wirklich sicheres Passwort abzusichern. Auch wenn wir im nächsten Schritt den Standard-User ‚root‘ deaktivieren werden, empfehle ich es trotzdem hier vorab ein sicheres Passwort zu vergeben. Schnell ist es passiert, dass irgendwelchen Gründen der Standard-User wieder aktiviert wird oder alte Systeme genutzt werden.

Ändern des Passworts des Root-User in ein sicheres Passwort.

Am besten nutzt ihr zum Generieren des Passworts einen Passwort-Generator von einem Passwort-Manager eures Vertrauens wie zum Beispiel KeePass oder Bitwarden und speichert das generierte Passwort in diesem Passwort-Manager gleich ab.

# Password erneuern

passwd

Schritt 3 Linux Server absichern | Neuen User mit erhöhten Rechten anlegen

Sudo-Programm installieren

Um einen neuen Nutzer im weiteren Verlauf in die Gruppe ’sudo‘ aufzunehmen und damit diesem root-Rechte zu erteilen, müssen wir vorab das Programm ’sudo‘ installieren.

# sudo-Programm installieren

apt install sudo

Neuen Benutzer anlegen:

sudo adduser NeuerUsername

Neuen Benutzer der Administratoren-Gruppe hinzufügen:

sudo gpasswd -a NeuerUsername adm

Neuen Benutzer zur Superuser-Gruppe hinzufügen:

sudo gpasswd -a NeuerUsername sudo

Vor dem Deaktivieren von dem User ‚root‘, erst überprüfen, ob der neue User alle erforderlichen Rechte hat!

Wie das funktioniert, erfahrt ihr im Schritt 4.

Schritt 4 Linux Server | Testen des neuen User-Accounts

Bevor der alte Standard-Account ‚root‘ deaktiviert werden kann, wird dieser von uns zunächst auf seine Rechte hin überprüft.

Dazu wird ein separates Terminal-Instanz (Terminal-Fenster) geöffnet. Hier melden wir uns mit dem neu erstellten User an und überprüfen die Berechtigungen mit den folgenden Befehlen.

Überprüfen welche Berechtigung der neu angelegte User hat:

sudo whoami

# Dann das vergebene Benutzer-Passwort eingeben

# Antwort muss hier 'root' sein

Den alten User-Account ‚root‘ deaktivieren:

Nach erfolgreicher Überprüfung der Rechte des neuen Username, kann nun der User ‚pi‘ deaktiviert werden und damit ist dann keine Anmeldung mit diesem Username mehr möglich.

sudo passwd -l root

SSH-Zugang richtig absichern

Die Absicherung des Zugangs via SSH ist wirklich ein absolutes Muss bei der Absicherung eines Linux-Servers!
Hierzu habe ich euch extra ein ausführliches Tutorial hier auf SecureBits geschrieben:
Erfahre wie du einen Zugang mittels SSH zu deinem Remote-Server richtig und sicher einrichtest.

Schritt 5 Linux Server absichern | Firewall: Installation und Konfiguration

Als leicht zu bedienende Firewall nutzen wir in diesem Beispiel die UFW-Firewall (Uncomplicated Firewall).

In diesem Tutorial werde ich die Konfiguration der UFW-Firewall nur kurz anhand des Beispiels einer Firewall-Regel für den SSH-Zugriff aufführen.

Ein ausführliches Tutorial zu diesem Thema habe ich hier auf SecureBits veröffentlicht und es gibt ebenso auch einige Video-Tutorials zu diesem Thema von mir. In diesen Tutorials erfahrt ihr, wie ihr weitere Regeln für Zugriffe auf dem Server konfigurieren könnt.

Linux Server absichern | Blog-Beiträge zur UFW-Firewall:

Linux Server absichern | Video-Beiträge auf meinem YouTube-Kanal

UFW-Firewall installieren

Die Installation der Uncomplicated-Firewall erfolgt durch die Eingabe des folgenden Befehls:

sudo apt install ufw

Firewall-Regel für den SSH-Zugriff erstellen

Nach der erfolgreichen Installation der UFW-Firewall ist diese inaktiv.

Bevor die Firewall aktiviert werden kann, muss zunächst eine Firewall-Regel für den SSH-Zugriff erstellt werden, da ihr sonst beim Aktivieren der Firewall keinen Zugriff mehr per SSH auf den Linux Server habt!

sudo ufw allow 22/tcp comment "SSH"

# Hinweis - Wenn ihr den Port für SSH geändert habt, müsst ihr diesen entsprechend anpassen!
# Beispiel:

sudo ufw allow 2223/tcp comment "neuer SSH-Port"

SSH-Zugriff weiter beschränken

Weiterhin könnt ihr den Zugriff per SSH-Verbindung auch noch weiter reglementieren.

So zum Beispiel, dass nur ein Zugriff über einen IP-Adressbereich möglich ist:

sudo ufw allow from <Beispielbereich=192.168.178.0/24> to any port 22

# Hinweis - Wenn ihr den Port für SSH geändert habt, müsst ihr diesen entsprechend anpassen!
# Beispiel:

sudo ufw allow from <Beispielbereich=192.168.178.0/24> to any port 2223 

oder der Zugriff ist nur über eine einzelne IP-Adresse (von einem Rechner oder eine öffentliche feste IP-Adresse) möglich:

sudo ufw allow from <feste IP-Adresse=192.168.178.30> to any Port 22

# Hinweis - Wenn ihr den Port für SSH geändert habt, müsst ihr diesen entsprechend anpassen!
# Beispiel:

sudo ufw allow from <feste IP-Adresse=192.168.178.30> to any port 2223 

Bitte darauf achten, dass ihr bei der Vergabe entweder den richtigen IP-Adressbereich beziehungsweise die richtige feste IP-Adresse angibt. Andernfalls sperrt ihr euch selbst aus!

SSH-Zugriff – Anmeldelimit für falsche Anmeldungen limitieren

Es gibt auch die Möglichkeit, die Falsch-Anmeldungen mittels Firewall-Regel per SSH-Zugriff zu limitieren oder ihr nutzt hierzu den Dienst Fail2Ban, dessen Konfiguration ich weiter unten in diesem Tutorial zeige.

Zunächst zeige ich hier erstmal wie das per UFW-Firewall-Regel funktioniert. Hierbei wird der Standard von 6 fehlgeschlagenen Anmeldungen innerhalb 30 Sekunden gesetzt.

sudo ufw limit 22/tcp

UFW-Firewall aktivieren und aktivierte Regeln anzeigen

Nachdem ihr die Regeln für den Service ‚SSH‘ erstellt habt, könnt ihr nun die Firewall aktivieren.

sudo ufw enable

Um einen Überblick über die erstellten UFW-Regeln zu erhalten, könnt ihr diesen Befehl nutzen

sudo ufw status verbose

Schritt 6 Linux Server absichern – Automatische Installation wichtiger Updates konfigurieren

Automatische Updates – Beispiel Debain 12

Für andere Distros müsst ihr die folgende Konfiguration entsprechend anpassen!

Fast jeden Tag kann man in den Nachrichten verfolgen, dass wieder Hacker-Angriffe auf irgendwelche Server im Internet erfolgen! Und meistens liegt das daran, dass hierbei Sicherheitslücken für einen Angriff ausgenutzt werden, wofür aber schon Sicherheitsupdates seit längerem zur Verfügung stehen, aber diese Updates nicht im System eingepflegt wurden.

Dabei ist es unter Linux ja ein Leichtes, diese Sicherheitsupdates automatisch zum Beispiel jede Nacht einzuspielen und somit etwaige Sicherheitslücken im System zu schließen. Und das alles ohne das man als Administrator jedes Mal handanlegen muss!

Installation des Service für automatische Updates

sudo apt install unattended-upgrades -y

Konfiguration der automatischen Aktualisierung vornehmen

Als erstes müssen wir erstmal die Config-Datei von ‚unattended-upgrades‘ konfigurieren und diesen Dienst an Debian 12 anpassen.

Aufrufen der ’50unattended-upgrades-config-Datei‘ mit dem Nano-Editor

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Folgende Ausgabe sollte euch im Nano-Editor-Fenster angezeigt werden:

Unattended-Upgrade::Origins-Pattern {
        // Codename based matching:
        // This will follow the migration of a release through different
        // archives (e.g. from testing to stable and later oldstable).
        // Software will be the latest available for the named release,
        // but the Debian release itself will not be automatically upgraded.
//      "origin=Debian,codename=${distro_codename}-updates";
//      "origin=Debian,codename=${distro_codename}-proposed-updates";
        "origin=Debian,codename=${distro_codename},label=Debian";
        "origin=Debian,codename=${distro_codename},label=Debian-Security";
        "origin=Debian,codename=${distro_codename}-security,label=Debian-Security";
 
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
//      "o=Debian Backports,a=${distro_codename}-backports,l=Debian Backports";
};

Wenn alle Änderungen in der Config-Datei vorgenommen wurden, könnt ihr die Änderungen durch die folgenden Tasten-Kombinationen speichern und den Editor verlassen:

STRG+O und mit Y bestätigen und mit STRG+X den Editor verlassen

Automatische Updates aktivieren

Um nun den Dienst zu Aktivieren und die tägliche Durchführung zu gewährleisten, müssen wir noch die Config-Datei ’20auto-upgrades‘ überprüfen und falls nicht vorhanden die folgenden Anweisungen eintragen.

Config-Datei ’20auto-upgrades‘ im Editor aufrufen

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

Folgende Einträge hinzufügen

APT::Periodic::AutocleanInterval "7";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

Danach die Änderungen mit den oben genannten Tasten-Kombinationen speichern und den Editor verlassen.

Unattended-Upgrades Dienst Starten und den automatischen Start aktivieren

Nach der Installation muss der Dienst ‚unattended-upgrades‘ gestartet werden und auch zum automatischen Starten nach einem Neustart eingerichtet werden.

# unattended-upgrades aktiveren

sudo systemctl start unattended-upgrades

# unattended-upgrades automatisch nach einem Neustart starten

sudo systemctl enable unattended-upgrades

# Status des Dienstes überprüfen

sudo systemctl status unattended-upgrades

Überprüfen des Dienstes unattended-upgrades

Um die Konfiguration des Dienstes ‚unattended-upgrades‘ zu überprüfen, gibt ihr den folgenden Befehl ein:

# unattended-upgrades Dienst überprüfen

sudo unattended-upgrades --dry-run --debug

Linux Server absichern | SSH-Zugriff nur für einen bestimmten User erlauben

Weiter haben wir noch die Möglichkeit, den SSH-Zugriff nur auf einen oder mehrere User festzulegen. Hierfür bearbeiten wir die ’sshd_config-Datei‘ um hier den oder die User festzulegen.

Aufrufen und bearbeiten der ’sshd_config-Datei‘
sudo nano /etc/ssh/sshd_config

Nun fügt ihr den folgenden Eintrag in den Editor ein:

AllowUser <Username den ihr freigeben möchtet>

# Mehrere User könnt ihr wie folgt freigeben:
AllowUser user1 user2

Danach die Änderungen im Editor wieder mit STRG+O und mit Y speichern und mit STRG+X den Editor schließen.

SSH-Dienst neu starten

Nach der Änderung der ’sshd_config-Datei‘ muss der SSH-Dienst neu gestartet werden um die Änderungen zu übernehmen.

sudo systemctl restart ssh

Linux Server absichern | Brute Force-Attacken abwehren mit Fail2Ban

Gerade bei Geräten, die mit dem Internet verbunden sind (Webservices, Smart Home, etc.) ist es sehr ratsam, dass Gerät vor Brute-Force-Attacken zu schützen.

Hierfür hat sich die Anwendung ‚fail2ban‘ sehr bewährt. Diese Anwendung ist hervorragend dazu geeignet Anmeldevorgänge zu überwachen und bei zu vielen fehlgeschlagenen Anmeldeversuchen, die zugreifende IP-Adresse zu verbannen.

In meinem Beispiel werden wir die Anmeldungen auf den SSH-Server überwachen. Natürlich könnt ihr fail2ban auch für andere Zugänge wie zum Beispiel sftp, https und noch viele weitere Dienste, verwenden.

Installation von fail2ban auf einen Debian-Server

sudo apt install fail2ban -y

Um die Konfigurations-Datei ‚jail.local‘ im Nano-Editor zu bearbeiten / erstellen führt ihr den folgenden Befehl aus:

sudo nano /etc/fail2ban/jail.local

Um nun ungültige Anmeldeversuche per SSH-Verbindung zu bannen, erstellen wir die folgenden Einträge im Editor-Fenster

Debian 12 und fail2ban

Ab Debian Version 12 wird die Log-Datei /var/log/auth.log nicht mehr vom OS unterstützt, da Debian 12 zum Loggen Journald nutzt. Daher habe ich in der jail.local als backend ‚systemd‚ eingetragen

[DEFAULT]
bantime = 3600
backend = systemd


[sshd]
enabled   = true
filter    = sshd
banaction = ufw
backend   = systemd
maxretry  = 3
findtime  = 600
bantime   = 3600
ignoreip  = 127.0.0.1/8

Wenn die Eintragungen vorgenommen wurden, dann wie immer per STRG+O den Speicherdialog aufrufen, diesen mit Y bestätigen und mit STRG-X den Editor verlassen.

Den Dienst fail2ban auf dem Debain-System aktivieren

Nachdem jetzt die Konfiguration für das Bannen von IP-Adressen bei Falschanmeldung per SSH-Verbindung fertig gestellt ist, kann nun die Aktivierung von fail2ban erfolgen.

fail2ban – IP-Adressen entsperren / sperren

Um zum Beispiel eine gebannte IP-Adresse wieder manuell zu Entsperren, gibt ihr den folgenden Befehl im Terminal ein:

# IP-Adresse wieder entsperren

sudo fail2ban-client set sshd unbanip <IP-Adresse>

Genauso habt ihr die Möglichkeit auch eine IP-Adresse manuell zu Sperren:

# IP-Adresse manuell sperren:

sudo fail2ban-client set sshd banip <IP-Adresse>
# Aktivieren fail2ban

sudo systemctl enable --now fail2ban

SSHD-Dienst neu starten

Als letztes muss der Dienst SSHD ebenfalls neu gestartet werden, damit fail2ban seiner Aufgabe nachgehen kann. Hierzu gibt ihr diesen Befehl ein:

sudo systemctl restart sshd

Linux Server absichern | Zusammenfassung

Nach meinem Dafürhalten haben wir durch die durchgeführten Maßnahmen unseren konfigurierten Linux-Server gut gegen Angriffe abgesichert.

In Zukunft werde ich noch andere Möglichkeiten zur Absicherung von Linux-Servern hier auf diesem Blog vorstellen. Hier werde ich dann zum Beispiel Dienste wie Crowdsec, Copilot (hat nichts mit KI zu tun) und andere Tools vorstellen.

Sollte euch ein Fehler auffallen oder habt ihr noch Ergänzungen für dieses Anleitung, dann schreibt mir gerne ein Kommentar.

Natürlich würde ich mich auch über ein Abo auf meinem YouTube-Kanal von euch freuen!

Jede Unterstützung ist Willkommen…

Patreon Spendenbild_250_114_transparent

 

Gerne würde ich euch noch mehr kostenfreie und vor allem werbefreie Inhalte hier sowie auf anderen Kanälen bereitstellen, doch ist der Aufwand für die Erstellung dieser Inhalte schon sehr zeitintensiv und vor allem langsam auch sehr kostenintensiv geworden (Kosten für Hosting, Equipment, Software und Arbeitszeit) und daher wird euch hier auf diesem Blog momentan noch Werbung angezeigt.

Daher möchte ich euch darum bitten, mich vielleicht durch eine kleine Spende zu Unterstützen.

Vielen Dank und lieben Gruß

Marcel

Hi mein Name ist Marcel und ich bin der Herausgeber von diesem Blog ‚SecureBits‘. Ich selbst bin schon ewig mit der IT verbunden und interessiere mich hauptsächlich für die Themen IT-Sicherheit, Programmierung und Gesellschaft und betreibe diesen Blog aus Leidenschaft. Gerne setze ich mich mit meinen Beiträgen für eine sichere IT-Landschaft ein, um so das Recht auf Privatsphäre auch mit kleinen Mitteln zu schützen. Freue mich immer über Kommentare von euch und wenn es mir möglich ist, helfe ich gerne und kostenlos (im privaten Bereich, ansonsten bitte mir eine Anfrage schicken) weiter. Meine Idee ist es, Interessierten der Informationstechnik, einfache Schritt- für Schritt-Anleitungen hier im Blog sowie auf meine noch jungen YouTube-Kanal zur Verfügung zu stellen, damit ihr diese Anleitungen für eure Projekte nutzen könnt. Viel Spaß beim Lesen. Gruß Marcel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert