La suite OpenSSH est un ensemble d'outils robustes destinés à faciliter le contrôle à distance et le transfert de données entre systèmes en réseau. Il se compose d'un certain nombre d'outils, notamment SSH, SCP, SFTP, SSHD et bien d'autres. Chaque fois que vous utilisez ssh pour vous connecter à une machine distante, vous êtes très susceptible d'exploiter le serveur OpenSSH. Dans ce guide, nous fournirons une discussion approfondie sur le fonctionnement d'OpenSSH et sur la manière de l'utiliser correctement pour répondre aux exigences croissantes en matière de sécurité. Donc, si vous voulez en savoir plus sur les subtilités d'OpenSSH, restez avec nous tout au long de ce guide.
Exploration approfondie du serveur et des services OpenSSH
Le serveur OpenSSH est au cœur de la communication à distance entre les machines Linux et/ou BSD. Certaines de ses fonctionnalités notables incluent le cryptage du trafic, plusieurs méthodes d'authentification puissantes, un tunneling sécurisé et des capacités de configuration sophistiquées. Les sections ci-dessous fournissent une compréhension significative des services fondamentaux et des conseils de sécurité.
Les principes de base d'un serveur OpenSSH
Comme son nom l'indique, OpenSSH utilise le protocole SSH (Secure Shell) pour fournir des installations de connexion et de transfert de données à distance. Il supprime les vulnérabilités de sécurité associées aux méthodes héritées telles que la commande Linux FTP et telnet. OpenSSH facilite l'authentification des utilisateurs légitimes et le chiffrement des connexions distantes.
L'utilitaire principal de la suite OpenSSH responsable de la gestion des connexions à distance est le serveur OpenSSH ou sshd. Il écoute en permanence les demandes entrantes et configure le type de connexion approprié lorsqu'une nouvelle demande arrive.
Par exemple, si un utilisateur utilise le programme client ssh pour communiquer avec le serveur, sshd établira une session de contrôle à distance dès que l'authentification aura réussi. Si l'utilisateur utilise SCP à la place, sshd lancera une session de copie sécurisée.
L'utilisateur final doit choisir le mécanisme de communication approprié pour sa connexion. Ceci est facilité par des outils tels que ssh-add et ssh-keygen. Lorsqu'un utilisateur se connecte avec succès à la machine distante à l'aide de la commande ssh, il est accueilli par une console textuelle. Toutes les commandes saisies sur cette console sont envoyées via un tunnel SSH chiffré pour être exécutées sur la machine distante.
Installation et configuration du serveur OpenSSH
La section suivante explique comment installer le démon de serveur OpenSSH et le configurer. Nous montrerons les meilleures options de configuration pour un usage personnel et à des fins professionnelles. Nous décrirons également les meilleures pratiques pour configurer et renforcer OpenSSH à la fin de cette section.
Comment installer le serveur OpenSSH
- -La plupart des distributions Linux modernes sont livrées avec OpenSSH déjà installé. Cependant, si vous devez l'installer manuellement, vous pouvez le faire en utilisant la commande simple suivante.
$ sudo apt install openssh-server
Cette commande installera le démon du serveur. Utilisez la commande ci-dessous pour installer le client OpenSSH sur votre système.
$ sudo apt install openssh-client
Comment configurer le serveur OpenSSH
OpenSSH prend en charge un grand nombre d'options de configuration pour contrôler des éléments tels que les paramètres de communication et les modes d'authentification. Le fichier sshd_config spécifie les paramètres de configuration et contient l'adresse des autres fichiers de configuration, y compris une ou plusieurs clé d'hôte fichiers et authorized_keys des dossiers. Il se trouve dans le répertoire /etc/ssh/ répertoire de votre système de fichiers.
Avant de passer à la modification de certains de ses paramètres, nous vous suggérons de sauvegarder la copie actuelle de sshd_config dossier. Vous pouvez le faire en ouvrant votre émulateur de terminal Linux préféré et en lançant la commande suivante.
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
De cette façon, si vous gâchez votre sshd_config fichier, vous pouvez toujours revenir à la configuration d'origine. Maintenant, vous pouvez procéder à la configuration de votre serveur ssh. Avant cela, nous suggérons aux lecteurs de tester leur configuration sshd efficace en utilisant la commande simple ci-dessous.
$ sudo sshd -T
Maintenant que vous avez sauvegardé votre sshd_confi g et vu les paramètres par défaut, il est temps de modifier le fichier de configuration. Nous utiliserons l'éditeur de texte vim pour ouvrir et modifier notre fichier de configuration. Mais, vous pouvez utiliser n'importe quel éditeur de texte Linux que vous voulez.
$ sudo vim /etc/ssh/sshd_config
Comme vous devriez le remarquer, il existe déjà un certain nombre d'options préconfigurées. Cependant, la plupart d'entre eux sont commentés. Vous pouvez les activer en décommentant la ligne particulière qui spécifie le paramètre options. Supprimez le dièse "#" symbole depuis le début d'une ligne pour la décommenter. Nous discutons ci-dessous de certaines des options importantes.
- AccepterEnv
Cette option spécifie quelles variables d'environnement envoyées par le client peuvent être copiées dans l'environnement distant.
- Famille d'adresse
Définit la famille d'adresses IP pour l'utilisation de sshd. Les trois options disponibles sont - any, inet et inet6.
- Autoriser le transfert de l'agent
Cette option définit si le transfert ssh-agent est autorisé ou non.
- Autoriser le transfert local du flux
Définit si le transfert des sockets de domaine Unix est autorisé ou non.
- Autoriser le transfert Tcp
Définit si le transfert TCP est autorisé ou non.
- Autoriser les utilisateurs
Cette option peut définir une liste de noms d'utilisateurs autorisés à accéder en fonction d'un modèle. Tous les noms d'utilisateur sont autorisés par défaut.
- Méthodes d'authentification
Cette option indique les méthodes d'authentification qu'un utilisateur doit effectuer avant de recevoir l'accès.
- Fichier de clés autorisées
Cette option spécifie le fichier qui contient les clés publiques pour l'authentification de l'utilisateur.
- ChallengeResponseAuthentication
Lorsqu'elle est activée, cette option permet l'authentification challenge-réponse.
- ChrootDirectory
Spécifie le répertoire racine, qui sera présenté aux utilisateurs qui se sont authentifiés avec succès.
- Chiffres
Cette option définit les chiffrements cryptographiques autorisés par le serveur OpenSSH. Il existe un large éventail d'options disponibles.
- Compression
Spécifie si la compression est autorisée et, si c'est le cas, à quel stade.
- Refuser les utilisateurs
Cette option peut être utilisée pour définir une liste de noms d'utilisateurs dont l'accès est refusé en fonction d'un modèle.
- Forcer la commande
Il peut être utilisé pour forcer l'exécution d'une certaine commande. Cela oblige le serveur à ignorer toute commande fournie par le client ssh et tout ce qui est présent dans ~/.ssh/rc .
- Ports de passerelle
Cette option définit si les hôtes distants peuvent se connecter aux ports qui ont été redirigés pour le côté client.
- Authentification GSSAPI
Il est utilisé pour indiquer si l'authentification utilisateur basée sur GSSAPI est autorisée ou non.
- Authentification basée sur l'hôte
Cette option spécifie si une clé publique présente sur la machine cliente peut authentifier un hôte sur le serveur distant.
- HostbasedUsesNameFromPacketOnly
Cette option spécifie si le serveur doit effectuer une recherche de nom inversée pour les noms présents dans le /.shosts , ~/.rhosts , et /etc/hosts.equiv fichiers.
- HostKey
Il peut être utilisé pour définir un fichier contenant une clé d'hôte privée. Les administrateurs peuvent spécifier plusieurs fichiers clés. les valeurs par défaut sont /etc/ssh/ssh_host_dsa_key , /etc/ssh/ssh_host_ecdsa_key , /etc/ssh/ssh_host_ed25519_key et /etc/ssh/ssh_host_rsa_key .
- Algorithmes HostKey
Cette option définit les algorithmes de clé d'hôte mis à disposition par le serveur ssh. OpenSSH prend en charge un grand nombre d'algorithmes à cette fin.
- IgnorerRhosts
Indique au serveur d'ignorer les .rhosts et .shosts fichiers pour RhostsRSAAuthentication et HostbasedAuthentication .
- KbdInteractiveAuthentication
Cette option définit si le serveur autorise ou non l'authentification interactive au clavier.
- KexAlgorithmes
Il est utilisé pour indiquer les algorithmes disponibles pour l'échange de clés ssh. OpenSSH prend en charge tous les principaux algorithmes d'échange de clés, y compris Diffie Hellman et Elliptic Curves.
- ÉcouterAdresse
Définit les adresses locales que le démon sshd doit écouter.
- ConnexionGraceTime
Cette option définit le temps après lequel sshd déconnecte l'utilisateur s'il ne parvient pas à se connecter avec succès.
- Niveau de journal
Il définit le niveau de verbosité des messages de journal pour sshd.
- MAC
Cette option est utilisée pour définir les algorithmes MAC (Message Authentication Code) disponibles. Ceux-ci sont utilisés pour protéger l'intégrité des données.
- MaxAuthTries
Cette option définit le nombre maximum de fois qu'un utilisateur peut tenter de s'authentifier auprès du serveur.
- Authentification par mot de passe
Définit si un utilisateur distant peut se connecter à l'aide de l'authentification par mot de passe.
- Autoriser les mots de passe vides
Cette option spécifie si les utilisateurs peuvent utiliser un mot de passe vide pour les connexions à distance.
- Autoriser la connexion racine
Cette option définit si la connexion root est autorisée ou non.
- AutoriserTTY
Cette option définit si le pseudo TTY est autorisé ou non.
Décommentez la ligne qui contient l'une des options ci-dessus et définissez la valeur d'option souhaitée. La section ci-dessous illustre certaines pratiques courantes de renforcement de la sécurité pour OpenSSH.
Comment renforcer la sécurité du serveur OpenSSH
Puisque OpenSSH agit comme la porte d'entrée de votre serveur, il est extrêmement important de renforcer sa sécurité. Essayez de maintenir les suggestions suivantes pour rendre la connexion à distance plus sécurisée.
1. Désactiver la connexion racine
Vous ne devez jamais autoriser la connexion root sur votre serveur ssh car une escalade du compte root peut compromettre l'ensemble du serveur. De plus, le compte utilisateur root est constamment ciblé par des utilisateurs malveillants. Il est donc préférable de créer un utilisateur régulier et de lui accorder des autorisations sudo. Vous pouvez désactiver la connexion root en définissant la valeur de PermitRootLogin à non.
PermitRootLogin no
2. Limiter les tentatives d'authentification
Les administrateurs doivent limiter le nombre de tentatives de connexion à partir d'hôtes distants pour empêcher les tentatives de connexion par force brute. La montée de vastes armées de robots a rendu cela plus important que jamais. Utilisez l'option MaxAuthTries pour définir le nombre de tentatives d'authentification autorisées sur votre serveur. De nombreux administrateurs considèrent trois comme une valeur acceptable pour cette option. Cependant, vous pouvez le définir en fonction de vos normes de sécurité.
MaxAuthTries 3
3. Réduire le temps de grâce de connexion
Une autre façon d'empêcher les bots automatisés est de réduire le temps de grâce de connexion. Il s'agit de la durée pendant laquelle un utilisateur doit s'authentifier avec succès après s'être connecté au serveur. Le sshd_config file définit cette valeur en secondes.
LoginGraceTime 20
4. Désactiver l'authentification par mot de passe
Vous ne devez autoriser les utilisateurs à se connecter au serveur qu'à l'aide d'une authentification basée sur une clé. Assurez-vous donc de désactiver le schéma d'authentification par mot de passe. Vous pouvez le faire en définissant la valeur de PasswordAuthentication à non.
PasswordAuthentication no
C'est aussi une bonne idée de désactiver les mots de passe vides. Définissez la valeur du champ PermitEmptyPasswords sur non.
PermitEmptyPasswords no
5. Désactiver les autres méthodes d'authentification
OpenSSH prend en charge certaines méthodes d'authentification supplémentaires autres que l'authentification par clé et par mot de passe. Vous devez les désactiver complètement après avoir configuré l'authentification par clé et désactivé l'authentification par mot de passe.
ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication no
6. Désactiver le transfert X11
Le transfert X11 est utilisé pour afficher des applications graphiques sur le serveur vers la machine hôte distante. Cependant, il n'est pas nécessaire pour la plupart des serveurs d'entreprise. Alors, désactivez-le si vous n'avez pas besoin de cette fonctionnalité.
X11Forwarding no
Après avoir désactivé le transfert X11, vous devez commenter toutes les références à AcceptEnv . Ajoutez simplement un dièse (#) avant les lignes pour les commenter.
7. Désactiver les options diverses
Désactivez les options suivantes utilisées pour le tunneling et le transfert si vous n'en avez pas besoin pour votre serveur.
AllowAgentForwarding no AllowTcpForwarding no PermitTunnel no
8. Désactiver la bannière SSH
La bannière ssh détaillée est activée par défaut et affiche des informations essentielles sur le serveur. Les pirates peuvent exploiter ces informations pour planifier une attaque sur votre serveur. C'est donc une bonne idée de désactiver la bannière ssh détaillée.
DebianBanner no
Si cette option n'est pas présente dans votre sshd_config fichier, ajoutez-le pour désactiver la bannière.
9. Implémenter la liste d'autorisation d'adresses IP
Dans la plupart des cas, vous accéderez au serveur distant à partir d'une poignée d'adresses IP connues. Vous pouvez créer une adresse IP permettant à la liste d'empêcher d'autres personnes d'accéder à votre serveur. Cela réduit le risque de violation du serveur, même si vos clés privées ont été compromises.
Cependant, vous devez être prudent lors de la mise en œuvre de la liste d'adresses IP autorisées et éviter d'utiliser des adresses dynamiques car elles changent très fréquemment.
Pour définir la liste d'autorisation, recherchez d'abord l'adresse IP que vous utilisez actuellement pour vous connecter au serveur OpenSSH. Vous pouvez le faire en exécutant la commande suivante dans votre terminal.
$ w
Notez l'adresse IP sous l'étiquette "FROM ‘. Nous supposerons un exemple d'adresse IP de 203.0.113.1 pour le reste de ce guide. Maintenant, ouvrez votre fichier de configuration ssh et utilisez le AllowUsers directive de configuration, comme indiqué ci-dessous.
AllowUsers *@203.0.113.1
La ligne ci-dessus limitera tous les utilisateurs distants à une adresse IP sélectionnée. Vous pouvez le remplacer par une plage d'adresses IP à l'aide de la notation CIDR (Classless Inter-Domain Routing), comme illustré ci-dessous.
AllowUsers *@203.0.113.0/24
10. Restreindre le shell des utilisateurs distants
Il est toujours recommandé de limiter les opérations effectuées par l'utilisateur distant. Vous pouvez le faire en restreignant le shell de l'utilisateur distant. OpenSSH permet plusieurs options de configuration pour faciliter cette tâche. Nous allons vous montrer comment restreindre l'accès au shell d'un utilisateur à SFTP uniquement à l'aide de ces options.
Tout d'abord, nous allons créer un nouvel utilisateur appelé mary en utilisant le /usr/sbin/nologin coquille. Cela désactivera les connexions interactives pour cet utilisateur, mais fournira toujours des sessions non interactives pour effectuer des opérations telles que des transferts de fichiers.
$ sudo adduser --shell /usr/sbin/nologin mary
Cette commande crée l'utilisateur mary avec le shell nologin. Vous pouvez également désactiver le shell interactif pour un utilisateur existant en utilisant la commande suivante.
$ sudo usermod --shell /usr/sbin/nologin alex
Si vous essayez de vous connecter en tant qu'un des utilisateurs ci-dessus, votre demande sera rejetée.
$ sudo su alex This account is currently not available.
Cependant, vous pouvez toujours effectuer des actions qui ne nécessitent pas de shell interactif en utilisant ces comptes.
Ensuite, ouvrez à nouveau votre configuration sshd et utilisez le ForceCommand internal-sftp et ChrootDirectory directive pour créer un utilisateur SFTP uniquement hautement restrictif. Nous allons restreindre l'utilisateur alex pour cet exemple. De plus, il est fortement recommandé d'ajouter tous les blocs Match au bas de votre sshd_config .
Match User alex ForceCommand internal-sftp ChrootDirectory /home/alex/
Quittez le fichier de configuration et testez si le fichier de configuration provoque une erreur ou non. Vous pouvez le faire en exécutant la commande suivante dans votre émulateur de terminal Linux.
$ sudo sshd -t
Si tout se passe bien, vous devriez avoir créé une configuration robuste pour l'utilisateur alex. La session de connexion interactive est désactivée pour cet utilisateur et il n'a accès qu'au répertoire d'accueil de son compte.
Fin des pensées
Comme OpenSSH fait partie intégrante de la sécurité de votre serveur distant, il est essentiel d'apprendre comment cela fonctionne. C'est pourquoi nos éditeurs ont présenté diverses informations utiles concernant le serveur OpenSSH dans ce guide. Les rubriques incluent le fonctionnement d'OpenSSH, la lecture et la modification du fichier de configuration et la mise en œuvre des meilleures pratiques de sécurité.
J'espère que nous avons pu vous fournir les informations que vous recherchiez. Ajoutez ce guide à vos favoris pour de futures références. Et n'oubliez pas de laisser un commentaire si vous avez d'autres questions ou suggestions pour rendre ce guide plus utilisable.