SSH authenticatie met keys

De Linux terminal is een krachtige wijze om systemen te beheren en configureren. Om vanaf afstand bij de terminal te komen is er SSH (Secure Shell), wat kan worden gezien als de opvolger van Telnet. Het is verstandig om SSH goed te beveiligen.

Om de SSH server te installeren is het volgende commando voldoende:

sudo apt-get install openssh-server

Echter zal elke SSH server die vanaf buitenaf bereikbaar is op den duur de nodige login pogingen krijgen die proberen met de diverse gebruikersnamen en wachtwoorden in te loggen. Dit heeft als doel de machine over te nemen voor minder prettige doeleinden (versturen van spam, deelname aan een botnet, etc.). Deze pogingen zijn terug te vinden in /var/log/auth.log.

Eerder schreef ik al een blog over de tool DenyHosts die hierbij kan helpen, maar nog beter is het om gebruik te maken van authenticatie met keys en het inloggen via gebruikersnaam+wachtwoord uit te schakelen.

Hoe werken keys?

Het idee achter authenticatie met keys is simpel. Voor ieder apparaat waarmee je gebruik wilt maken van SSH genereer je een unieke private key en een unieke public key. Deze keys zijn niet hetzelfde.

De private key blijft op het apparaat zelf en de public key wordt, op de machine waar je verbinding mee wilt maken, bekend gemaakt. De SSH server versleuteld de data met de public key van de machine en die data kan vervolgens alleen ontsleuteld worden met de private key. Hierdoor is de verstuurde data onbruikbaar zolang de private key niet bekend is.

Het is uiteraard van groot belang dat de private key enkel op het eigen apparaat blijft. Zodra die key mogelijk bekend is bij anderen is het verstandig om nieuwe keys te genereren en de toegang van de huidige key op te heffen. Dit is te vergelijken met de sleutels van je huis.

Keys genereren

Het genereren van de keys dient op de client (het apparaat waarvandaan verbinding zal worden gemaakt) gedaan te worden. De methode hiervoor verschilt per OS.

Linux
Onder linux is er geen extra software nodig indien de openssh-server is geïnstalleerd.

  1. Als eerst maken we een verborgen directory (begint met een punt) aan in de home directory van de gebruiker en zetten de rechten goed:
    mkdir ~/.ssh/
    chmod 700 ~/.ssh

    Het is mogelijk dat deze directory al bestaat, ga dan door naar de volgende stap.

  2. Vervolgens kunnen we een key aan gaan maken voor dit apparaat met het volgende commando:
    open-ssh -t rsa

Windows
Onder Windows is er extra software voor nodig, een veelgebruikte tool is PuttyGEN. Zoals de naam al doet vermoeden is dit van dezelfde makers als Putty.

  1. Start PuttyGEN op en klik op “Generate”.

    puttygen_01

  2. Nu vraagt PuttyGEN om de muis te bewegen in het grijze vlak. Hiermee zorgt PuttyGEN ervoor een zo random mogelijke key te genereren.

    puttygen_02

  3. Na genoeg muisbewegingen kan PuttyGEN de keys genereren. Vul vervolgens een goede passphrase in om de key te beveiligen.

    puttygen_03

    De passphrase is een belangrijk element van een goede beveiliging. Kies daarom een sterk wachtwoord met voldoende lengte.

  4. Sla zowel de public als de private key op. Gebruikelijk is om de hostname te gebruiken en de extensie .key voor de private key en de extensie .pub voor de public key.

Nu zijn de benodigde keys gegenereerd en is het tijd om deze op de server te gaan zetten.

Public key toevoegen op server

De public key dient bekend gemaakt te worden op de server door de content van de public key in ~/.ssh/authorized_keys toe te voegen. Als eerst moet de public key naar de server getransporteerd worden. Ook hier verschilt de werkwijze per OS.

Linux
Om de key op de server te krijgen kan scp worden gebruikt:

scp ~/.ssh/pc-dick.pub user@server:~/.ssh/

Voor meer informatie over scp, zie de manpage scp.

Windows
Gebruik hiervoor het programma WinSCP. Wie al eens met een FTP programma heeft gewerkt zal ook prima met WinSCP kunnen werken.

Mocht het niet helemaal lukken of duidelijk zijn: WinSCP heeft ook uitvoerige documentatie.

Public key als vertrouwde key toevoegen

Wanneer de key eenmaal op de server staat kan met het volgende commando de key worden toegevoegd aan de vertrouwde keys:

cat public_key >> ~/.ssh/authorized_keys

Het kan zijn dat de authorized_keys file nog niet bestaat, maak deze dan zelf aan.

Let goed op de dubbele groter dan tekens >>. Een enkel teken zal de gehele inhoud van het bestand overschrijven en alleen de meest recente key nog toelaten!

Verbinding maken

Onder linux hoef je nu niets meer te doen, een eenvoudig ssh commando maakt nu gebruik van de key(s).

Onder Windows moet Putty nog worden geconfigureerd om gebruik te maken van de key.

  1. Open Putty.
  2. Ga in het linkervenster naar “Auth” en geef vervolgens in het rechtervenster een “Private key file for authentication” op.

    putty_01

Om niet elke keer de key in te moeten stellen is het handig om in Putty een profiel aan te maken.

Nu wordt er gebruik gemaakt van de key(s) en heb je de gekozen passphrase nodig om in loggen.

Uitschakelen authenticatie zonder keys

Aangezien er nu toegang wordt verschaft met keys is het verstandig om de authenticatie op basis van gebruikersnaam en wachtwoord uit te schakelen.

  1. Om deze wijze van authenticatie uit te schakelen openen we het configuratie bestand van de ssh server (/etc/ssh/sshd_config):
    nano /etc/ssh/sshd_config
  2. Zoek naar de regel met PasswordAuthentication. Controleer of deze regel niet uitgecomment is door ervoor te zorgen dat er geen # voor staat. Verander de “yes” erachter vervolgens in “no”. De regel wordt dan:
    PasswordAuthentication no
  3. Herstart de SSH server:
    sudo /etc/init.d/sshd restart

    of

    sudo service sshd restart

Hierna is het enkel nog mogelijk om met behulp van keys in te loggen op de server. Dit scheelt een hoop foutieve login pogingen en bied zo extra bescherming voor de SSH server.

Leave a Reply

Your email address will not be published. Required fields are marked *