How To: Linux mit ssh absichern
mastercad
17.11.2013 00:41:19
Auf meinen Servern habe ich ssh installiert um eine möglichst sichere Verbindung beim warten der Server zu gewährleisten. In diesem Tutorial möchte ich erklären, wie man das auf einfache Art und Weise nachvollziehen kann.
Es herrscht folgende Ausgangssituation:
es gibt mindestens 1 Client, der user auf dem Client heißt ersartweise user
es gibt einen Server, auf dem Server existiert ein User über den man sich authentifizieren will, hier ersatzweise remoteuser, der user muss nicht zwangsläufig konform zu dem user auf dem client sein
auf dem Server wie auch auf dem Client ist Linux installiert, hier Ubuntu auf allen Rechnern
es besteht eine direkte oder indirekte Verbindung über das netzwerk zwischen den Rechnern
es besteht eine direkte oder indirekte Verbindung zum Internet sowie für den/die Clients als auch für den Server.
man beginnt indem man auf dem Server sowie auf den Clients den ssh service installiert:
damit installiert man sowohl den openssh-server als auch den openssh-client. Will man das vermeiden kann man auch auf dem Server und auf den Clients händisch die jeweiligen Varianten installieren:
Auf dem Server per
und auf den Clients:
nun kann man auf den Clients der jeweiligen Benutzer die öffentlichen und privaten ssh Certifikate generieren (läßt man hier die Passphrase weg, braucht man keine Passphrase beim anmelden am Server per ssh eingeben, es besteht aber auch das direkte Risiko, das sich jeder an eurem Server anmelden kann, der in den Besitz eures privaten ssh keys gelangt!):
durch bestätigen der defaults werden die keys im jeweiligen Home Verzeichnis des Benutzers angelegt unter .ssh/
Nun müssen wir den öffentlichen key (.pub) auf den Server kopieren:
Ist das erledigt, loggt man sich auf dem server ein und fügt diesen key der liste der authorized_keys unter ~/.ssh/authorized_keys für den jeweiligen User hinzu:
Ist das geschehen, können wir auf dem Server das Authentifizieren über die key paare aktivieren, das bedeutet, das der öffentlichen Schlüssel auf dem Server Benutzerkonto existiert und der dazugehörige private Schlüssel auf dem zu authentifizierenden Client vorliegt.
dort müssen folgende beiden Zeilen entweder unkommentiert werden oder neu hinzugefügt:
nun laden wir die config des ssh dienstes neu
nun können wir uns vom Client aus ohne Benutzung eines Passwortes (aber unter angabe der beim generieren des keys übergebenen Passphrase) testweise am Server anmelden:
oder, falls unser privater ssh key für den Server nicht im default .ssh verzeichnis liegt:
Wollen wir den Server weiter absichern und es kiddys erschwehren, sich per Bruteforce oder durch andere mechanismen doch irgendwie das Passwort zu erschleichen um sich auch ohne das Keyfile anzumelden, deaktivieren wir diese
Option auf dem Server, dazu öffnen wir wieder die config datei des SSH Dienstes und stellen folgende 3 Einträge auf no:
Abschließend laden wir noch die config neu und unser Server ist wieder ein kleines Stück sicherer
Sollten Probleme oder Fragen auftauchen, nutzt doch besser die Kommentatoroption hier im Thread, ich habe arge Not die vielen Mails immer zu beantworten und viele der Fragen tauchen immer wieder auf. Ich habe nur meistens leider nicht die Zeit, die Fragen noch hierher mit zu übertragen :)
in diesem Sinne und viel Spaß beim nachbauen.
euer byte-artist
Es herrscht folgende Ausgangssituation:
es gibt mindestens 1 Client, der user auf dem Client heißt ersartweise user
es gibt einen Server, auf dem Server existiert ein User über den man sich authentifizieren will, hier ersatzweise remoteuser, der user muss nicht zwangsläufig konform zu dem user auf dem client sein
auf dem Server wie auch auf dem Client ist Linux installiert, hier Ubuntu auf allen Rechnern
es besteht eine direkte oder indirekte Verbindung über das netzwerk zwischen den Rechnern
es besteht eine direkte oder indirekte Verbindung zum Internet sowie für den/die Clients als auch für den Server.
man beginnt indem man auf dem Server sowie auf den Clients den ssh service installiert:
BASH code
sudo apt-get install ssh
damit installiert man sowohl den openssh-server als auch den openssh-client. Will man das vermeiden kann man auch auf dem Server und auf den Clients händisch die jeweiligen Varianten installieren:
Auf dem Server per
BASH code
sudo apt-get install openssh-server
und auf den Clients:
BASH code
sudo apt-get install openssh-client
nun kann man auf den Clients der jeweiligen Benutzer die öffentlichen und privaten ssh Certifikate generieren (läßt man hier die Passphrase weg, braucht man keine Passphrase beim anmelden am Server per ssh eingeben, es besteht aber auch das direkte Risiko, das sich jeder an eurem Server anmelden kann, der in den Besitz eures privaten ssh keys gelangt!):
BASH code
sudo ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsa. Your public key has been saved in /home/user/.ssh/id_rsa.pub. The key fingerprint is: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX user@client
durch bestätigen der defaults werden die keys im jeweiligen Home Verzeichnis des Benutzers angelegt unter .ssh/
Nun müssen wir den öffentlichen key (.pub) auf den Server kopieren:
BASH code
sudo scp ~/.ssh/id_rsa.pub remoteuser@Server:~/
Ist das erledigt, loggt man sich auf dem server ein und fügt diesen key der liste der authorized_keys unter ~/.ssh/authorized_keys für den jeweiligen User hinzu:
BASH code
$ ssh remoteuser@server remoteuser@server's password: remoteuser@server:~$ cat id_rsa.pub >> ~/.ssh/authorized_keys remoteuser@server:~$ rm id_rsa.pub remoteuser@server:~$ exit
Ist das geschehen, können wir auf dem Server das Authentifizieren über die key paare aktivieren, das bedeutet, das der öffentlichen Schlüssel auf dem Server Benutzerkonto existiert und der dazugehörige private Schlüssel auf dem zu authentifizierenden Client vorliegt.
BASH code
sudo nano /etc/ssh/sshd.conf
dort müssen folgende beiden Zeilen entweder unkommentiert werden oder neu hinzugefügt:
BASH code
RSAAuthentication yes PubkeyAuthentication yes
nun laden wir die config des ssh dienstes neu
BASH code
sudo /etc/init.d/ssh reload
nun können wir uns vom Client aus ohne Benutzung eines Passwortes (aber unter angabe der beim generieren des keys übergebenen Passphrase) testweise am Server anmelden:
BASH code
ssh remoteuser@server
oder, falls unser privater ssh key für den Server nicht im default .ssh verzeichnis liegt:
BASH code
ssh -i /pfad/zum/privaten/key remoteuser@server
Wollen wir den Server weiter absichern und es kiddys erschwehren, sich per Bruteforce oder durch andere mechanismen doch irgendwie das Passwort zu erschleichen um sich auch ohne das Keyfile anzumelden, deaktivieren wir diese
Option auf dem Server, dazu öffnen wir wieder die config datei des SSH Dienstes und stellen folgende 3 Einträge auf no:
BASH code
sudo nano /etc/ssh/sshd_config ChallegeResponseAuthentication no PasswordAuthentication no UsePAM no
Abschließend laden wir noch die config neu und unser Server ist wieder ein kleines Stück sicherer
BASH code
/etc/init.d/ssh reload
Sollten Probleme oder Fragen auftauchen, nutzt doch besser die Kommentatoroption hier im Thread, ich habe arge Not die vielen Mails immer zu beantworten und viele der Fragen tauchen immer wieder auf. Ich habe nur meistens leider nicht die Zeit, die Fragen noch hierher mit zu übertragen :)
in diesem Sinne und viel Spaß beim nachbauen.
euer byte-artist