Linux Server absichern

mc
DM
Last updated 3 months ago

Erfahre, wie du deinen Linux-Server bestmöglich vor Hacker-Attacken schützt.

Ändern des Standard SSH-Ports

Viele Angriffe finden automatisiert auf Server statt, die für den Dienst SSH den Standard-Port 22 verwenden. Um diesen Angriffen aus dem Weg zu gehen, ist es zunächst sinnvoll für SSH einen Port im fünfstelligen Bereich zu verwenden.

Die Anleitung gilt für die meisten Linux Distributionen bei standardmäßiger Konfiguration. Einzelne Befehle können abweichen und es müssen ggf. Pakete nachinstalliert werden.

Logge dich auf deinem vServer ein und schaue dir die Datei /etc/ssh/sshd_config mit einem beliebigen Texteditor an:

$ vi /etc/ssh/sshd_config

In der Datei findest du den Eintrag "Port":

#Port 22 <-
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

Entferne die Raute um den Eintrag zu aktivieren und wähle einen beliebigen fünfstelligen Port:

Port 54321 <-
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

Speichere anschließend die Datei und starte den Dienst SSH neu.

$ service sshd restart

Beachte, dass du nun den Port beim Verbinden immer mit angeben musst.

Alternative Authentifizierungsmethoden

Passwörter sind häufig einfach zu erraten. Oft werden dazu einfach Wörterbücher verwendet, die verschiedene Passwörter ausprobieren. Am besten benutzt man immer möglichst sichere Kennwörter, oder noch besser: eine Public-Key-Authentifizierung:

Wir verwenden in diesem Beispiel RSA-Schlüssel mit einer Länge von 4096 Bit. Laut aktuellem Stand, erschließt sich hieraus ein ausreichendes Maß an Sicherheit.

Zunächst muss hierfür auf deinem eigenen Rechner ein RSA-Schlüsselpaar generiert werden. Bei Linux machst du dies ganz einfach mit folgendem Befehl:

$ ssh-keygen -t rsa -b 4096

Hierbeit macht es Sinn zunächst beide Schlüssel unter ~/.ssh/ abzulegen.

Bei Windows gibt es natürlich auch die Möglichkeit ein Schlüsselpaar zu erzeugen, beispielsweise mit dem Programm PuTTYgen. Dies wird oft zusammen mit PuTTY installiert.

Anschließend muss der öffentliche Teil des Schlüsselpaars, der "Public-Key" auf dem entsprechenden Benutzer auf dem Server hinterlegt werden. Diesen kannst du einfach Kopieren & Einfügen.

Lasse dir den Inhalt der generierten Public-Key-Datei ausgeben und kopiere die Ausgabe:

$ cat ~/.ssh/id_rsa.pub

Das Symbol "~" (Tilde) steht immer für das aktuelle home-Verzeichnis. Beim Benutzer "root" ist dies /root/ bei anderen Benutzern z.B. "user" i.d.R /home/user/

Bei Windows machst du die Tilde mit Alt-Gr & "+" bei Mac mit Alt & "n"!

Füge den Inhalt auf deinem vServer in die Datei ~/.ssh/authorized_keys ein.

Anschließend muss die Authentifizierungsmethode noch in der Datei /etc/ssh/sshd_config geändert werden.

$ vi /etc/ssh/sshd_config

Die markierten Einträge müssen hier ggf. so abgeändert werden, dass die dem Beispiel entsprechen:

RSAAuthentication yes <-
#PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys <-
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody
# To disable tunneled clear text passwords, change to no here!
#PermitEmptyPasswords no
PasswordAuthentication no <-
UsePAM no <-

Anschließend wird die Datei gespeichert und der Dienst SSH neu gestartet:

$ service sshd restart

Wenn du dich nun über SSH verbinden möchtest, musst du bei Linux darauf achten, dass die Private-Key Datei in deinem Heimatverzeichnis unter ~/.ssh/ als id_rsa abgelegt ist. Bei Programmen wie PuTTY gibt es auch die Möglichkeiten den Private-Key zu hinterlegen.

root-Login verhindern und sudo

Das schlimmste Szenario, dass dir passieren könnte: Ein Angreifer schafft es über den root-Benutzer Zugriff auf deinen vServer zu erhalten. Der root-Benutzer hat unter Linux uneingeschränkte Rechte und hat somit volle Kontrolle über das Linux-System. Eine Möglichkeit dies zu verhindern ist, dem root-Benutzer generell zu verbieten sich per ssh mit dem Server zu verbinden.

Neuen Benutzer anlegen

Generell ist es empfehlenswert nicht dauerhaft mit dem Benutzer "root" unter Linux zu arbeiten. Durch die uneingeschränkten Rechte, können Fehler oft fatale Folgen haben und für viel Ärger sorgen. Am besten ist es also immer einen Benutzer mit eingeschränkten Rechten zu erstellen. Wir erstellen in diesem Fall den Benutzer "user". Unter Debian und Ubuntu geht das ganz einfach mit dem Befehl:

adduser user

Bei anderen Distributionen kannst du z.B. den folgenden Befehl verwenden:

useradd -s /bin/bash -m user

Um zu dem Benutzer zu wechseln, benutze folgenden Befehl:

su - user

Falls du bei der Erstellung des Benutzers noch kein Passwort erstellt hast, lege zunächst ein Kennwort fest:

passwd user

sudo installieren

Um auch mit dem neuen Benutzer Befehle ausführen zu können, die du sonst nur als root verwenden kannst, kannst du das Programm "sudo" verwenden. Du kannst dies auf allen gängigen Linux Distributionen über den Paketmanager installieren, bei Debian/Ubuntu also wie folgt:

apt-get install sudo

Du musst die Installation als "root" vornehmen. Wenn du zuvor den Benutzer gewechselt hast, benutze "exit" um zurück zum "root" zu gelangen.

Füge nun den neuen Benutzer der Gruppe "sudo" hinzu. Hierzu kannst du den folgenden Befehl verwenden:

usermod -G sudo user

Der Benutzer hat nun mit dem vorangestellten Befehl "sudo" und anschließender Passwort-Eingabe die selben Rechte wie der Benutzer root. Wechsle also zum neuen Benutzer und führe einen Befehl wie folgt als "super-user" aus:

sudo echo "Hallo Welt"

root-Login verhindern

Nachdem du nun einen alternativen Benutzer erstellt hast, mit dem du arbeitest kannst du den ssh-Login für den root komplett verbieten. Die meisten Wörterbuch-Attacken zielen auf den user "root" oder auf andere gängige System-Benutzer. Wenn du den SSH-Login per Password-Authentifizierung bereits deaktiviert hast, solltest du deinen Public-Key wie in der Anleitung "Alternative Authentifizierungsmethoden" beschrieben auch in deinem neuen Benutzer hinterlegen.

Um den Login über ssh für "root" zu verbieten, ändere in der /etc/ssh/sshd_config den folgenden Eintrag:

# Authentication:
LoginGraceTime 120
PermitRootLogin no <---
StrictModes yes

Starte den ssh-Dienst anschließend neu:

service sshd restart

Möchtest du nach dem Login über SSH trotzdem mit dem root-Benutzer arbeiten kannst du "sudo -i" verwenden um über sudo zum root-Benutzer zu wechseln oder alternativ "su - root".

Verdächtige Aktivitäten erkennen und blockieren

Oftmals versuchen Angreifer einen vServer durch bloßes erraten des Passwortes zu kapern. Um diese Versuche zu erkennen und zu unterbinden kannst du beispielsweise das Intrusion Prevention System "fail2ban" verwenden. Das Programm erkennt anhand von Log-Dateien auffällige Zugriffsversuche und sperrt die entsprechenden IP-Adressen.

Du kannst fail2ban auf allen gängigen Linux-Distributionen über den Paketmanager installieren. Bei Debian & Ubuntu beispielsweise mit folgendem Befehl:

apt-get install fail2ban

Möglicherweise wurde das Paket auch bereits zuvor automatisch auf deinem Server installiert. Für fail2ban benötigst du für gewöhnlich mindestens eine Firewall. Meistens ist iptables auf deiner Linux-Distribution bereits vorinstalliert, anderenfalls kannst du es mit folgendem Befehl installieren:

apt-get install iptables

Du startest fail2ban nach der Installation mit dem Befehl:

fail2ban-client start

Danach kannst du den Status der Jails überprüfen. Für gewöhnlich ist das Jail "ssh" bereits vorkonfiguriert und aktiv. Prüfe den Status von "ssh" mit:

fail2ban-client status ssh

Hier siehst du fehlgeschlagene Login-Versuche über ssh und ggf. gebannte IP Adressen. Die Konfiguration der Jails kannst du in der entsprechenden jail.conf anpassen, z.B. die Dauer des Banns und die Anzahl der fehlgeschlagenen Login-Versuche bis zum Bann.

Für weitere Informationen schaue dir die man-page zu fail2ban mit folgendem Befehl an

man fail2ban-client

oder besuche die Seite http://manpages.ubuntu.com/manpages/xenial/man1/fail2ban-client.1.html