Linux Server absichern

Photo by Taylor Vick on Unsplash

Linux Server absichern

┬Ě

6 min read

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.