~ read.
SSH (1/3) : l'auth par clés

SSH (1/3) : l'auth par clés

J'ai gentiment reçu un mail d'Online pour m'informer qu'une de mes machines arrivait en fin de vie, et qu'une nouvelle m'attend pour migrer. Il est donc temps de reconfigurer un nouvel environnement comme il se doit, et on commence par la base, à savoir d'accès distant via SSH !

Le plan d'attaque

On va découper ça en trois parties :

  • dans cette première partie, on va modifier la configuration d'origine afin de ne pas utiliser d'authentification par mot de passe
  • ensuite, on va mettre en place une authentification forte à deux facteurs (2FA) avec des mots de passe expirants toutes les 30 sec (OTP)
  • puis, on finira avec le summum de la paranoïa en bloquant toutes IP essayant de se connecter illégitimement avec un fail2ban

Générations des clés

On génère notre paire de clés asymétriques simplement :

toto@laptop:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/toto/.ssh/id_rsa): 
Created directory '/home/toto/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/toto/.ssh/id_rsa.
Your public key has been saved in /home/toto/.ssh/id_rsa.pub.
The key fingerprint is:
18:6c:7e:f5:02:ca:7e:de:60:de:3c:fb:d4:92:24:ec toto@laptop
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|     .           |
|      + . .      |
|     + + + .     |
|      = S + o    |
|     . . . + o   |
|      . + E + .  |
|       = =.. .   |
|        o =+.    |
+-----------------+

Et on constate que l'on a bien une clé privée et une clé publique :

toto@laptop:~$ ls ~/.ssh/
id_rsa  id_rsa.pub

toto@laptop:~$ cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA9CIdOMDSUUAeeeUOpJDacz8W192t5iA0pv2y3yLiAfInEWPS
rzgg+Wu/hfd9GlOzid9ozCjQcMFNZhVklt/cyy5pPLb2HwGj+hMz6tDxvQKh6t6Z
IksVvoXDbFafj54wWj0oy9209DLEhyvh6ts9GppXb9Kj3/OXUO7a0sQc2c+7ajax
B2C37gHODkJn8HP1pgaAntavazhkLibym5uoAMgFMOES/wjYu9sKmY8cBZj8DLFf
qt9QhzkguazfKm1jnILyDkT1leYBIvOqpRnmuLqH5in8MBxhubRH/klMEgREUr00
jX8+a+bFeNk3n45PbwaBCL07WS8XpXKutyVhQQIDAQABAoIBAExtpaJP00f2f9P/
Xq8sXgc4WAlqb/ecW39v6yCqBgE/8vUhwCJ0uvX6wnHJQhQM4icmluNbX639BiMQ
TXZiTPga5n1IdhLM663tdxJrKVLX0SL7Xwt6YCtOKxjuoXNPvalyfiQcm3rbreT3
Wvmwexep+/eZBQ6mbte6fyz+kl2pa2YdT87+kb8v2BhnCP7dp6DD68/4ZtAQl/bA
ygqjD9H4lfbq1n8aGkw5UexkxVWSscvBcYgg3V1lbO37W7EyQ9oXZ6ElN+fDRpSH
8O7Ykn/JnQt6tg5aSSI2k+qCo668CUWMlh4nTbD941RbjV1bnax0Vvll64QqzHEs
YzkyhhUCgYEA+oIzfG6lL7TUtP8AQ19wtRQKkJno74wf9cnEpRVs2HrIVDYEk2Q7
labzjtNN2kxfZ7BLmoIXddq7WuNxmCBnnf/vJFGOHjb/wM11q58PyAYzqrRzOIUB
58zQQIrNfxfz+a6MOWKBbh6NCfh8LCZHrN5xC3vmsN8N3kQsCB4LBC8CgYEA+Xwi
0wTh5037Lz3PZSnae3I1rREKqZfoDkYhFfG5irKGmTENqr1xuPCMuHsYMmJrPDbs
vDfizKImbTEgUVng+az1AayIaXtiGSg63Jaln0XovUNikn5xPQqnL/oO+3z0p2dq
WBpw64/MWKoW7Mr0HwbLiyoUjhHKEu/yAt/A5Y8CgYBUzr11c9Pyiaq1N9sz89yp
QQaum5xzdKHhSRSMuuslgrPNZpg3+ef+Kw4rnTevHsnxxYpi3YXpvUpOY8+yK85I
fDvOtNmDOyVsdWJP3sKt+gOF2B9l1AmoGvupzhPx4f8T2VbZmpKs4CTpajlHjRIY
4RmuRJz95hXA2J17hgg+uwKBgBrQoN2VdMJru0fEmPoCmZ0TFXnYjxDTZvnBx+SX
6p1hut3US+fCHOsHz9g0QtGHiocaUC+awiHEe+TYluSniGrNkDfx12ee/1g83ra+
6mZIGU/eYkXkmT86WeXqNpoJQDKOBvwZO3HWLtyIy5X/6mU7Ub1PdI4gk1udtqFg
c1c5AoGBALMrFjt1HfTb/oiNU4+DgmDeRmn0MCZ0Orm7ENgeEYEJZkWAAByq/p6b
8dNoFOWfnCSsJA44OlhpwgLMyxmHYNDJOXWE3hByXSc0OFPhyYz3vd49vM/n5lS3
9+1QeQMcQtXXvOuynm+LY+8Qu7ae13sVB4hUw2YK3nbCszbfgAvq
-----END RSA PRIVATE KEY-----

toto@laptop:~$ cat ~/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0Ih04wNJRQB555Q6kkNpzPxbX3a3mIDSm/bLfIuIB8icRY9KvOCD5a7+F930aU7OJ32jMKNBwwU1mFWSW39zLLmk8tvYfAaP6EzPq0PG9AqHq3pkiSxW+hcNsVp+PnjBaPSjL3bT0MsSHK+Hq2z0amldv0qPf85dQ7trSxBzZz7tqNrEHYLfuAc4OQmfwc/WmBoCe1q9rOGQuJvKbm6gAyAUw4RL/CNi72wqZjxwFmPwMsV+q31CHOSC5rN8qbWOcgvIORPWV5gEi86qlGea4uofmKfwwHGG5tEf+SUwSBERSvTSNfz5r5sV42Tefjk9vBoEIvTtZLxelcq63JWFB toto@laptop

Installation de la clé publique

Plusieurs façons de faire existent, moi je la joue plutôt oldscholl :

toto@laptop:~$ ssh toto@server.com
toto@server's password: 
...
toto@server:~$ mkdir -p ~/.ssh
toto@server:~$ nano ~/.ssh/authorized_keys

Puis je copy/paste le contenu de ma id_rsa.pub dans le nouveau fichier. Mais il existe des façons plus exotiques de le faire comme :

toto@laptop:~$ ssh-copy-id toto@server.com

ou

toto@laptop:~$ cat ~/.ssh/id_rsa.pub | ssh toto@server.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Le plus important étant de vérifier que le fichier authorized_keys contient bien notre clé publique à la fin de l'opération :

toto@server:~$ cat ~/.ssh/authorized_keys

Modification du serveur ssh

On va faire un tour dans le fichier de configuration de ssh (on part du principe que vous savez utiliser sudo) :

toto@server:~$ sudo nano /etc/ssh/sshd_config

Et on prends bien soin de régler les paramètres suivants :

PermitRootLogin no              # car le login en root c'est le mal

PasswordAuthentication no       # car le login avec password c'est le mal aussi

Le test

On garde le terminal connecté au serveur ouvert, car on n'est pas à l'abri d'avoir fait une erreur à la con...

Redémarrage du service ssh :

toto@server:~$ sudo service ssh restart

Puis dans un nouveau terminal, on teste si la connexion fonctionne :

toto@laptop:~$ ssh toto@server.com

Si c'est bon, alors félicitations, t'es devenu un mec / une meuf bien !

Je vois venir ceux du fond avec les "mais on a pas changé le port de ssh là !" ou bien les "non mais la rsa elle est trop faible là ! j'ai lu un article où la NSA elle a...". Oui bah osef, ça nous suffit ! Vous comprendrez dans la 2ème et 3ème partie.