{Daßler} Software & Application Development

SSH Zugang einrichten und absichern

Lesezeit: ~ 5 Minute(n), 41 Sekunde(n) / de

Im Internet gibt es automatische Scripte, die auf alle IP Adressen, die sie ermitteln, einen Bruteforcing-Angriff starten, indem sie sich mit root auf eure Server-IP und den TCP-Port 22 - welcher standardmäßig für SSH genutzt wird - versuchen anzumelden und viele mögliche Passwörter einfach ausprobieren, bis sie Glück haben und das Passwort "erraten". Deshalb ist es aus Sicherheitsgründen unbedingt wichtig, den SSH Zugang eures Servers abzusichern!

Dazu loggt man sich auf dem eigenen vServer über den Terminal ein:

$ ssh -l root <Server-IP>

Hinweis: Die Begriffe, welche ich mit Hilfe von <> ausdrücke, sind hier als Platzhalter zu verstehen, die ihr gegen eure vorliegenden Informationen austauschen müsst. Ihr bekommt außerdem beim ersten Verbindungsaufbau über SSH mitgeteilt, dass ihr den Fingerabdruck eures Servers bestätigen sollt. Das ist ganz normal und sollte sich nur erneut wiederholen, wenn ihr entweder einen anderen Nutzer zur Anmeldung benutzt, oder sich euer Server bzw. Computer zum Verbinden geändert hat. Ist das nicht der Fall und ihr bekommt die Aufforderung erneut, könnte es ein Hinweis sein, dass sich etwas am Verbindungsaufbau zu eurem Server geändert hat! Im Zweifelsfall, dass euer Server evtl. kompromitiert wurde, fragt dann bitte bei eurem Provider nach.

Falls ihr Windows benutzt, werdet ihr keinen SSH-Client installiert haben.​​​​​​​ Um also eine Verbindung aufbauen zu können, benutzt ihr am besten das freie Tool PuTTY, welches ihr hier finden könnt.

 

Neuen SSH-Benutzer anlegen

Nachdem man sich nun auf dem vServer von der Ferne aus angemeldet hat, sollte man einen neuen SSH-Benutzer anlegen. Das empfielt sich, da der Root Benutzer vollen administrativen Zugriff hat und man sich mit diesem Benutzer nicht direkt anmelden sollte.

Für zusätzliche Sicherheit, überlegt man sich nun einen zufällig generierten Benutzernamen (zwischen 10 und 20 kleine Buchstaben, keine Sonderzeichen) und legt diesen mit folgendem Befehl als neuen SSH-Benutzer an:

$ adduser --shell /bin/bash --disabled-password --ingroup 'ssh' <Benutzername>

Hinweis: Der Parameter --disabled-password konfiguriert den neuen Benutzer so, dass er ohne Passwort angelegt wird. Das ist für unseren Fall wichtig und auch ungefährlich, da wir uns zukünftig mit Hilfe eines SSH-Schlüsselpaares anmelden möchten. Das ist eine sehr sichere Variante, da man im Besitz des Schlüsselpaares (als Textdatei auf dem Computer gespeichert) sein muss, um eine Verbindung zum Server aufbauen zu können. Ein Passwort alleine reicht nicht aus!

Nun kann man zu diesem Benutzer innerhalb des Systems wechseln:

$ su - <Benutzername>

Danach erzeugt man für diesen Benutzer ein eigenes SSH-Schlüsselpaar mit einer von euch gewählten Passphrase (entspricht einem Passwort):

$ ssh-keygen -t rsa -b 4096

Danach findet ihr die erzeugten Dateien für das Schlüsselpaar an der Folgenden Stelle auf dem Server:

/home/<Benutzername>/.ssh/id_rsa (Das ist euer privater Schlüssel!)

/home/<Benutzername>/.ssh/id_rsa.pub (Das ist euer öffentlicher Schlüssel!)

Den öffentlichen Schlüssel benennen wir jetzt noch in eine sich durchgesetzte Namenskonvention, um und geben vollen Zugriff darauf.

$ mv /home/<Benutzername>/.ssh/id_rsa.pub /home/<Benutzername>/.ssh/authorized_keys
$ chmod 700 /home/<Benutzername>/.ssh​​​​​​​
$ chmod 600 /home/<Benutzername>/.ssh/authorized_keys

Speichert nun den privaten Schlüssel auf eurem privaten Computer, damit ihr euch dann auch auf den Server verbinden könnt. Zeigt euch am besten den Schlüssel mit dem Texteditor nano an:

$ nano /home/<Benutzername>/.ssh/id_rsa

Markiert die komplette Zeichenkette, welche euch über mehre Zeilen angezeigt wird, und kopiert den Text. Danach legt euch auf dem privaten Computer eine Datei mit Namen <Benutzername>_rsa an und kopiert den Inhalt hinein. Bitte geht mit dieser Datei dann sorgsam um, schützt diese vor Dritten und legt euch eine Sicherungskopie an und verwahrt diese an einem sicheren Ort!

​​​​​​​

Test der Anmeldung des neuen SSH-Benutzers

Bevor wir die SSH-Konfiguration des Servers ändern, versuchen wir uns einmal mit Hilfe des eben erstellten Benutzers per SSH anzumelden. Öffnet dazu ein neues Terminal (lasst das andere Terminal unbedingt offen, in welchem ihr gerade den Benutzer angemeldet habt!) und gebt den Befehl ein:

$ ssh -l <Benutzername> <Server-IP> -i <vollständiger Dateipfad zur lokalen <Benutzername_rsa> Datei>

Hinweis: Ihr seht, dass die private Schlüsseldatei nun für zukünftige Anmeldungen benutzt wird. Ich habe meine <Benutzername_rsa> Datei deshalb in dem Homeverzeichnis meines Benutzers liegen, den ich an meinem privaten Computer nutze. Dazu habe ich mir ein Unterverzeichnis .ssh angelegt und diese Schlüsseldatei hinein kopiert. In MacOS und Linux stellt sich das Homeverzeichnis des angemeldeten Benutzers mit der Tilde dar, deswegen sieht der vollständige Pfad bei mir so aus: ~/.ssh/<Benutzername_rsa>.

Um unter Windows mit PuTTY eine Verbindung aufbauen zu können, müsst ihr den privaten Schlüssel erst in ein für PuTTY lesbares Format überführen und diesen unter ConnectionSSHAuth → unten bei "Browse" einstellen. Dafür benötigt man das Programm PuTTYgen, welches ebenfalls hier heruntergeladen werden kann. Führt dann folgende Schritte aus:

  1. Benennt die Datei <Benutzer_rsa> in <Benutzer_rsa>.ppk um (ppk = PuTTY Private Key)
  2. PuTTYgen öffnen und "Load an exisiting private key" klicken
  3. <Benutzer_rsa>.ppk auswählen und anschließend eure Passphrase eingeben
  4. Abschließend "Save private key" klicken

Wenn die Anmeldung geklappt hat, solltet ihr nun im Terminal ebenfalls als <Benutzer> am Server angemeldet sein. Ihr könnt danach dieses Terminal wieder beenden und wir machen im anderen Terminal weiter, welches wir vorhin offen gelassen haben.

 

SSH-Konfiguration des Servers ändern

Wenn die Anmeldung im Test geklappt hat, muss man nun im Terminal wieder zurückkehren als Root Benutzer. Dazu reicht einfach der Befehl:

$ exit

Als Root öffnet man nun die SSH-Konfiguration des Servers:

$ nano /etc/ssh/sshd_config

Wir haben am Anfang gelernt, dass es automatische Scripte im Internet gibt, die einen Anmeldeversuch auf dem TCP-Port 22 versuchen. Deshalb lassen wir zukünftig unsere SSH-Konfiguration auf einem anderen TCP-Port lauschen. Sinnvoll ist es, sich einen Port im Bereich 28002-28394, o.ä. zu suchen. Eine Liste der standardisierten Ports findet man hier. Im Nachfolgenden gehe ich von dem Port 28002 aus. Deshalb ändern bzw. ergänzen wir die SSH-Konfiguration um die folgenden Zeilen, um unseren oben angelegten Benutzer die alleinige Anmeldung per SSH zu erlauben:

..
Port 28002
PermitRootLogin no
AllowUsers <Benutzername>
..

Bitte kontrolliert noch einmal, ob ihr keine Zeilen doppelt in der Konfiguration stehen habt, bzw. keine Schreibfehler gemacht habt! Ansonsten sperrt ihr euch vom Server aus und ihr müsst Kontakt zu eurem Support aufnehmen! Bei netcup gibt es allerdings eine Rettungsfunktion, die man auch ohne Support nutzen kann. Diese findet ihr, wenn ihr euch in den Zugangsdaten die Anmeldung für das Server Control Panel raussucht und verbindet.

Als letztes muss der SSH Dienst auf dem Server neugestartet werden:

$ service sshd restart
$ exit

 

Zukünftige Anmeldung mit neuem Benutzer

Ähnlich der Testanmeldung, meldet man sich nun zusätzlich zur <Benutzer_rsa> Datei noch mit dem neuen TCP-Port an. In meinem Bsp. sieht es so aus:

$ ssh -l <Benutzername> <Server-IP> -i ~/.ssh/<Benutzername_rsa> -p 28002

 

Nun sind wir auch schon am Ende des Artikels. Ich hoffe, dass dieser euch geholfen hat und einen kleinen Einblick in die grundlegenden Sicherheitsaspekte zu SSH Verbindungen gegeben hat. Jedenfalls seid ihr jetzt mit einigen Schlagworten vertraut, die ihr in Verbindung mit einer Suchmaschine eurer Wahl nutzen könnt, um Detailwissen zu erlangen. Hat euch dieser Artikel gefallen und wollt ihr mich unterstützen, dann schaut auf meiner Rubrik Crowdfunding vorbei.

Software​entwicklung


Entwicklung von Crossplatform Apps für iOS/Android via React-Native, dynamische und ansprechende Websites via Django/Python, React und Bootstrap, Automatisierung von Workflows via Scripting. Berücksichtigung der Philosophie von Open-Source und Nachhaltigkeit.

Open-Source


Ich finde, dass uns das Internet zu einem Meilenstein beim Teilen von Wissen und Inhalten verholfen hat. Diese Dinge sollten meiner Meinung nach frei zugänglich sein und das Copyright aufgehoben werden. Ein wichtiges Anliegen von mir ist deshalb die freie Bereitstellung meines Wissens in der Hoffnung, andere schließen sich dem Open-Source Gedanken ebenso an und verhelfen uns dabei auf die nächste Evolutionsstufe!

Blogging


Das Leben ist weder Schwarz noch Weiß, sondern sehr facettenreich. Ich versuche mehrere dieser Facetten als übergreifendes Ganzes zu betrachten. Deshalb finden sich in meinen Blogs Themen zu Selbständigkeit, Technik, Natur und Philosophie.
Zum Anfang