Was sind die Vor- und Nachteile der verschiedenen Methoden zum Blockieren von SSH-Angriffen mit Brute-Force-Methoden?

20

Es gibt eine Reihe von verschiedenen Paketen, um IP-Adressen auszuschließen, von denen aus Brute-Force-SSH-Angriffe auf Ihr System gestartet werden. Beispielsweise:

Was sind die Vor- / Nachteile dieser oder anderer?

Meine derzeitige Lösung besteht darin, die E-Mail, die Logwatch täglich generiert, in eine Textdatei zu kopieren , die ich in ein Skript einspeise , das dann iptables neu erstellt. Es ist hackig, zeitaufwändig und manuell und ich hätte gerne einen besseren Weg.

(Beachten Sie, dass ich nicht gefragt habe, was der "beste" Weg ist, um das Problem zu lösen, da es keinen "besten" Weg gibt, etwas zu tun.)

Andy Lester
quelle

Antworten:

15

Ich benutze DenyHosts, also kann ich das zumindest beantworten:

Vorteile

  • Es ist vollautomatisch
  • Es ist konfigurierbar (wie viele fehlgeschlagene Versuche vor dem Blacklisting für nicht existierende Benutzernamen, existierende Benutzernamen und einen speziellen Eintrag für root).
  • Es kann Ihnen in regelmäßigen Abständen eine Liste mit neu auf die schwarze Liste gesetzten Hosts per E-Mail senden und / oder ein bestimmtes Programm jedes Mal ausführen, wenn ein neuer Host auf die schwarze Liste gesetzt wird
  • Es unterstützt das automatische Aufheben der Blacklisting von Hosts nach einer Weile

Nachteile

Ich habe keine irreparablen Nachteile, solange Sie es richtig verwenden:

  • In der Standardkonfiguration werden Sie nicht auf neu auf die schwarze Liste gestellte Hosts aufmerksam gemacht. Wenn also jemand von Hunderten verschiedener Adressen aus auf Ihr Netzwerk zugreift, werden Sie möglicherweise nicht sofort darauf aufmerksam, wie wenn Sie Ihre Protokolle manuell überwachen, aber (wie in beschrieben) der Profibereich) kann Sie per E-Mail benachrichtigen oder eine ausführbare Datei ausführen, um Sie zu benachrichtigen, wenn neue Hosts hinzugefügt werden
  • Standardmäßig werden Ihre Hosts auf die gleiche Blacklist gesetzt wie alle anderen, daher möchten Sie sie wahrscheinlich hinzufügen /etc/hosts.allow. Ich habe mich ausgesperrt, als ich nur mein Passwort nicht eingeben konnte, und als jemand von der Arbeit versuchte, sich als Scherz bei meinem Root-Konto anzumelden und meine Arbeits-IP auf die schwarze Liste zu setzen. Es dauerte ein paar Tage, bis ich herausgefunden hatte, warum ich plötzlich keine Verbindung herstellen konnte zu meinem Netzwerk von der Arbeit mehr
Michael Mrozek
quelle
19

Ein anderes ist fail2ban , das sich auf iptables stützt (es funktioniert also mit jedem Dienst, nicht nur mit ssh). Mit fail2ban können Sie:

  • Geben Sie den Pfad zu einer beliebigen Protokolldatei an (Apache, SSH, Nginx, Mailserver, ...).
  • Geben Sie Regex für Angriffsmuster an (z. B. mehr als 10 "404-Fehler" mit derselben IP im Nginx-Zugriffsprotokoll in 6 Sekunden).
  • Geben Sie Regex an, um bestimmte Muster zu ignorieren (sehr nützlich!)
  • Geben Sie die Sperrzeit an
  • Senden Sie eine E-Mail (oder eine andere Warnung ...)
  • Vollständig anpassbar (Sie können Ihre eigenen Warnungen und Filter schreiben)

Ein "Nachteil" von DenyHosts ist, dass es TCP-Wrapper benötigt, sodass es nur mit Diensten funktioniert, die auf die Datei /etc/hosts.deny zugreifen. Um den DenyHosts gerecht zu werden, ist sshd so kompiliert, dass es TCP-Wrapper auf den meisten Linux-Distributionen verwendet. Ich finde DenyHosts auch einfacher zu konfigurieren als fail2ban (aber weniger leistungsfähig).

Verweis auf eine ähnliche SF-Frage

Barthelemy
quelle
Zum Glück funktioniert fail2ban auch mit pf - nicht nur mit iptables
Good Person
10

Ein einfacher und in der Praxis wirksamer Schutz vor scanbasierten Angriffen besteht darin, nicht den Standardport zu verwenden. 443 (der https-Port) setzt Sie verschiedenen Brute-Force-Angriffen aus, die Ihre schwachen Passwörter nicht knacken, und funktioniert möglicherweise über mehr Firewalls als der Standardport (22).

Die meisten Methoden, um ssh-Brute-Force-Angriffe zu verhindern, sind großartige Möglichkeiten für Self-DoS (Ups, ich habe die Konfiguration verkorkst! Ups, ich habe ein paar schnelle Rsync-Vorgänge durchgeführt und bin jetzt für den Tag gesperrt!) Oder Assisted-Self-DoS (Ups, Assisted-Self-DoS) , der Angreifer kommt von / hat einen Computer im selben Subnetz wie ich (dynamischer IP-Bereich, Hochschulnetzwerk ...) unterwandert und ich werde auch gebannt!).

Wenn Sie sich nur von wenigen Orten aus anmelden, können Sie nur Quell-IP-Adressen auf die Whitelist setzen. Das ist natürlich nicht gut, wenn Sie von Ihrem Laptop oder Handy unterwegs ssh wollen.

Ein ssh-Daemon, der nur IPv6-Verbindungen überwacht, sollte Sie noch einige Jahre vor Scans schützen. Bei vielen Firewalls können Sie IPv6 jedoch nicht auf vernünftige Weise transportieren.

Eine andere Methode, die Sie nicht erwähnen, ist das Portklopfen . Es leidet nicht unter Self-DoS-Problemen (mit Ausnahme von Fehlkonfigurationen), ist jedoch nicht in der Lage, Firewalls zu durchqueren, und kann den Verbindungsaufbau um einige Sekunden verzögern.

Wenn Sie gute Kennwörter haben oder ohne Kennwortauthentifizierung auskommen, deaktivieren Sie die Kennwortauthentifizierung. (Schlüssel und Einmalkennwörter sind für die meisten Anwendungsfälle ausreichend: Wenn Sie dem Client-Computer nicht genug vertrauen, um einen SSH-Schlüssel zu speichern, können Sie auch nicht davon ausgehen, dass kein Keylogger vorhanden ist.) Dann kosten Brute-Force-Angriffe Sie ein bisschen CPU und Bandbreite, setzen Sie jedoch keinem Eingriff aus (solange Sie überprüft haben, dass keiner Ihrer Schlüssel von einem Debian OpenSSL mit niedriger Entropie stammt) ).

Alles in allem ist zu beachten, dass das Ändern des Anschlusses Ihre Exposition nicht wesentlich verringert. Sie werden weniger scannen müssen , aber alles, was Sie abschneiden können, ist die niedrig hängende Frucht, die versucht, alte Schwachstellen und schwache Passwörter auszunutzen. Solange Sie Ihren Daemon auf dem neuesten Stand halten und entweder angemessene Kennwörter oder angemessene Grenzwerte für die Versuchsrate durchsetzen, ist das Wechseln des Ports eher eine Haftung als eine Sicherheitsmaßnahme.

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ich bin damit einverstanden, dass es einige Übung erfordert, sich nicht selbst zu verbieten ;-) Das Ändern der Standardports und das Verzichten auf ein Kennwort, sondern auf einen kennwortgeschützten Schlüssel sind ebenfalls gute Ratschläge. Aber ich weiß wirklich nicht, warum ich Bot-Netzwerke meine Zugriffsprotokolldateien füllen lassen soll, während mein SSH- und Webserver Tausende von Anfragen pro Stunde ablehnen muss. Mit fail2ban ist mein Zugriffsprotokoll sauber und meine Serveranwendungen sehen diesen Datenverkehr überhaupt nicht (mit Ausnahme der ersten X schlechten Anfragen :-)).
Barthelemy
Die Verwendung eines nicht standardmäßigen Ports bietet kaum Schutz. Das Scannen nach SSH an einem nicht standardmäßigen Port dauert nur ein paar Minuten länger als das Scannen nach SSH an Port 22 (vorausgesetzt, der Cracker führt einen Scan durch und der Scan wurde nicht von einem IDS blockiert. Wenn Sie jedoch über ein IDS verfügen, ist eine Portverschleierung wahrscheinlich nicht erforderlich ). Wenn ich ein Cracker wäre und SSH auf einem Nicht-Standard-Port gefunden hätte, wäre ich noch mehr interessiert, da ich weiß, dass der Administrator diesen Dienst für wertvoll genug hielt, um ihn zu verbergen, und sich auf Sicherheit durch Unbekanntheit verlässt.
Stefan Lasiewski
1
@ Stefan: Die meisten Angriffe richten sich nicht gegen einen bestimmten Host, sondern gegen einen bestimmten Dienst. Dafür ist es viel effektiver, einen einzelnen Port an vielen Adressen zu scannen, als viele Ports an jeder Adresse. Und wenn Sie tatsächlich von einem Angreifer angegriffen werden, sollten Sie wissen, dass sichere oder verbotene Passwörter und die Angriffe protokolliert werden sollen.
Gilles 'SO- hör auf böse zu sein'
1
@Stefan Ich sehe nicht standardmäßige Ports als wirksame Lösung für ein Ärgernis (Brute-Force-Scans) und nicht wirklich als Sicherheitsmaßnahme (dh als Verhinderung, dass jemand die Kontrolle über meinen Server übernimmt).
Barthelemy
1
@sudowned Die Angabe eines anderen Ports ist kaum störend. Es ist nur eine Zeile in .ssh/config. Lockout ist ein Problem, wenn die Firewall Sie nicht durchlässt, und die einfachste Lösung besteht darin, sich an Port 22 zu halten und auch auf 443 zu lauschen. Ich stimme zu, dass das Wechseln des Ports die Sicherheit nicht wirklich verbessert. Vielleicht sollte ich das klarer machen . Ich weiß nicht, warum Sie es für unmöglich halten, dass ein SSH-Daemon die Kennwortauthentifizierung nicht unterstützt: Es geht nur darum, sshd_configmit OpenSSH, der am häufigsten verwendeten Implementierung , eine Zeile hinzuzufügen .
Gilles 'SO- hör auf böse zu sein'