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
- Défini un nom d'utilisateur (on ne renseigne pas de mot de passe)
- Colle la clef publique générée
pbcopy < ~/.ssh/[nom-de-la-clef].pub
- 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