Protéger son serveur SSH des attaques brutes sous Linux
Stopper les brutes !
Si vous ne pouvez pas limiter l'accès à votre serveur SSH par l'utilisation obligatoire d'une clé, vous êtes alors exposé à une attaque par dictionnaire.
Cet article vous montre comment vous mettre à l'abri de ce type d'attaque sur un serveur Linux.
Principe d'une attaque par dictionnaire
L'attaque par dictionnaire ou attaque brute consiste à utiliser une liste de mots de passe potentiels, appelé dictionnaire, pour se connecter sur votre serveur.
Dans le cadre d'un serveur ssh, le robot va tenter d'ouvrir une session ssh pour l'utilisateur root. L'outil John The Ripper vous permettra de vous faire une idée de la qualité de votre mot de passe mais aussi de l'efficacité de ce type d'attaque.
Les mots de passe sont souvent mémorisables et donc simples et facilement crakables par un robot.
La clé de succés de ce type d'attaque est un nombre élevé de tentatives par seconde, souvent proche d'une centaine.
C'est donc avec un bon mot de passe et en limitant les tentatives autorisées que vous mettrez à l'abri votre serveur ssh.
Utiliser le firewall iptables pour bloquer une attaque brute
Le firewall iptables permet la mise en place de règles temporelles simples et efficaces.
En ligne de commande, activez les règles suivantes :
# iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
# iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent \
--update --seconds 60 --hitcount 10 --rttl --name SSH -j DROP
Dès lors, une IP qui tente de se connecter via eth0 sur votre serveur ssh aura le droit à 10 tentatives par minute ; largement suffisant pour une utilisation normale et 600 fois trop lent pour une attaque brute efficace.
Bloquer une liste d'adresse IP avec un firewall
La technique précédente découragera probablement tous les petits pirates en herbes mais vous n'êtes pas totalement à l'abri d'une personne très persévérente qui utilise un réseau de machines pour vous attaquer.
Il convient de surveiller ces tentatives dans vos logs et de prendre les mesures adéquates : plainte auprès du FAI et bloquage totale des adresses IP incriminées pour mettre un terme à la tentative d'intrusion.
Pour bloquer une liste d'IP par le firewall, créez un fichier texte contenant les adresses IP à banir, une par ligne. Par exemple :
# vi /root/ip-blocked.txt
218.19.23.40
195.80.70.120
4.4.45.100
Puis créez le script iptables suivant :
# cat <<EOF>> /root/ip-blocked.sh
IP=`cat /root/ip-blocked.txt`
for i in $IP
do
iptables -A INPUT -s $i -j LOG --log-prefix "IP bannie"
iptables -A INPUT -s $i -j DROP
iptables -A OUTPUT -s $i -j LOG --log-prefix "IP bannie"
iptables -A OUTPUT -d $i -j DROP
iptables -A FORWARD -s $i -j LOG --log-prefix "IP bannie"
iptables -A FORWARD -d $i -j DROP
done
EOF
Exécutez le script :
# chmod +x /root/ip-blocked.sh
# /root/ip-blocked.sh
Maintenant, pour chaque IP de la liste précédente, toutes les connexions seront tracées dans le fichier /var/log/messages avec le préfixe "IP bannie" et ignorées.
- Ajouter un commentaire
- 650 lectures
-


Commentaires
En plus de cela, un truc simple est de changer le port par défaut pour le serveur SSH. Pas mal de script kiddie se contente de scanner et de brute-forcer le port 22. Changer de port c'est déjà en éviter une bonne (très grosse) partie ...
@+ Sylvain ;) Cyril
Salut Cyril,
Bien d'accord avec toi.
D'ailleurs, j'ai un vieil article qui regroupe un ensemble de bonnes pratiques ssh.
Pour autant, sortie des attaques kiddies menées par des newsbies, un scan des ports avec
nmapa vite fait de révéler la configuration de ton serveur.