Solution 1 :
Vous pouvez utiliser iptables pour limiter le débit des nouvelles connexions entrantes au port SSH. Je devrais voir toute votre configuration iptables afin de vous donner une solution clé en main, mais vous parlez essentiellement d'ajouter des règles comme :
iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 5 --name SSH --rsource -j DROP
iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH --rsource -j ACCEPT
Ces règles supposent que vous acceptez les connexions ÉTABLIES plus tôt dans le tableau (de sorte que seules les nouvelles connexions respecteront ces règles). Les nouvelles connexions SSH respecteront ces règles et seront marquées. En 60 secondes, 5 tentatives à partir d'une seule adresse IP entraîneront l'abandon de nouvelles connexions entrantes à partir de cette adresse IP.
Cela a bien fonctionné pour moi.
Edit :je préfère cette méthode à "fail2ban" car aucun logiciel supplémentaire à installer, et se passe totalement en mode noyau. Il ne gère pas l'analyse des fichiers journaux comme "fail2ban", mais si votre problème concerne uniquement SSH, je n'utiliserais pas quelque chose en mode utilisateur qui nécessite l'installation d'un logiciel et qui est plus complexe.
Solution 2 :
fail2ban peut vous aider en bloquant les adresses IP avec trop de tentatives de connexion infructueuses.
Solution 3 :
Je recommanderais d'utiliser un port non standard pour SSH si vous le pouvez (c'est-à-dire le port 10222) mais puisque vous avez mentionné que vous ne pouvez pas le faire, je recommanderais d'utiliser quelque chose comme DenyHosts.
http://denyhosts.sourceforge.net/
Excellent package, facile à installer et à configurer.
Solution 4 :
Bien qu'il puisse être agréable de pouvoir accéder en ssh à votre système à partir d'emplacements arbitraires sur Internet, il existe des systèmes d'attaque par mot de passe automatisés qui se verrouillent sur un port ssh ouvert et appliquent diverses attaques de compte Joe et de dictionnaire contre votre système. Cela peut être agaçant à lire dans votre résumé de journal nocturne et constitue un gaspillage de votre bande passante.
Si vous avez un serveur Web sur le même système, vous pouvez utiliser des wrappers php et tcp pour restreindre le trafic entrant ssh aux systèmes connus, et vous donner une clé de porte dérobée pour vous permettre l'accès à partir de systèmes arbitraires sur Internet.
Voici comment procéder :
refuser toutes les connexions ssh dans /etc/hosts.deny :
# /etc/hosts.deny fragment
sshd: all
Autorisez les systèmes connus par IP dans /etc/hosts.allow, et ajoutez un fichier pour un accès temporaire :
# /etc/hosts.allow fragment
sshd: 10.0.10.2 # some system
sshd: 172.99.99.99 # some other system
sshd: /etc/hosts.allow.temporary-sshd-access
Créez un fichier php sur votre serveur Web et donnez-lui un nom non évident comme my-sshd-access.php :
<?php
function get_ip()
{
return getenv("REMOTE_ADDR");
}
?>
<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';
print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);
$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);
print "Wrote: ";
readfile($out);
?>
Pardonnez le code php - je l'ai glissé d'un autre endroit, donc il pourrait probablement être nettoyé de tout un tas. Tout ce qu'il fait est d'ajouter l'adresse IP du système qui y accède au fichier /etc/hosts.allow.temporary-sshd-access, qui est lu par sshd (en raison de son inclusion par /etc/hosts.allow) au moment de la connexion .
Maintenant, lorsque vous êtes sur un système arbitraire sur le Web et que vous souhaitez vous connecter en ssh à ce système, utilisez d'abord un navigateur Web et cliquez sur ce fichier (ou utilisez wget ou equivilent) :
$ wget http://your.system.name/my-sshd-access.php
Vous devriez maintenant pouvoir vous connecter en ssh à votre système. S'il s'agit d'un endroit où vous allez probablement vous connecter fréquemment en ssh, il serait trivial de lire le contenu du fichier /etc/hosts.allow.temporary-sshd-access et d'ajouter définitivement l'adresse IP à /etc/hosts. autoriser.
Solution 5 :
Vous voudrez peut-être aussi regarder denyhosts.
Pour votre information :OpenSSH 6.7 abandonne la prise en charge de tcpwrappers, ce qui signifie que denyhosts n'est probablement pas la solution pour les nouvelles installations.