Imad’s wiki
GithubLinkedInXMailHashnode
  • ADMINISTRATION LINUX
    • Linux et ses distributions
    • Commandes Utiles
    • Gestion des paquets
    • SSH
    • Partitionnement LVM
  • Base de données
    • PostgreSQL
      • Quelques commandes Postgres
      • Mise à jour de Postgresql sous windows
  • Tutoriels
    • Securité
      • Wazuh
      • Intégration Debian sur Active Directory
      • Certificat SSL
    • SingleSignOn
      • Authentik
      • SAML + CENTREON
      • OpenID + Apache Guacamole
      • OpenID + Proxmox
    • Git
      • Git
    • Infra-As-Code
      • Terraform + Proxmox
      • Ansible
    • Conteneurisation
      • Docker
        • Quelques commandes Docker utiles
Powered by GitBook
On this page
  • Introduction au SSH (Secure Shell)
  • Se connecter à un serveur via SSH
  • Authentification avec SSH
  • Sécuriser SSH
  • Tunnels SSH
  • Transfert de fichiers avec SSH
  • Dépannage SSH
  • Comprendre et Configurer Fail2ban
  • Qu'est-ce que Fail2ban ?
  • Installation de Fail2ban
  • Configurer Fail2ban pour protéger SSH
  • Personnalisation et sécurité avancée

Was this helpful?

  1. ADMINISTRATION LINUX

SSH

Introduction au SSH (Secure Shell)

Le SSH (Secure Shell) est un protocole de communication sécurisé permettant de se connecter à un serveur distant de manière cryptée. Il est principalement utilisé pour l'administration à distance des systèmes Unix/Linux et pour transférer des fichiers en toute sécurité sur un réseau non sécurisé, comme Internet.

Le fonctionnement du SSH repose sur un modèle client-serveur. Le client SSH établit une connexion avec un serveur SSH et authentifie l'utilisateur avant de lui permettre d'exécuter des commandes à distance ou de transférer des fichiers.

Installation de SSH sur Linux (Debian 11)

Sur une distribution Debian 11, vous pouvez installer SSH en suivant ces étapes :

sudo apt update && sudo apt install openssh-server

Vérifiez que le service SSH est bien actif avec la commande suivante :

sudo systemctl status ssh

Pour démarrer le service SSH si ce n’est pas déjà fait, utilisez :

sudo systemctl start ssh

Pour activer SSH au démarrage, exécutez :

sudo systemctl enable ssh

Se connecter à un serveur via SSH

Pour établir une connexion SSH, utilisez la commande suivante :

ssh utilisateur@ip_ou_nom_dhote

Exemple :

ssh user@192.168.1.10

Lors de la première connexion, vous devrez accepter l'empreinte de la clé du serveur. Tapez "yes" pour accepter et continuer.

Authentification avec SSH

L'authentification par défaut utilise un mot de passe. Lors de la connexion SSH, vous serez invité à entrer le mot de passe associé à l'utilisateur du serveur distant.

Il est recommandé d'utiliser des clés SSH pour renforcer la sécurité. Voici comment procéder :

Générer une paire de clés SSH

Sur votre machine locale, générez une paire de clés SSH avec la commande suivante :

ssh-keygen -t rsa -b 4096

Copiez ensuite votre clé publique sur le serveur avec la commande :

ssh-copy-id utilisateur@ip_ou_nom_dhote

Maintenant, vous pouvez vous connecter sans mot de passe avec :

ssh utilisateur@ip_ou_nom_dhote

Sécuriser SSH

Changer le port par défaut (22) est une bonne pratique pour sécuriser l'accès SSH. Modifiez le fichier de configuration SSH (/etc/ssh/sshd_config) :

sudo nano /etc/ssh/sshd_config

Changez la ligne Port 22 par un autre numéro de port, par exemple 2222.

Port 2222

Après modification, redémarrez SSH pour que le changement prenne effet :

sudo systemctl restart ssh

Désactiver l'authentification par mot de passe

Pour forcer l'utilisation des clés SSH et désactiver l'authentification par mot de passe, modifiez à nouveau le fichier de configuration SSH (/etc/ssh/sshd_config) :

PasswordAuthentication no

N'oubliez pas de redémarrer SSH pour appliquer les changements :

sudo systemctl restart ssh

Limiter l'accès aux utilisateurs

Dans le fichier de configuration SSH, vous pouvez limiter l'accès à certains utilisateurs uniquement :

AllowUsers utilisateur1 utilisateur2

Redémarrez le service SSH après cette modification :

sudo systemctl restart ssh

Tunnels SSH

Un tunnel local permet de rediriger un port de votre machine locale vers un port du serveur distant. Exemple :

ssh -L 8080:localhost:80 utilisateur@ip_ou_nom_dhote

Un tunnel inversé permet de rediriger un port du serveur distant vers un port de votre machine locale :

ssh -R 8080:localhost:80 utilisateur@ip_ou_nom_dhote

Transfert de fichiers avec SSH

Le protocole SCP permet de transférer des fichiers de manière sécurisée entre votre machine locale et le serveur distant. Exemple pour copier un fichier vers le serveur :

scp fichier.txt utilisateur@ip_ou_nom_dhote:/chemin/vers/dossier

Le protocole SFTP permet de gérer les fichiers de manière interactive. Pour démarrer une session SFTP :

sftp utilisateur@ip_ou_nom_dhote

Dépannage SSH

Si vous obtenez l'erreur "Connection refused", assurez-vous que le service SSH est en cours d'exécution avec la commande :

sudo systemctl status ssh

Si l'erreur est "Permission denied", vérifiez que votre clé publique est correctement installée dans le fichier ~/.ssh/authorized_keys sur le serveur et que les permissions sont correctes.

Comprendre et Configurer Fail2ban

Dans cette section, nous allons explorer Fail2ban, un outil de sécurité essentiel pour protéger votre serveur contre les attaques par force brute, notamment les tentatives de connexion répétées via SSH.

Qu'est-ce que Fail2ban ?

Fail2ban est un logiciel qui protège les serveurs contre les attaques par force brute en surveillant les journaux des services (comme SSH) et en ajoutant automatiquement des règles dans le pare-feu pour bloquer les adresses IP qui tentent de se connecter trop souvent avec des identifiants incorrects.

Par exemple, un attaquant peut essayer de se connecter à votre serveur en envoyant plusieurs tentatives de connexion avec des mots de passe incorrects. Fail2ban bloque l'IP de l'attaquant après un certain nombre de tentatives échouées.

Installation de Fail2ban

Pour installer Fail2ban sur Debian 11, vous pouvez utiliser la commande suivante :

sudo apt install fail2ban

Une fois installé, Fail2ban commence à fonctionner avec une configuration par défaut qui protège plusieurs services, y compris SSH. Toutefois, pour une personnalisation plus poussée, vous devez configurer Fail2ban via son fichier de configuration.

Configurer Fail2ban pour protéger SSH

Le fichier de configuration principal de Fail2ban est situé dans /etc/fail2ban/jail.local. C'est ici que vous pouvez activer des protections spécifiques pour les services que vous souhaitez sécuriser, y compris SSH.

Il est recommandé de ne pas modifier directement le fichier de configuration par défaut jail.conf de Fail2Ban, car il peut être écrasé lors des mises à jour. Il serait préférable de créer un fichier jail.local pour vos configurations.

Exemple de configuration dans /etc/fail2ban/jail.local

Voici un exemple de configuration pour le service SSH dans le fichier jail.local :

[sshd]
enabled = true
port    = ssh
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
findtime = 600
ignoreip = 127.0.0.1 192.168.100.0/24

Explication des paramètres :

  • [sshd] : Cette section configure Fail2ban pour protéger le service SSH (sshd). Le nom entre crochets définit le nom du "jail" ou "prison" (un ensemble de règles pour un service).

  • enabled = true : Cette directive active la protection Fail2ban pour SSH. Si vous mettez false, Fail2ban ne surveillera pas les connexions SSH.

  • port = ssh : Cela définit le port sur lequel SSH écoute. Par défaut, SSH écoute sur le port 22, mais il est recommandé de changer ce port pour des raisons de sécurité. Si vous avez configuré SSH pour écouter sur un autre port, vous devez modifier cette ligne en conséquence.

  • logpath = /var/log/auth.log : Ce paramètre indique à Fail2ban quel fichier journal il doit surveiller pour détecter les tentatives de connexion échouées. Le fichier /var/log/auth.log contient des informations sur les connexions SSH et les échecs d'authentification.

  • maxretry = 3 : Ce paramètre définit le nombre maximal de tentatives de connexion échouées avant que l'IP source ne soit bannie. Si une adresse IP échoue à se connecter trois fois dans la période définie, elle sera bannie.

  • bantime = 600 : Ce paramètre définit la durée pendant laquelle l'adresse IP bannie restera bloquée. Ici, elle est définie à 600 secondes (10 minutes).

  • findtime = 600 : Ce paramètre définit la période pendant laquelle Fail2ban surveille les tentatives échouées de connexion. Si une adresse IP dépasse le nombre maximal de tentatives échouées dans cette période, elle sera bannie.

  • ignoreip = 127.0.0.1 192.168.100.0/24 : Cette directive permet d'indiquer les adresses IP ou les sous-réseaux qui doivent être ignorés par Fail2ban. Cela peut être utile si vous voulez autoriser l'accès depuis votre propre réseau interne ou votre machine locale.

Redémarrer Fail2ban pour appliquer les modifications

Une fois que vous avez modifié le fichier jail.local pour protéger SSH, vous devez redémarrer Fail2ban afin d'appliquer les changements :

sudo systemctl restart fail2ban

Vérification du statut de Fail2ban

Après avoir configuré Fail2ban, il est important de vérifier que le service fonctionne correctement et protège votre serveur. Pour cela, vous pouvez utiliser la commande suivante pour afficher l'état du service Fail2ban :

sudo systemctl status fail2ban

Pour voir la liste des "jails" (règles de sécurité) activées et leurs statuts, vous pouvez utiliser la commande suivante :

sudo fail2ban-client status

Pour obtenir des détails spécifiques sur un service comme SSH, vous pouvez exécuter :

sudo fail2ban-client status sshd

Personnalisation et sécurité avancée

Les paramètres de Fail2ban peuvent être adaptés pour différents scénarios de sécurité. Par exemple, si vous souhaitez que les adresses IP soient bannies pendant une période plus longue après un grand nombre de tentatives échouées, vous pouvez ajuster maxretry, findtime, et bantime en fonction de votre politique de sécurité.

Utilisation d'une IP whitelist

Si vous avez des utilisateurs ou des systèmes qui doivent toujours avoir accès à votre serveur, vous pouvez les ajouter à une liste blanche. Cela évite que Fail2ban ne les bannisse par erreur, même s'ils échouent plusieurs fois à se connecter.

ignoreip = 127.0.0.1 192.168.100.0/24 203.0.113.15

Afficher les ip de la whitelist :

fail2ban-client get sshd ignoreip

Fail2ban n'est pas limité à SSH. Vous pouvez configurer des protections pour d'autres services comme Apache, Nginx, FTP, ou encore SFTP. Pour cela, il suffit d'activer le "jail" correspondant dans le fichier jail.local.

Exemple de configuration pour Apache

[apache]
enabled = true
port    = http,https
logpath = /var/log/apache2/*access.log
maxretry = 5
bantime = 600
findtime = 600

Avec cette configuration, Fail2ban protège un serveur Apache contre les tentatives d'accès non autorisées en surveillant les fichiers de log des accès et en bloquant temporairement les adresses IP qui effectuent trop de tentatives échouées dans un court laps de temps (ici, 5 tentatives en 10 minutes).

Désactivation de Fail2ban

Si vous souhaitez temporairement désactiver Fail2ban, vous pouvez le faire avec la commande suivante :

sudo systemctl stop fail2ban

Cela arrêtera le service, mais les configurations restent intactes pour que vous puissiez les réactiver plus tard avec la commande :

sudo systemctl start fail2ban

Débannir une ip

sudo fail2ban-client set <jail> unbanip <IP_ADDRESS>

Remplacez <jail> par le nom du jail (par exemple, sshd) et <IP_ADDRESS> par l'adresse IP que vous souhaitez débannir.

Exemple :

sudo fail2ban-client set sshd unbanip 192.168.1.100

Conclusion

Fail2ban est un outil puissant pour renforcer la sécurité de votre serveur contre les attaques par force brute. En configurant correctement Fail2ban, vous pouvez protéger des services essentiels comme SSH et d'autres applications web contre les tentatives de connexion malveillantes. Il est recommandé de personnaliser les paramètres pour correspondre à vos besoins spécifiques et de garder un œil sur les logs et les actions de Fail2ban pour vous assurer que votre serveur reste sécurisé.

PreviousGestion des paquetsNextPartitionnement LVM

Last updated 3 months ago

Was this helpful?

Page cover image