Linux Server absichern

Photo by Taylor Vick on Unsplash

Linux Server absichern

Um einen Linux Server abzusichern, sollten einige grundlegende Sicherheitsmaßnahmen getroffen werden. In diesem Artikel erkläre ich dir, was du unbedingt tun solltest, wenn du einen neuen Linux Server aufsetzt. Hierzu gehören das Einloggen auf den Server via SSH Keys, erstellen eines neuen Users und das deaktivieren des Root User Logins, einrichten einer Firewall und eines Loginschutzes (fail2ban).

SSH Keys generieren

Bevor ich meinen neuen Server in Betrieb nehme, erstelle ich mir ein SSH Key, damit ich mich sicher mit meinem Server verbinden kann. SSH Keys sind einfach deutlich sicherer als Passwörter. Dazu erstelle ich mir zunächst die SSH Keys, anschließend lade ich den öffentlichen Key (public key) bei meinem Hostinganbieter hoch, damit der Server gar nicht erst per Passwort zugänglich ist. Somit ist es nahezu unmöglich per Brute-Force-Attacke über den SSH Zugang einzudringen.

Um die SSH Keys zu generieren öffne ich auf dem Mac das Terminal. Um einen SSH Key generieren zu lassen, gebe ich ein:

ssh-keygen -t ecdsa -b 521

Mit den Parameter -t kann ich die Art der Verschlüsselung wählen. Ich habe hier die ecdsa Verschlüsselung gewählt, aber rsa ist auch möglich. Bei rsa sollte man beachten, dass mehr als 2048 Bit gewählt werden sollten. Die Bit Anzahl wird mit dem Parameter -b festgelegt. Bei der ecdsa Vesrschlüsselung ist 521 die höchstmögliche Bit Anzahl, darum haben wir diese gewählt.

Als nächstes wird nach dem Speicherort gefragt. Diesen lasse ich auf dem Defaultwert und bestätige einfach mit Enter. Falls noch nicht vorhanden wird automatisch ein versteckter Ordner in meinem Home Verzeichnis angelegt und dort mein Key gespeichert. Diesen Pfad brauchen wir später, um auf unseren Key zugreifen zu können. Tipp: Versteckte Ordner lassen sich unter Mac mit der Tastenkombination [cmd] + [shift] + [.] einblenden.

Anschließend werde ich nach einem Passwort gefragt, dass ich als zusätzliche Sicherheitsmaßnahme vergeben soll. Hier gebe ich ein Passwort ein und bestätige.

Fertig! Jetzt haben wir ein SSH-Key erstellt und können diesen nutzen, um auf unseren Server zuzugreifen.

Neuen User anlegen und Root entfernen

Nachdem ich meinen SSH Key bei meinem Hostinganbieter hinterlegt habe, kann ich mich über das Terminal via SSH einloggen. Bin ich erstmal in meinem neuen Linux angekommen, geht die Absicherung direkt weiter. Der Root User ist ein Sicherheitsrisiko, da er alle Rechte auf dem System und damit die volle Kontrolle hat. Darum legen wir zunächst einen neuen User an, fügen ihn der Gruppe "sudo" hinzu und entfernen anschließend den Root User aus der SSH Anmeldung.

Um einen neuen User anzulegen verwenden ich den Befehl "adduser" und den Namen des anzulegenden Users. Anschließend muss noch ein Passwort vergeben werden.

Die darauf folgenden Fragen nach Namen, Zimmernummer etc. können entweder ausgefüllt, oder einfach übersprungen werden. Jetzt haben ich einen neuen User angelegt. Dieser hat bisher nur eingeschränkte Rechte auf dem System. Um diesem User die Möglichkeit zu geben Administratorrechte zu erlangen, fügen wir ihn zur Gruppe "sudo" hinzu über den Befehl:

usermod -aG sudo USERNAME

(Hinweis: USERNAME ist dann der Name des neu hinzugefügten Users)

Nachdem drücken auf Enter, wird dem User die Gruppe hinzugefügt, es erfolgt keine weitere Bestätigung des Systems.

Anschließend weise ich dem neuen User noch die SSH Keys zu (Achtung: siehe Punkt SSH Keys dem neuen User zuweisen!) und entferne dann den Root User aus unserer SSH Anmeldung.

Dazu bearbeite ich die Datei "sshd_config" mit dem Befehl:

sudo nano /etc/ssh/sshd_config

In der sshd_config Datei unter dem Punkt "Authentication" ändere ich die Einstellung "PermitRootLogin" auf "no". Damit wird verhindert, dass sich per SSH als Root User eingeloggt werden kann.

Anschließend wird weiter unten in der Datei die Option "PasswordAuthentication" auch auf "no" gesetzt, um das Einloggen mit einem Passwort komplett zu verbieten. Mit [control] + [x] die Datei schließen und speichern.

Nach einem Restart werden die Änderungen auch wirksam. Das geht mit dem Befehl:

sudo service ssh restart

SSH Keys dem neuen User zuweisen

Nachdem ein neuer User angelegt wurde, muss noch der SSH Key im Home-Verzeichnis hinterlegt werden, damit auch eine Anmeldung per SSH möglich ist. Dazu den öffentlichen Schlüssel aus dem Root Home-Verzeichnis in das unseres neuen Users kopieren. Dazu lege ich zunächst einen neuen Ordner mit dem Namen ".ssh" in unserem Home-Verzeichnis an. Das geht mit dem Befehl

mkdir /home/USERNAME/.ssh

(Hinweis: USERNAME ist dann der Name des neu hinzugefügten Users)

Anschließend muss herausgefunden werden, wie die Schlüsseldatei heißt. Dazu gehe ich in den Ordner ".ssh" des Root Users.

cd /root/.ssh

und schaue mir den Ordnerinhalt an

ls -a

Mein SSH Key heißt "authorized_keys". Ich kopiere den SSH Key mit dem Copybefehl in das neue Verzeichnis unseres neuen Users

cp authorized_keys /home/USERNAME/.ssh

Da ich die Datei als Root erstellt habe, müssen noch die Berechtigungen dem neuen Users zugewiesen werden. Ich gehe dazu in das Home-Verzeichnis des neuen Users und führen folgende Befehle aus:

chown -R USERNAME:USERNAME .ssh

(Hinweis: USERNAME ist dann der Name des neu hinzugefügten Users)

Damit haben wir die Datei dem neuen User und seiner Gruppe zugewiesen. Anschließend setzen wir noch die Zugriffsrechte auf 700 bzw. 600:

chmod 700 .ssh
chmod 600 .ssh/authorized_keys

Jetzt kann man sich mit SSH in den neuen User einloggen.

Firewall einrichten

Ein weiterer essentieller Schritt ist es eine Firewall einzurichten. Hierfür gibt es verschiedene Möglichkeiten. Am einfachsten ist die Verwendung der ufw Firewall. Diese installieren wir zunächst per Paketmanager. Dazu mache ich zunächst ein apt Update und anschließend installiere ich die ufw Firewall.

apt-get update
apt-get install ufw

Nach der Installation will ich als erstes jegliche Zugriffe auf den Server verbieten. Dazu setze ich die Defaulteinstellung der zugreifenden Verbindungen auf "deny". Mit dem Befehl

ufw default deny incoming

Ich will mich nicht selber aussperren, darum erlauben ich die SSH Verbindung auf den Server, bevor die Firewall scharf geschaltet wird

ufw allow 22/tcp

Jetzt kann ich die Firewall aktivieren mit

sudo ufw enable

Die Warnmeldung, dass es die SSH Verbindung unterbrechen könnte bestätige ich mit "yes".

Die Firewall ist jetzt aktiv und blockiert alles bis auf SSH. Wenn später Programme hinzugefügt werden, die eine Verbindung zur Außenwelt brauchen, müssen die entsprechenden Ports natürlich freigegeben werden.

Fail2ban einrichten

Um unliebsame Angreifer zu blockieren, kann man fail2ban einrichten. Das Programm wird nach einer vorgegebenen Anzahl an Einloggversuchen den Zugang für eine vorgegebene Dauer gesperrt. Hierzu installiere ich zunächst fail2ban auf dem System:

apt-get install fail2ban

Anschließend konfiguriere ich fail2ban so, dass ich mich nicht selbst aussperre. Dazu lege ich im fail2ban Ordner unter "/etc/fail2ban" einen sogenannten Jail an. Dazu kopiere ich die Standardkonfigurationsdatei und legen einen eigenen Jail an:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

In der jail.local Datei können nun die gewünschten Einstellungen konfiguriert werden. Die Datei öffne ich mit dem nano Editor

sudo nano /etc/fail2ban/jail.local

und bearbeite zunächst den sshd Eintrag, damit weiterhin über SSH auf den Server zugegriffen werden kann. Ich entferne das #-Zeichen (falls gesetzt) und setzen enabled=true.

Anschließend erhöhen ich noch die bantime, die findtime und die maxretry Werte. Auf beispielsweise:

bantime = 24h
findtime=1h
maxretry=3

Anschließend per [control]+[x] beenden und speichern.

Fazit

Um einen Server abzusichern ist nicht schwierig, erfordert aber dennoch einiges an Konfigurationsaufwand. Die hier gezeigten Schritte sind die absoluten must-haves. Es sollte kein Server ohne diese Grundabsicherung betrieben werden.

Hinweis: Ich habe für den Artikel ein Debian Linux auf einem VPS Server bei Hetzner verwendet.