web-dev-qa-db-fra.com

Des centaines de connexions SSH défaillantes

Chaque nuit, je reçois des centaines, parfois des milliers, de connexions SSH ayant échoué sur mon serveur RedHat 4. Pour des raisons de pare-feu des sites distants, je dois exécuter sur le port standard. Y a-t-il quelque chose que je devrais faire pour bloquer cela? Je remarque que beaucoup proviennent de la même adresse IP. Ne devrait-il pas arrêter ces après un moment?

81
MattMcKnight

Vous pouvez utiliser IPTABLES pour évaluer les nouvelles connexions entrantes sur le port SSH. Je devrais voir toute votre configuration d'IPTABLES afin de vous donner une solution clé en main, mais vous parlez essentiellement de l'ajout de règles telles que:

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 des connexions établies plus tôt dans le tableau (afin que seules les nouvelles connexions frappent ces règles). Les nouvelles connexions SSH vont frapper ces règles et être marquées. En 60 secondes, 5 tentatives d'une seule adresse IP entraîneront de nouvelles connexions entrantes de cette adresse IP supprimée.

Cela a bien fonctionné pour moi.

EDIT: Je préfère cette méthode à "échec1ban" car aucun logiciel supplémentaire à installer et se passe totalement en mode noyau. Il ne traite pas de pannes de fichiers journaux tels que "échecd2ban", mais si votre problème est uniquement avec SSH, je n'utiliserais pas quelque chose d'utilisateur nécessitant une installation logicielle et est plus complexe.

67
Evan Anderson

Je recommanderais d'utiliser un port non standard pour SSH si vous le pouvez (c'est-à-dire Port 10222), mais depuis que vous avez mentionné que vous ne pouvez pas faire cela, je recommanderais d'utiliser quelque chose comme des dényhosts.

http://denyhosts.sourceforge.net/

Super paquet, facile à installer et à configurer.

25
KPWINC

Bien que cela puisse être agréable de pouvoir ssh dans votre système à partir d'emplacements arbitraires sur Internet, il existe des systèmes d'attaque de mot de passe automatisés qui verrouillent un port SSH ouvert et appliquer diverses attaques de compte JOE et dictionnaires contre votre système. Cela peut être aggravant de lire dans votre résumé de journal nocturne et est un gaspillage de votre bande passante.

Si vous avez un serveur Web sur le même système, vous pouvez utiliser des emballages PHP et TCP pour restreindre le trafic entrant de SSH aux systèmes connus, ainsi que vous donner une clé de porte arrière pour vous permettre l'accès des systèmes arbitraires sur Internet.

Voici comment vous le faites:

refuser toutes les connexions SSH dans /etc/hosts.Deny:

# /etc/hosts.deny fragment
sshd:  all

Autoriser les systèmes connus par IP dans /etc/hosts.allow, plus Ajouter un fichier d'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é ailleurs, cela pourrait donc probablement être nettoyé pour être nettoyé. Tout ce qu'il fait, c'est ajouter l'adresse IP du système qui l'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 dans un système arbitraire sur le Web et que vous souhaitez d'abord utiliser SSH sur ce système, utilisez d'abord un navigateur Web et appuyez sur ce fichier (ou utilisez Wget ou Equivilent):

$ wget http://your.system.name/my-sshd-access.php

Maintenant, vous devriez être capable de ssh dans votre système. Si cela se trouve quelque part, vous serez probablement ssh'ing d'entre fréquemment, il serait trivial de lire le contenu du fichier /etc/hosts.allow.temporary-sshd-access et d'ajouter de manière permanente l'adresse IP à/etc/hosts. Autoriser.

15
David Mackintosh

Vous voudrez peut-être regarder Denyhosts aussi.

FYI: OpenSSH 6.7 DROPS Support TCPWRAPers , signifiant que DenyHosts n'est probablement pas la solution pour de nouvelles installations.

9
Zoredache

Faites-vous une faveur et désactivez la connexion du mot de passe. Utilisez des touches d'authentification exclusivement (Google SSH-Keygen par exemple - Exemple: http://www.puddingonline.com/~dave/publications/ssh-with-keys-howto/document/html/ssh-with-keys -Howto-4.html ) Votre serveur sera plus sécurisé, vous allez vous connecter plus confortablement (vérifier SSH-Agent, SSH-Add, Keychain) et vous ne serez plus la victime des attaques de force brutale SSH.

8
Manu

Une autre option peut être de demander que toutes les connexions SSH soient vérifiées par un certificat et éliminez complètement les mots de passe.

J'utilise pour utiliser des denyhosts, mais j'ai trouvé que je ne faisais que la connexion régulièrement à distance d'une poignée d'endroits, j'ai donc bloqué toutes les connexions du port 22, sauf de n'importe où ailleurs, et utilisez le port frappant afin que je puisse vous connecter de n'importe où avec mon ordinateur portable si je dois .

2
Evan

une autre solution est simplement de déplacer SSH sur un autre port. Ces vers sont assez stupides.

2
disserman

Toute solution qui implique de bloquer automatiquement les IP après que plusieurs défaillances introduisent le risque de déni des attaques de service. Tant qu'il y a une bonne politique de mot de passe en place pour réduire l'efficacité de la force brute ou des attaques de dictionnaires, je ne m'inquiéterais pas trop à leur sujet.

Si vous limitez les utilisateurs/groupes à ceux qui doivent être autorisés à SSH en premier lieu et désactivez la connexion en tant que root, vous devriez être suffisamment sécurisée. Et, si cela ne suffit pas, il y a toujours une authentification basée sur une clé.

1
goldPseudo

Honnêtement, si vous devez exécuter SSH (et sur le port 22), vous ne pouvez pas éviter ceux-ci. Si vous devez accepter les mots de passe, vous êtes encore pire de forme.

Votre meilleur pari est de configurer votre logiciel d'analyse de journal pour exclure les journaux SSH. Ensuite, lancez une instance séparée pour rechercher uniquement les journaux SSH et utiliser ProCmail pour filtrer les tentatives infructueuses. Vous pourriez même écrire des scripts pour surveiller les connexions réussies des adresses IP avec de multiples tentatives infructueuses.

Il n'y a aucun moyen d'empêcher les gens de rechercher votre serveur SSH. Denyhosts, Fail2Ban et l'exemple IPTABLES fonctionneront jusqu'à un point, mais avec le danger supplémentaire de bloquer accidentellement les utilisateurs légitimes. La meilleure méthode consiste à le sucer et à essayer d'automatiser le processus d'analyse du journal afin de réduire le temps que vous devez y penser.

1
erik

Lorsque vous dites que vous obtenez échoué SHH Connectez-vous en attente sur votre serveur Red Hat, quelle sorte de pare-feu est-il assis derrière et combien de personnes ont besoin de chiquer. Je suggère que si vous puissiez vous limiter les tentatives du pare-feu avant d'obtenir n'importe où près de votre serveur actuel.

Si vous pouvez restreindre la gamme d'adresses IP qui ont légitimement besoin d'un accès, vous devriez pouvoir configurer une liste d'accès sur la paroi de pompiers. Si vous pouvez limiter le trafic au pare-feu, je vous suggère de regarder les systèmes d'intrusion de réseau, comme cela ressemble à votre serveur est en train de cibler quelque chose.

0
davidcoxon

Si vous avez besoin de résoudre ce problème dans plusieurs hôtes, vous voudrez peut-être consulter OSSEC: http://www.ossec.net/main/OSSEC-ARCHITECTURE

Cela vous permettra de configurer plusieurs agents à partir d'un emplacement centralisé pour répondre automatiquement aux attaques de la force brute (avec tout autre modèle que vous pouvez extraire des journaux).

Très beau logiciel :)

0
Matt

J'ai utilisé échec1ban et cela m'aidait beaucoup.

0
tehjay

Une autre option similaire à Denyhosts est Sshutout http://www.techfinesse.com/sshutout/sshutout.html

0
mirk