How To: Linux mit ssh absichern
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
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
sudo apt-get install openssh-server
und auf den Clients:
BASH
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
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
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
$ 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
sudo nano /etc/ssh/sshd.conf
dort müssen folgende beiden Zeilen entweder unkommentiert werden oder neu hinzugefügt:
BASH
RSAAuthentication yes
PubkeyAuthentication yes
nun laden wir die config des ssh dienstes neu
BASH
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
ssh remoteuser@server
oder, falls unser privater ssh key für den Server nicht im default .ssh verzeichnis liegt:
BASH
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
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
/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