[Tuto] Sécurisation d'un serveur SSH
Bloquer les attaques brute-force
fail2ban
fail2ban permet de contrôler les tentatives de connexion sur le serveur ssh, mais aussi sur de nombreux autres services tels que vsftpd, proftpd, postfix, apache... Son fonctionnement est assez simple : il scan le fichier journal des authentifications (/var/log/auth.log) et permet, en association avec Iptables, de bannir les adresses IP à l'origine de plusieurs échecs de connexion dans des délais rapprochés.
Cette méthode semble fonctionner sans problème avec une authentification classique, par login et mot de passe.
Par contre avec la technique des clés RSA, seul la détéction d'une bonne clée est mentionné dans le fichier auth.log, l'échec de saisie d'une passphrase quand à lui n'est pas du tout enregisté. Il est donc quand même possible de bloquer une adresse IP après plusieurs clés soumises rejetées.
Installation
Paquets requis avant l'installation :
- Python >= 2.4
Paquets optionnels mais recommandés :
- iptables
- shorewall
- tcp-wrappers
- Gamin
Pour installer fail2ban, il sufiit d'installer le paquet suivant :
# apt-get install fail2ban |
Configuration
A ce stade de l'installation, fail2ban est opérationnel pour le service ssh, avec les authentifications par login et mot de passe.
Les fichiers de configuration de fail2ban se situent dans le dossier /etc/fail2ban/ :
fail2ban.conf : Fichier de configuration global.
jail.conf : Fichier de configuration des services surveillés.
action.d/ : dossier contenant les actions à effectuer lors de la détection d'un échec d'authentification.
filter.d/ : dossier contenant les différents filtres appliqués sur les fichiers de journal pour détecter les échecs d'authentification.
Voici un exemple du fichier de configuration par défaut de jail.conf :
## Paramètres par défaut # Email vers lequel envoyer les notifications # Action par défaut en cas de ban |
Les fichiers de journaux sont les suivants :
/var/log/auth.log : journal des authentifications sur le serveur. Il s'agit du fichier journal qui sera surveillé par fail2ban dans le cas du ssh.
Exemple de configuration avec un journal en mode VERBOSE dans la configuration de ssh.
Dans des niveaux de journalisation moins complets, les clés privées soumises invalides ne sont pas enregistrées.
May 17 21:03:50 sshserver sshd[5709]: Connection from 192.168.150.1 port 4456 |
/var/log/fail2ban.log : journal des actions de fail2ban.
Les messages importants sont signalés par le label WARNING [service].
Ici nous pouvons constater que
2008-05-17 18:57:16,776 fail2ban.actions: WARNING [ssh] Ban 192.168.150.1 |
Parmis les filtres diponnibles, nous utiliserons sshd.conf situé dans filter.d/ . Les règles de filtrage sont définies suivant des expressions régulières.
Voici un extrait de ce fichier :
[INCLUDES] |
Pour que fail2ban detecte et bloque les tentatives de connexions répétées avec une clée érronée, ajoutez cette ligne dans l'option failregex du fichier sshd.conf :
^%(__prefix_line)sFailed publickey for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$ |
Notez que bloquer la soumission de mauvaises clés reste peu efficace, étant donné qu'une personne voulant s'introduire sur votre serveur, le fera en possession de la clé. Cela sécurise tout de même un peu plus que sans surveillance.
Une bonne passphrase est donc indispensable lors de la génération de votre clée (utilisation de lettres majuscules, minuscules, chiffres, caractères spéciaux et au minimum 8 caractères).
Fail2Ban doit normalement être fonctionnel, vous permettant maintenant de réduire presque à neant les tentatives d'intrusions sur votre serveur.
|