How To: Linux mit ssh absichern

SYSTEM
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:


BASH code

  1. 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

  1. sudo apt-get install openssh-server

und auf den Clients:


BASH code

  1. 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

  1. sudo ssh-keygen
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/home/user/.ssh/id_rsa):
  4. Enter passphrase (empty for no passphrase):
  5. Enter same passphrase again:
  6. Your identification has been saved in /home/user/.ssh/id_rsa.
  7. Your public key has been saved in /home/user/.ssh/id_rsa.pub.
  8. The key fingerprint is:
  9. 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

  1. 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

  1. $ ssh remoteuser@server
  2. remoteuser@server's password:
  3. remoteuser@server:~$ cat id_rsa.pub >> ~/.ssh/authorized_keys
  4. remoteuser@server:~$ rm id_rsa.pub
  5. 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

  1. sudo nano /etc/ssh/sshd.conf

dort müssen folgende beiden Zeilen entweder unkommentiert werden oder neu hinzugefügt:


BASH code

  1. RSAAuthentication yes
  2. PubkeyAuthentication yes

nun laden wir die config des ssh dienstes neu


BASH code

  1. 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

  1. ssh remoteuser@server

oder, falls unser privater ssh key für den Server nicht im default .ssh verzeichnis liegt:


BASH code

  1. 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

  1. sudo nano /etc/ssh/sshd_config
  2.  
  3. ChallegeResponseAuthentication no
  4. PasswordAuthentication no
  5. UsePAM no

Abschließend laden wir noch die config neu und unser Server ist wieder ein kleines Stück sicherer


BASH code

  1. /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