Sie können iptables verwenden, um die Rate neuer eingehender Verbindungen zum SSH-Port zu begrenzen. Ich müsste Ihre gesamte iptables-Konfiguration anzeigen, um eine schlüsselfertige Lösung zu erhalten, aber im Grunde geht es darum, Regeln wie die folgenden hinzuzufügen:
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
Bei diesen Regeln wird davon ausgegangen, dass Sie zuvor in der Tabelle HERGESTELLTE Verbindungen akzeptieren (sodass nur neue Verbindungen diese Regeln erfüllen). Neue SSH-Verbindungen erfüllen 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 getrennt werden.
Das hat bei mir gut funktioniert.
Edit: Ich bevorzuge diese Methode gegenüber "fail2ban", da keine zusätzliche Software installiert werden muss und dies komplett im Kernel-Modus geschieht. Es verarbeitet keine Parsing-Protokolldateien wie "fail2ban", aber wenn Ihr Problem nur bei SSH liegt, würde ich keinen Benutzermodus verwenden, der eine Softwareinstallation erfordert und komplexer ist.
-m condition
iptables match.fail2ban kann hier Abhilfe schaffen, indem IP-Adressen mit zu vielen fehlgeschlagenen Anmeldeversuchen blockiert werden.
quelle
Ich würde empfehlen, einen Nicht-Standard-Port für SSH zu verwenden, wenn Sie können (dh Port 10222), aber da Sie erwähnt haben, dass Sie das nicht können, würde ich empfehlen, etwas wie DenyHosts zu verwenden.
http://denyhosts.sourceforge.net/
Tolles Paket, einfach zu installieren und zu konfigurieren.
quelle
Es mag zwar schön sein, von beliebigen Orten im Internet aus in Ihr System zu sshen, aber es gibt automatisierte Passwortangriffssysteme, die sich auf einen offenen ssh-Port verriegeln und verschiedene Angriffe von Joe-Konten und -Wörterbüchern auf Ihr System anwenden. Dies kann ärgerlich sein, wenn Sie Ihre nächtliche Protokollzusammenfassung lesen, und ist eine Verschwendung Ihrer Bandbreite.
Wenn Sie einen Webserver auf demselben System haben, können Sie den eingehenden SSH-Datenverkehr mit PHP- und TCP-Wrappern auf bekannte Systeme beschränken und Ihnen einen Hintertürschlüssel geben, mit dem Sie von beliebigen Systemen aus auf das Internet zugreifen können.
So machst du es:
lehne alle ssh-Verbindungen in /etc/hosts.deny ab:
Erlaube bekannte Systeme nach IP in /etc/hosts.allow und füge eine Datei für den temporären Zugriff hinzu:
Erstellen Sie eine PHP-Datei auf Ihrem Webserver und vergeben Sie einen nicht offensichtlichen Namen wie my-sshd-access.php:
Verzeihen Sie den PHP-Code - ich habe ihn von einem anderen Ort geklaut, damit er wahrscheinlich aufgeräumt werden kann. Es wird lediglich die IP-Adresse des Systems hinzugefügt, das auf die Datei /etc/hosts.allow.temporary-sshd-access zugreift, die von sshd (aufgrund der Einbeziehung von /etc/hosts.allow) zum Zeitpunkt der Verbindung gelesen wird .
Wenn Sie sich an einem beliebigen System im Web befinden und auf dieses System zugreifen möchten, verwenden Sie zunächst einen Webbrowser und klicken Sie auf diese Datei (oder verwenden Sie wget oder equivilent):
Jetzt sollten Sie in der Lage sein, sich in Ihr System einzuschalten. Wenn Sie wahrscheinlich von hier aus häufig auf diese Website zugreifen, ist es trivial, den Inhalt der Datei /etc/hosts.allow.temporary-sshd-access zu lesen und die IP-Adresse dauerhaft zu / etc / hosts hinzuzufügen. ermöglichen.
quelle
Vielleicht möchten Sie sich auch die Denyhosts ansehen .
Zu Ihrer Information : OpenSSH 6.7 setzt die Unterstützung für tcpwrapper außer Kraft , was bedeutet, dass denyhosts wahrscheinlich nicht die Lösung für Neuinstallationen ist.
quelle
Tun Sie sich selbst einen Gefallen und deaktivieren Sie die Passwortanmeldung. Verwenden Sie ausschließlich Authentifizierungsschlüssel (z. B. google ssh-keygen - Beispiel: http://www.puddingonline.com/~dave/publications/SSH-with-Keys-HOWTO/document/html/SSH-with-Keys-HOWTO-4 .html ) Ihr Server ist sicherer, Sie stellen eine bequemere Verbindung her (überprüfen Sie ssh-agent, ssh-add, keychain) und Sie sind nicht mehr Opfer von ssh-Brute-Force-Angriffen.
quelle
eine andere lösung ist, ssh einfach auf einen anderen port zu verschieben. Diese Würmer sind ziemlich dumm.
quelle
Eine andere Möglichkeit könnte sein, dass alle SSH-Verbindungen durch ein Zertifikat überprüft werden müssen und Passwörter ganz wegfallen.
Früher habe ich Denyhosts verwendet, aber ich habe festgestellt, dass ich nur eine Handvoll von Orten aus regelmäßig eine Verbindung hergestellt habe. Daher habe ich alle Verbindungen von Port 22 blockiert, außer von einem anderen Ort, und Port-Knocking verwendet, damit ich mich von überall mit meinem Laptop verbinden kann, wenn ich muss .
quelle
Jede Lösung, bei der IP-Adressen nach mehreren Ausfällen automatisch blockiert werden, birgt das Risiko von Denial-of-Service-Angriffen. Solange es eine gute Passwortrichtlinie gibt, um die Effektivität von Brute-Force- oder Wörterbuchangriffen zu verringern, würde ich mir keine allzu großen Sorgen machen.
Wenn Sie die Benutzer / Gruppen auf diejenigen beschränken, denen das Anmelden als erstes gestattet werden soll, und die Anmeldung als Root deaktivieren, sollten Sie mehr als sicher sein. Und wenn das nicht ausreicht, gibt es immer eine schlüsselbasierte Authentifizierung.
quelle
Ehrlich gesagt, wenn Sie SSH (und auf Port 22) ausführen müssen, können Sie diese nicht vermeiden. Wenn Sie Passwörter akzeptieren müssen, geht es Ihnen noch schlechter.
Am besten konfigurieren Sie Ihre Protokollanalyse-Software so, dass die SSH-Protokolle ausgeschlossen werden. Führen Sie dann eine separate Instanz aus, um nur SSH-Protokolle anzuzeigen, und verwenden Sie procmail, um die erfolglosen Versuche herauszufiltern. Sie können sogar Skripts schreiben, um nach erfolgreichen Anmeldungen von IP-Adressen mit mehreren erfolglosen Versuchen zu suchen.
Es gibt keine Möglichkeit, andere daran zu hindern, Ihren SSH-Server zu untersuchen. Denyhosts, fail2ban und das Beispiel iptables funktionieren bis zu einem gewissen Punkt, jedoch mit der zusätzlichen Gefahr, dass legitime Benutzer versehentlich blockiert werden. Am besten saugen Sie es auf und versuchen, den Protokollanalyseprozess zu automatisieren, um die Zeit zu verkürzen, die Sie zum Nachdenken benötigen.
quelle
Wenn Sie sagen, dass Sie Fehler beim Anmelden auf Ihrem Red Hat-Server haben, welche Art von Firewall befindet sich dahinter und wie viele Personen müssen sich einloggen? Ich schlage vor, wenn Sie können, die Anzahl der Firewall-Versuche zu begrenzen, bevor sie in die Nähe Ihres eigentlichen Servers gelangen.
Wenn Sie den Bereich der IP-Adressen einschränken können, die zu Recht Zugriff benötigen, sollten Sie in der Lage sein, eine Zugriffsliste an der Firewall einzurichten. Wenn Sie den Datenverkehr an der Firewall einschränken können, sollten Sie sich ein Netzwerk-Intrusion-System ansehen, da der Eindruck entsteht, dass Ihr Server von etwas angegriffen wird.
quelle
Die meisten Webhosts verwenden APF + BFD , um fehlgeschlagene SSH-Anmeldungen zu blockieren. Heutzutage gibt es CSF (Configserver Firewall), das ein Tool namens LFD enthält, das das Gleiche tut, und vieles mehr, einschließlich der Blockierung von IPs aus bestimmten Ländern, auf die Sie keinen Zugriff haben möchten (z. B. Korea, China usw., wo 99% meiner SSH-Tests ausgeführt werden scheinen zu stammen von).
quelle
Ive, das mit fail2ban und es hat viel mir geholfen werden.
quelle
Wenn Sie dieses Problem auf mehreren Hosts beheben müssen, lesen Sie möglicherweise OSSEC: http://www.ossec.net/main/ossec-architecture
Auf diese Weise können Sie mehrere Agenten an einem zentralen Ort konfigurieren, um automatisch auf Brute-Force-Angriffe zu reagieren (zusammen mit allen anderen Mustern, die Sie aus Protokollen extrahieren können).
Sehr schönes Stück Software :)
quelle
Eine andere Option, die DenyHosts ähnelt, ist sshutout http://www.techfinesse.com/sshutout/sshutout.html
quelle