Brute-Force-Angriffe gegen ssh verhindern?


49

Welches Tool oder welche Technik verwenden Sie, um Brute-Force-Angriffe auf Ihren SSH-Port zu verhindern? In meinen Sicherheitsprotokollen habe ich festgestellt, dass ich Millionen von Anmeldeversuchen als verschiedene Benutzer über ssh habe.

Dies ist auf einer FreeBSD-Box, aber ich stelle mir vor, dass es überall anwendbar wäre.

Antworten:


25

Hier ist ein guter Beitrag von Rainer Wichmann zu diesem Thema .

Es werden die Vor- und Nachteile dieser Methoden erläutert:

  • Starke Passwörter
  • RSA-Authentifizierung
  • Verwenden Sie iptables, um den Angriff zu blockieren
  • Verwenden des SSHD-Protokolls zum Blockieren von Angriffen
  • Verwenden von tcp_wrappern zum Blockieren von Angriffen
  • Port klopft an

39

Ich verwende fail2ban, das eine IP nach mehreren fehlgeschlagenen Versuchen für eine konfigurierbare Zeitspanne sperrt.

Kombinieren Sie dies mit einem Kennwortsicherheitstest (mit John (John the Ripper)), um sicherzustellen, dass Brute-Force-Angriffe nicht erfolgreich sind.


4
Fail2ban ist ausgezeichnet. Es war einfach, es zu erweitern, um / var / log / maillog zu überwachen und persistente Spammer daran zu hindern, meinen Mail-Server zu erreichen
Dave Cheney

Fail2ban kann mit einer iptables-Kette kombiniert werden, die TARPITTCP- Verkehr an das Ziel sendet , wenn Sie sich böse fühlen (von xtables-addons).
Tobu



15

Eine der einfachsten Möglichkeiten, diese Angriffe zu vermeiden, besteht darin, den Port zu ändern, auf dem sshd lauscht


1
Wenn natürlich Ihr System es aushält.
C. Ross

13
Sicherheit durch Dunkelheit, immer wirksam.
Chris Ballance

1
Es würde mir nichts ausmachen, den Port so oft zu ändern, aber ich habe gelernt, dass die meisten Firewalls (außer meinen) dazu neigen, alle Ports außer den üblichen (80, 22, 443 usw.) zu sperren. Wenn ich mich hinter diesen Firewalls befinde, kann ich über diesen nicht standardmäßigen Port nicht zu meinem Heimserver gelangen. Für mich ist das ein Nein.
Trauer

@grieve dann unsere Firewall ändern, um diesen Port rauszulassen?
Rory

@ Roy Ich spreche über andere Firewalls als die, die ich besitze. Wenn ich zum Beispiel von Starbucks aus in meinen Heimcomputer sshen möchte, blockiert deren Firewall den ausgehenden Port. Ich kann das nicht ändern. (Ich habe nur Starbucks als Beispiel verwendet. Ich habe keine Ahnung, welche Ports sie tatsächlich blockieren oder nicht).
Trauer

12

Wie Chris betont, sollten Sie anstelle von Passwörtern Verschlüsselungsschlüssel verwenden.

Fügen Sie dazu hinzu:

  • Verwenden Sie nach Möglichkeit eine Whitelist.

Wie viele Personen oder Standorte (mit öffentlichen IP-Adressen) benötigen Sie wirklich, um auf Ihre öffentlichen SSH-Verbindungen zuzugreifen?

Abhängig von der Anzahl der von Ihnen verwalteten öffentlichen SSH-Hosts und der Frage, ob Sie die allgemeinen Verbindungskriterien eingrenzen können, ist es möglicherweise einfacher, die Konfiguration zu verwalten, um den Zugriff auf einige externe Hosts zu beschränken.

Wenn dies für Sie funktioniert, kann dies den Administrationsaufwand erheblich vereinfachen.


2
Whitelisting ist enorm wichtig, wenn Sie eine Art Blacklisting durchführen, es sei denn, Sie möchten ausgeschlossen werden.
Ryaner

2
+1 für proaktives Whitelisting.
Chris Ballance

3
+1 für die absolut beste Antwort. Diese beiden Dinge sind die einzigen vernünftigen Schritte, und sie sind in der Tat sehr effektiv. Beides allein lohnt sich und beides zusammen mehr. Boo auf den anderen Antworten, die Sicherheit durch Dunkelheit befürworten!
dwc

11

Zusätzlich zu den anderen guten Vorschlägen ist es sehr einfach, eingehende Verbindungen auf eine bestimmte Rate zu beschränken. Beschränkung auf 3 Verbindungen pro Minute pro IP:

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Ich verstehe vielleicht etwas falsch, aber viele Mainstream-Browser verbinden 4-6 Verbindungen gleichzeitig - obwohl der HTTP-Standard dies auf 2 festlegt.
Joshua Enfield

1
Ja, das wäre ein Problem, wenn Sie versuchen würden, Port 80 auf eine bestimmte Rate zu beschränken. Sie stellen mit Ihrem Webbrowser keine Verbindung zu ssh her, und ssh-Sitzungen sind langlebige Sitzungen, die den Status beibehalten, und nicht kurzlebige zustandslose Sitzungen wie z http. Eine solche Parallelisierung von ssh-Sitzungen ist nicht sinnvoll. Das soll nicht heißen, dass es keine Nischenanwendung von ssh gibt, die dies verhindern würde, aber es ist selten.
Sherbang

Diese Lösung ist nicht so gut, wenn Sie wie ich Subversion über ssh bedienen. Eine einzelne SVN-Abfrage kann eine große Anzahl von Verbindungen in schneller Folge herstellen. Wenn Sie diesen Dienst bereitstellen, können Sie entweder einen zweiten sshd-Dienst an einem anderen Port verwenden oder bekannte IP-Adressen auf die Whitelist setzen. Ich denke daran, mit fail2ban oder sshdfilter beim ersten Mal offensichtliche Angriffe abzufangen, ohne meine legitimen Benutzer zu bestrafen.
Paddy

Gut zu wissen, diese Option auch ...
ZEE

6

Verwenden Sie die Option "AllowUsers" in sshd_config, um sicherzustellen, dass sich nur wenige Benutzer anmelden können. Alle anderen werden abgelehnt, auch wenn Benutzername und Passwort korrekt sind.

Sie können Benutzer sogar auf Anmeldungen von einem bestimmten Host beschränken.

z.B,

AllowUsers user1 user2@host.example.com

Dies reduziert den Suchraum und vermeidet, dass alte Benutzer versehentlich herumliegen oder aktiviert werden (obwohl diese natürlich sowieso deaktiviert werden sollten, ist dies eine einfache Möglichkeit, um zu verhindern, dass sie für einen SSH-basierten Eintrag verwendet werden).

Dies stoppt die Brute-Force-Angriffe nicht vollständig, verringert jedoch das Risiko.


3

Verwenden Sie so etwas mit PF:

Tabelle <ssh-brute> persist
block im Schnellprotokoll vom Label ssh_brute
übergeben an $ ext_if proto tcp an ($ ext_if) Port ssh modulate state \
(max-src-conn-rate 3/10, overload flush global)


2

Port-Knocking ist ein ziemlich solider Weg, um solche Dinge fernzuhalten. Etwas fummelig, manchmal nervig, aber es macht definitiv das Problem weg.


Ich habe dies versucht und Benutzer finden es ärgerlich. Wenn es sich nur um ein oder zwei Personen handelt, könnte dies eine gute Option sein und Brute-Force-Angriffe nahezu ausschließen
Brent

2

Der Kontext ist wichtig, aber ich würde Folgendes empfehlen:

  • Da Sie FreeBSD verwenden, sollten Sie erwägen, die PF-Firewall auszuführen und die festen Funktionen zur Begrenzung der Verbindungsrate zu verwenden. Auf diese Weise können Sie die Brute Forcer an eine schwarze Liste senden, wenn sie häufig eine Verbindung herstellen
  • Wenn auf dieses Feld von außerhalb zugegriffen werden muss, sollten Sie die Verwendung einer PF-RDR-Regel in Betracht ziehen, um den Datenverkehr nicht an Port 22 zuzulassen, sondern einen unklaren Port dorthin umzuleiten. Das heißt, Sie müssen eine Verbindung zu Port 9122 anstelle von 22 herstellen. Dies ist unklar, hält jedoch die Klopfer fern
  • Ziehen Sie in Betracht, nur die schlüsselbasierte Authentifizierung zu verwenden, um Wörterbuchangriffe unbrauchbar zu machen

2

Neben dem Vorschlag von Sherbang, die Geschwindigkeit zu begrenzen , ist die Länge der Verzögerung wichtig. Durch Erhöhen der Verzögerung zwischen drei Anmeldeversuchen von 2 Minuten auf 20 Minuten sank die Anzahl der verschiedenen IP-Adressen, die mehr als drei Anmeldeversuche unternommen haben, im Vergleich zu zwei Wochen auf einem meiner Computer von 44 auf drei Keine dieser drei Adressen versuchte es länger als 11 Stunden.

Sehr anekdotisch, aber auth.log wurde für mich viel lesbarer ...


1

Es interessiert mich einfach nicht. Lassen Sie sie am Hafen wegschnallen, sie werden keinen Schlüssel mit Gewalt erzwingen.


-1 Schon mal was von DoS-Attacken gehört?
Chris Ballance

8
Ja, weil SSH der einzige Dienst ist, der für Brute-Force-Angriffe anfällig ist. Wenn Sie einen Port für das Internet haben, können Sie damit Ihre Maschine in Vergessenheit geraten lassen. Sie haben Ihren HTTP-Server wahrscheinlich auch auf seltsame Ports gestellt und hinter Port-Knocking, um "DoS-Angriffe zu vermeiden" ...
womble

1

Installieren Sie OSSEC. Es wird nicht nur nach wiederholten Anmeldungen gesucht, sondern auch ein temporärer Block mit iptables für die betreffende IP-Adresse erstellt. Am Ende erhalten Sie einen Bericht mit den Details. es protokolliert alles, was nett ist. Jemand hat einmal versucht, sich mit über 8000 Anmeldenamen anzumelden. Ich habe die Logs geparst und eine nette Benutzerliste rausgeholt;)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.