GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Hunderte von fehlgeschlagenen SSH-Anmeldungen

Lösung 1:

Sie können iptables verwenden, um neue eingehende Verbindungen zum SSH-Port zu begrenzen. Ich müsste Ihre gesamte iptables-Konfiguration sehen, um Ihnen eine fertige Lösung zu geben, aber Sie sprechen im Grunde davon, Regeln hinzuzufügen wie:

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 

Diese Regeln gehen davon aus, dass Sie ESTABLISHED-Verbindungen früher in der Tabelle akzeptieren (so dass nur neue Verbindungen diese Regeln treffen). Neue SSH-Verbindungen treffen diese Regeln und werden markiert. In 60 Sekunden führen 5 Versuche von einer einzelnen IP-Adresse dazu, dass neue eingehende Verbindungen von dieser IP-Adresse verworfen werden.

Das hat bei mir gut funktioniert.

Edit:Ich bevorzuge diese Methode gegenüber "fail2ban", da keine zusätzliche Software installiert werden muss und vollständig im Kernel-Modus abläuft. Es handhabt keine Protokolldateien wie "fail2ban", aber wenn Ihr Problem nur mit SSH besteht, würde ich keinen Benutzermodus verwenden, der eine Softwareinstallation erfordert und komplexer ist.

Lösung 2:

fail2ban kann dabei helfen, indem es IP-Adressen mit zu vielen fehlgeschlagenen Anmeldeversuchen blockiert.

Lösung 3:

Ich würde empfehlen, einen Nicht-Standard-Port für SSH zu verwenden, wenn Sie können (z. B. Port 10222), aber da Sie erwähnt haben, dass Sie dies nicht tun können, würde ich empfehlen, etwas wie DenyHosts zu verwenden.

http://denyhosts.sourceforge.net/

Großartiges Paket, einfach zu installieren und zu konfigurieren.

Lösung 4:

Auch wenn es schön sein mag, von beliebigen Orten im Internet auf Ihr System zugreifen zu können, gibt es automatisierte Passwortangriffssysteme, die sich auf einen offenen SSH-Port einlassen und verschiedene Angriffe auf Joe-Konten und Wörterbuch auf Ihr System anwenden. Es kann ärgerlich sein, dies in Ihrer nächtlichen Protokollzusammenfassung zu lesen, und es ist eine Verschwendung Ihrer Bandbreite.

Wenn Sie einen Webserver auf demselben System haben, können Sie PHP- und TCP-Wrapper verwenden, um den eingehenden ssh-Verkehr auf bekannte Systeme zu beschränken, und Ihnen einen Hintertürschlüssel geben, um sich den Zugriff von beliebigen Systemen im Internet zu erlauben.

So geht's:

Verweigern Sie alle SSH-Verbindungen in /etc/hosts.deny:

# /etc/hosts.deny fragment
sshd:  all

Bekannte Systeme nach IP in /etc/hosts.allow zulassen und eine Datei für temporären Zugriff hinzufügen:

# /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

Erstellen Sie eine PHP-Datei auf Ihrem Webserver und geben Sie ihr einen nicht offensichtlichen Namen wie 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);
?>

Verzeihen Sie den PHP-Code – ich habe ihn von woanders geklaut, also könnte er wahrscheinlich eine ganze Menge bereinigt werden. Es fügt lediglich die IP-Adresse des darauf zugreifenden Systems zur Datei /etc/hosts.allow.temporary-sshd-access hinzu, die von sshd (aufgrund ihrer Einbeziehung in /etc/hosts.allow) zur Verbindungszeit gelesen wird .

Wenn Sie sich nun auf einem beliebigen System im Web befinden und zu diesem System ssh möchten, verwenden Sie zuerst einen Webbrowser und klicken Sie auf diese Datei (oder verwenden Sie wget oder Äquivalent):

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

Jetzt sollten Sie in der Lage sein, sich per SSH in Ihr System einzuloggen. Wenn dies ein Ort ist, von dem aus Sie wahrscheinlich häufig ssh'en, wäre es trivial, den Inhalt der Datei /etc/hosts.allow.temporary-sshd-access zu lesen und die IP-Adresse dauerhaft zu /etc/hosts hinzuzufügen. erlauben.

Lösung 5:

Vielleicht möchten Sie sich auch denyhosts ansehen.

FYI:OpenSSH 6.7 stellt die tcpwrappers-Unterstützung ein, was bedeutet, dass Denyhosts wahrscheinlich nicht die Lösung für neue Installationen ist.


Linux
  1. Acht Möglichkeiten zum Schutz des SSH-Zugriffs auf Ihrem System

  2. SSH auf Ubuntu 20.04 aktivieren - Schritt-für-Schritt-Anleitung?

  3. SSH auf Debian 9-System aktivieren – Schritt-für-Schritt-Verfahren?

  4. Ssh gibt die Meldung „x11-Weiterleitungsanforderung auf Kanal 1 fehlgeschlagen“ zurück?

  5. gnutls_handshake() fehlgeschlagen:Handshake fehlgeschlagen GIT

Schlüsselbasierte SSH-Anmeldungen mit PuTTY

So listen Sie erfolglose SSH-Anmeldungen unter Linux auf

Begrenzen Sie die Anzahl der SSH-Anmeldungen pro Benutzer/Gruppe/System

SSHFS:Mounten eines Remote-Dateisystems über SSH

Wie generiert und verwendet man einen SSH-Schlüssel in einem Linux-System?

pam_tally2-Befehl – ​​Sperren und Entsperren von fehlgeschlagenen SSH-Anmeldungen unter Linux