0% ont trouvé ce document utile (0 vote)
28 vues52 pages

Sécurisation des accès SSH sur Linux

Le document présente un plan pour sécuriser les accès SSH sur des serveurs Linux en suivant les bonnes pratiques de l'ANSSI. Il inclut des recommandations pour l'installation et la configuration des machines virtuelles, des commandes SSH pour la connexion et le transfert de fichiers, ainsi que des mesures de sécurité comme le changement de port, l'utilisation de fail2ban et l'implémentation de l'authentification à deux facteurs. Des étapes pratiques sont également fournies pour tester et appliquer ces configurations.

Transféré par

Le Soldat Ryan
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
28 vues52 pages

Sécurisation des accès SSH sur Linux

Le document présente un plan pour sécuriser les accès SSH sur des serveurs Linux en suivant les bonnes pratiques de l'ANSSI. Il inclut des recommandations pour l'installation et la configuration des machines virtuelles, des commandes SSH pour la connexion et le transfert de fichiers, ainsi que des mesures de sécurité comme le changement de port, l'utilisation de fail2ban et l'implémentation de l'authentification à deux facteurs. Des étapes pratiques sont également fournies pour tester et appliquer ces configurations.

Transféré par

Le Soldat Ryan
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Enforçing SSH

2025-2026

Vincent Julien
Objectif

Sécuriser nos accès SSH de nos serveurs Linux selon les bonnes pratiques de l’ANSSI
Présentation de nos machines

1 machine Rocky Linux 1 machine Rocky Linux


nommé VM01-SECURE nommée VM02-ATTACK
• 1 VCPU • 1 VCPU
• 1 Go de RAM • 1 Go de RAM
• 20 Go de stockage • 60 Go de stockage
• Configuration réseau : NAT • Configuration réseau : NAT
• Nous devrons sécuriser cette • Nous nous servirons de cette
machine machine exécuter des attaques
Quelques recommandations SSH
• Utilisation de protocoles sécurisées (SSH et pas de telnet)
• SSH à jour
A faire

• Installer les deux machines virtuelles


• Activer le root login
Utilisation des commandes SSH

Se connecter depuis une machine linux vers une autre


machine linux

ssh <nom_utilisateur>@<ipaddress> -p <num_port>

Exemple :

ssh julien@[Link] -p 15000


Utilisation des commandes SSH

Transférer des fichiers via SSH avec la commance scp


• scp <fichier> <username>@<ipaddressDistant>:<DestinationDirectory>
• Exemple :
• scp [Link] julien@[Link]:/home/Julien
Utilisation des commandes SSH

Transférer des répertoires via SSH avec la commande scp


• scp –r <répertoire> <username>@<ipaddressDistant>:<DestinationDirectory>
• Exemple :
• scp –r répertoire julien@[Link]:/home/Julien
Utilisation des commandes SSH

Récupérer des fichiers via SSH avec la commande scp


• scp –r <répertoire> <username>@<ipaddressDistant>:<DestinationDirectory>
• Exemple :
• scp julien@[Link]:/home/Julien/[Link] .
• Le poin permet de copier le fichier [Link] dans le répertoire courant
Utilisation des commandes SSH

Copier des fichiers entre deux machines avec une troisième


machine

scp utilisateur@VM01:chemin/fichier utilisateur @VM02:chemin/fichier


Pour utiliser les noms, il faut veiller à avoir la résolution de nom opérationnelle ( /etc/hosts)
Utilisation des commandes SSH

Synchroniser le contenu de deux répertoires avec rsync


• rsync -av --progress --stats utilisateur@machine:/srv/wiki /TEST 2>[Link]
• Permet de copier le repertoire /srv/wiki de la machine vers notre machine dans un répertoire
• -a : archive ⇒ préserve les dates, permissions, etc … des fichiers. Inclus l'option récursivité. Option à utiliser quand on veut transférer
des répertoires entiers avec leurs sous-répertoires en préservant toutes les caractéristiques des fichiers.
-r : la synchro est récursive (elle prend les sous-répertoires). Est inclus dans l'option -a
-v : verbeux (affichage de ce que fait la commande pendant qu'elle le fait).
-l : copie les liens symboliques comme liens symboliques. Est inclus dans l'option -a
-L : remplace les liens symboliques par les fichiers référencés.
--remove-sent-files : les fichiers envoyés sont supprimés de chez l'émetteur. Il ne s'agit donc plus de faire une synchro mais bien de faire
un transfert.
--delete : efface sur la cible les fichiers qui ont disparus du répertoire de départ. Option très importante qui permet d'être sûr que la
copie est identique à l'original. Mais si on se trompe sur l'original, on perd la copie.
--exclude=MOTIF : exclus de la synchro les fichiers correspondant au MOTIF (par exemple *.txt pour exclure les fichiers avec l'extension
.txt).
-z : comprime les fichiers pendant le transfert. N'a d’intérêt que pour des transferts à travers des réseaux, car sinon la compression /
décompression fait perdre du temps.
A faire :

• Créer l’arborescence suivante : /srv/test/copie/


• Créé l’utilisateur votre_nom sur les deux VMs
• Définir un mot de passe à votre utilisateur
• Dans ce répertoire créé un fichier test
• Copier le fichier test sur la machine VM02-ATTACK dans le
répertoire tmp
• Copier l’arborescence dans la machine VM02-ATTACK
• Créér plusieurs fichiers dans /srv/test/copie/
• puis utiliser RSYNC
• Vérifier si les fichiers sont présents
Configuration SSH
Par défaut, le fichier de configuration SSH est dans /etc/ssh/sshd_config
/etc/ssh/sshd_conf.d/10 ou [Link]
• SSH fonctionne sur le port 22
• Il est recommandé pour des machines exposés sur Internet de
changer le port par défaut ( sécurisation par offuscation )
• ATTENTION, il est indispensable de logger les tentatives
A faire :

• Changer le port de fonctionnement sur le port 15000


Tester une attaque par dictionnaire

La synthase de la commande
Sur la VM
dnf install epel-release ATTACK hydra est la ci-contre :
dnf install git make gcc wget hydra -l < nom d'utilisateur > -P <
dnf install libssh2-devel.x86_64 mot de passe fichier de > -s < port
dnf install libssh-devel.x86_64 > -V < ip > < protocole >
mkdir hydra
Git clone [Link]
• Exemple :
Dans le répertoire : hydra -l admin -P /tmp/xaa
[Link] ssh
• ./configure
On peut mener des attaques sur
• make l’ensemble des services
• make install

Récupérer le dictionnaire [Link]

On va devoir découper le fichier avec split car hydra gere des fichiers avec 50000000 de lignes
split –l 40000000 [Link]
A faire

Modifier dans le ssh conf de la VM-SECURE le MaxAuthTries à 0


• Tester l’attaque par dictionnaire depuis la VM-ATTACK sur la VM-
SECURE
• On peut voir les tentatives dans cat /var/log/secure
Contrer les attaques par dictionnaire/brute
force

Fail 2 Ban est un IPS ( système prévention intrusion)


• Disponible sur le repo EPEL
• Par défaut, il n’y a aucune prison
Installation fail2ban

• sudo dnf install epel-release


• Faire O
• dnf install fail2ban
• On démarre le service :
• sudo systemctl start fail2ban
• On active son démarrage
automatique
• sudo systemctl status fail2ban
• fail2ban-client status
• On va créer le fichier : • [sshd]
• /etc/fail2ban/jail.d/[Link] • enabled = true
• port = 15000
• logpath = %(sshd_log)s
• backend = %(sshd_backend)s
• bantime = 60h
• fail2ban-client status • maxretry = 3
• On retrouve les logs dans :
var/log/secure

• Avec cette commande, nous


voyons l’ip banni :
• fail2ban-client status sshd
• Pour débannir l’adresse IP :

• fail2ban-client set sshd unbanip IP


A faire

• Installer sur la VM-SECURE fail2ban


• Configurer la prison ssh
• Tester le blocage d’IP
• Débloquer son IP
Changer le port de fonctionnement de ssh

Changer le port dans le fichier


ssh
• En changeant la valeur de Port
• Par défaut le port 22
• Ouvrir le port dans le firewall
• Ajouter une condition selinux :
• semanage port -a -t ssh_port_t -
p tcp 15000
• Il faut redémarrer le service
Whitelist

Via firewall-cmd
• Pour cela, nous devons créér une nouvelle zone dans notre firewall :
• firewall-cmd --permanent --new-zone=zone_ssh --add-source=IP
• firewall-cmd --permanent --zone=zone_ssh --add-service=ssh
• firewall-cmd –reload
• firewall-cmd --get-active-zones
• firewall-cmd --list-all && firewall-cmd --zone=ssh-limited --list-all
• firewall-cmd --permanent --remove-service=ssh
A faire :

• Changer le port de ssh par 15000 sur la machine VM01-SECURE


:
• Se connecter depuis la machine VM02 en ssh sur VM01-
SECURE
• Mettre une restriction de connexion sur les Ips.
• Limiter seulement votre IP pouvant se connecter sur le serveur ssh
• Puis enlever l’autorisation pour vérifier le bon focntionnement
Rappel : chiffrement symétrique (MOOC
ANSSI)

• Etape 1 :
• La cryptographie symétrique est
également appelée cryptographie à clé
secrète. Une même clé secrète est
partagée entre deux interlocuteurs, et
ceux-ci doivent connaître la clé pour
pouvoir communiquer.
Etape 2 :

• Avec ce procédé, il est donc


nécessaire de disposer d'un
moyen sûr pour échanger
cette clé.
• Les opérations sont dites
symétriques. La même clé est
utilisée à la fois pour chiffrer
et déchiffrer.
Etape 3 :
• Pour illustrer le procédé de la
cryptographie symétrique,
prenons l’exemple d’un coffre
sécurisé par une serrure.
• Si vous voulez y cacher un
secret, il vous faudra
posséder la clé vous
permettant d’ouvrir le coffre
pour y déposer votre secret
et ensuite le refermer avec
cette même clé.
Etape 4 :
• Maintenant, imaginons que
vous souhaitiez partager
votre secret avec quelqu’un
en lui donnant accès au
coffre. Il vous faut pour cela
transmettre la clé à cette
autre personne.
• Et pour que vous soyez seuls
à connaître le contenu du
coffre, la clé doit donc rester
secrète.
Rappel : chiffrement asymétrique (MOOC ANSSI)

• Cette approche est basée sur


l’utilisation de 2 clés, une clé
publique et une clé privée qui sont
dépendantes l’une de l’autre.
• La clé « publique » est une clé qui
permet de chiffrer le message.
• La clé « privée » est une clé qui
permet, quant à elle, de déchiffrer
le message.
Etape 1 :

• Pour comprendre son fonctionnement,


reprenons l’exemple du coffre vu
précédemment.
• Imaginons que le coffre ne puisse être utilisé
qu’une seule fois et qu’il se ferme au moyen
d’un cadenas.
• Si vous souhaitez confier un secret au coffre
doté de ce système de fermeture, nul besoin
de posséder la clé du cadenas puisqu’il suffit
de le refermer.
Etape 2 :

• Ce cadenas refermable représente la clé


publique qui permet de chiffrer le message et
qui vous a préalablement été transmis par
votre interlocuteur pour échanger en toute
sécurité avec lui.
• Ainsi, seul votre interlocuteur pourra accéder
au contenu du coffre grâce à une clé qu’il est
seul à posséder et qui est aussi l’unique
moyen de déverrouiller le cadenas et donc
d’ouvrir le coffre : sa clé privée.
Exemple :

• Alice veut envoyer un message à


Bob.
• Bob envoie à Alice la clé publique
qui va lui permettre de chiffrer le
message. Alice chiffre le message
avec la clé publique de Bob et
l'envoie sur le réseau.
• Ce qui change ici, c’est que seul Bob, qui
possède la clé privée correspondant à la clé
publique qu’il a faite parvenir à Alice,
pourra déchiffrer le message.
• La clé privée n’ayant pas été transmise
entre Alice et Bob, elle n’est pas susceptible
d’être interceptée.
Génération clé sous Linux

Avec son utilisateur


• On exécute la commande :
• Ssh-keygen –b 4096
• Puis on saisit une passphrase
• On peut voir les clés dans le
répertoire .ssh de l’utilisateur
• ls -al .ssh
Utilisation des commandes SSH

Copier ma clé public sur un serveur distant


• Dnf install openssh (sur nos machines)
• Avoir dans son .ssh sa clé public et privé
• ssh-copy-id <username>@<hostname>
• Voilà, votre clé publique a bien été copiée dans le fichier
~/.ssh/authorized_keys de l’utilisateur sur le serveur distant !
Utilisation de la clé avec Windows

• Dans putty, on va saisir l’ip du serveur, son port ssh


et surtout dans la rubrique Private key, on va
chercher notre private key. Puis faire « open »
Utilisation de la clé avec linux

• On va utilise la commande :
• ssh -i /home/julien/.ssh/id_rsa
julien@[Link]

• -i pour spécifier sa clé privé


• Ensuite l’utilisateur et le serveur
Utilisation des commandes SSH

Se connecter avec une clé public depuis une machine linux :


• ssh <username>@<hostname>

• Puis renseigner la passphrase


A faire

Générer votre clé ssh depuis votre machine linux


• Mettre une passphrase
• Récupérer votre clé privée sur votre Windows
• Faire une tentative de connexion depuis windows
• Depuis la VM01 déposer votre clé public sur le serveur VM02
• Faire un test de connexion depuis VM01
Optimisation de la sécurité ssh

• PermitRootLogin no
• PubkeyAuthentication yes
• PasswordAuthentication no
• PermitEmptyPassword no
A faire

• Bloquer le root login


• Obligation de connexion avec clé
• Connexion par clé activé
• Bloquer les comptes n’ayant pas de mdp
2FA
dnf install epel-release
dnf install google-authenticator qrencode qrencode-libs
sudo nano /etc/pam.d/sshd
auth required pam_google_authenticator.so
sudo nano /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes
PubkeyAuthentication yes

systemctl restart sshd

Installer sur votre tel google auth


google-authenticator
Faire Y
Mettre en place une bannière

Dans le fichier de conf ssh


• Banner /etc/banner
• Créér un fichier banner dans
/etc
• (Il y a des générateurs en ligne)
A faire

• Mettre en place une bannière de connexion sur chaque serveur


Limitation des utilisateurs pour ssh

Nous souhaitons une limitations des utilisateurs à se connecter


en ssh
• Dans le fichier de conf ssh, il y a un attribut DenyUsers
• Il faut spécifier le nom de l’utilisateur pour bloquer l’authentification
• SI on souhaite bloquer plusieurs utilisateurs, on utilisera l’espace
• On peut également avec AllowUsers autorisé seulement certains
utilisateurs
A faire

• Créer un utilisateur test


• Bloquer l’utilisateur test à faire du ssh
• Tester l’impossibilité de se connecter
Limitation du temps de connexion

• Nous pouvons également définir un temps de déconnexion


automatique en cas d’inactivité :
• ClientAliveInterval permet de définir le timeout en cas d’idle en
secondes
• ClientAliveCountMax nombre maximal de requêtes ClientAliveInterval
sans réponse que tolérera le serveur avant de fermer la connexion.
A faire

• Créer un utilisateur test


• Bloquer l’utilisateur test à faire du ssh
• Tester l’impossibilité de se connecter
Whitelist

Il faut également filter les IPs capable de se connecter


• On peut faire cela avec firewalld, intégrer par défaut dans rocky :,
• Je regarde ma zone ma défaut : firewall-cmd --get-default-zone
• firewall-cmd --permanent --zone=public --add-source=192.168.X.X/24 ou
/32 pour une IP
• Systématiquement, en cas de régle permanent fans le firewalld, il faut
recharger :
• firewall-cmd --reload
A faire

• Tester d’autoriser une seule IP (autre que votre deuxième machine) et


faire un test de connexion
• Tester d’autoriser l’ip de votre machine et refaites le même test
Pour auditer cela :

• Dnf install pip


• Pip install ssh-audit

Vous aimerez peut-être aussi