Retour aux articles
Securisation connection SSH

Securisation connection SSH

Victor Darcel /

Dans cet article, nous allons voir comment installer un serveur avec un SSH sécurisé, en suivant les recommandations de la fondation Mozilla.

Génération de la clef SSH (côté client)

ssh-keygen -o -a 100 -b 521 -t ed25519 -f ~/.ssh/[nom-de-la-clef] -C "ed25519-key-[date]"

Explication des options utilisées :
-o : sauvegarde la clé dans le nouveau format openssh au lieu de l’ancien format PEM
-C : permet d’ajouter un commentaire à la clé. Je mets le type de clé et la date
-t : spécifie le type de clé
-a : plus le nombre est élevé et plus la vérification de la passphrase sera lente et donc résistante aux attaques par brut-force.
-f : précise le répertoire de sortie de la clé
-b : spécifie le nombre de bits de la clé. Avec un type RSA un minimum de 4096 bits est conseillé. Avec l’ed25519 une clé 521 bits est suffisamment costaud.

Création de l'image

Télécharger Raspberry pi Imager

sur : https://www.raspberrypi.com/software/

Choisi l image

Perso, je choisi rapsbian lite

Configuration

  1. Défini un nom d'utilisateur (on ne renseigne pas de mot de passe)
  2. Colle la clef publique générée
    pbcopy < ~/.ssh/[nom-de-la-clef].pub
  3. Si tu utilises un réseau Wi-Fi, renseigne les informations nécessaires.

Configuration du SSH côté client

Cherche sur ton réseau interne l'adresse IP du Raspberry PI (il est recommandé de lui attribuer une adresse IP fixe). Côté client, on lie la clef générée à l'adresse IP du Raspberry Pi.

Host [RaspberryPi IP/URL]
	AddKeysToAgent yes
	UseKeychain yes
	IdentityFile ~/.ssh/[nom-de-la-clef]

Première connexion

Dans un terminal, ouvre une connexion SSH.

 ssh [nom_d_utilisateur]@[adress_ip_local]

Une fois connecté, on met à jour le serveur :

sudo apt-get update
sudo apt-get full-upgrade -y

On reboot

sudo reboot

Configuration du SSH côté Raspberry pi

Dans un terminal, ouvre une connexion SSH

 ssh [nom_d_utilisateur]@[adress_ip_local]

Modifie le fichier : /etc/ssh/sshd_config.d

Port 3022
Protocol 2

#auth restriction
LoginGraceTime 30s
PermitRootLogin no
StrictModes yes
MaxAuthTries 3
MaxSessions 5

PubkeyAuthentication yes
AllowUsers MY_USER_NAME
AuthorizedKeysFile  .ssh/authorized_keys

# To disable tunneled clear text passwords, change to no here!
PermitEmptyPasswords no
PasswordAuthentication no

# Change to no to disable s/key passwords
ChallengeResponseAuthentication no

UsePAM yes

AllowAgentForwarding no
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no
PermitTTY yes
PermitUserEnvironment no
PrintMotd no
PrintLastLog yes

#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
UseDNS yes
PidFile /var/run/sshd.pid
MaxStartups 10:30:100
PermitTunnel no
#ChrootDirectory none
VersionAddendum none

# no default banner path
Banner none

# Accept locale-related environment variables
AcceptEnv LANG LC_*

KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,sk-ssh-ed25519@openssh.com,sk-ssh-ed25519-cert-v01@openssh.com

Redémare le service sshd

sudo systemctl restart sshd.service

Garde cette connexion et ouvre en nouvelle, si cette dernière est non fonctionnelle , la première maintenue ouverte te permettra de la debugger

Dans un terminal ouvre une connexion SSH

 ssh -p 3022 [nom_d_utilisateur]@[adress_ip_local]

Si tout se passe bien, bravo ! ta connexion SSH est sécurisée.

Nous avons vu ici un axe d’amélioration de la sécurité mise en place par default. Mais, il existe d’autres axes, d’autres leviers pour améliorer la sécurité de ta connexion :

  • MFA (Multi-factor authentication)
  • White lister exlusivement ton adresse IP
  • ….

Sources :

  • https://www.petitsurfeur.net/securite/securiser_acces_ssh_cle_ed25519/
  • https://infosec.mozilla.org/guidelines/openssh