Frage Brute-Force-Angriffe gegen SSH verhindern?


Mit welchem ​​Werkzeug oder welcher Technik beugen Sie Brute-Force-Angriffen gegen Ihren ssh-Port vor? Ich habe in meinen Sicherheitsprotokollen festgestellt, dass ich Millionen von Versuchen habe, mich als verschiedene Benutzer über ssh anzumelden.

Dies ist auf einer FreeBSD-Box, aber ich denke, es wäre überall einsetzbar.


49
2018-05-04 17:46


Ursprung




Antworten:


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

Es erklärt Vor-und Nachteile zu diesen Methoden, um es zu tun:

  • Starke Passwörter
  • RSA-Authentifizierung
  • Verwenden von 'iptables', um den Angriff zu blockieren
  • Verwenden des sshd-Protokolls zum Blockieren von Angriffen
  • Verwenden von tcp_wrappers zum Blockieren von Angriffen
  • Port klopfen

25
2018-05-05 16:53





ich benutze fail2ban Das wird eine IP nach mehreren fehlgeschlagenen Versuchen für einen konfigurierbaren Zeitraum sperren.

Kombinieren Sie dies mit dem Test der Passwortstärke (mit John (John the Ripper)), um sicherzustellen, dass Brute-Force-Angriffe keinen Erfolg haben werden.


39
2018-05-04 17:53



Fail2ban ist ausgezeichnet. Es war einfach, es auf monitor / var / log / maillog zu erweitern, um zu verhindern, dass hartnäckige Spammer meinen Mailserver treffen - Dave Cheney
Fail2ban kann mit einer iptables-Kette kombiniert werden, die tcp-Verkehr an die TARPIT Ziel, wenn du dich schlecht fühlst (von XTables-Addons). - Tobu


Ons kleine Sache, die Sie tun können, ist etwas wie DenyHosts zu verwenden:

http://denyhosts.sourceforge.net/

Es verwendet die eingebauten Hosts.allow / hosts.deny, um SSH-Missbraucher zu blockieren.


24
2018-05-04 18:06





  • Ändern Sie den Port benutzt als Trent erwähnt)
  • Erfordern Verschlüsselungsschlüssel anstelle von Passwörtern. http://novosial.org/openssh/publickey-auth/
  • Schwarze Liste Angreifer ips
  • Weiße Liste Bekannte Benutzer, um versehentliches Blacklisting zu verhindern. (wie Samiuela erwähnt)

16
2018-05-04 17:53





Eine der einfachsten Möglichkeiten, diese Angriffe zu vermeiden, besteht darin, den Port zu ändern, den sshd überwacht


15
2018-05-04 17:48



Wenn Ihr System es natürlich aushält. - C. Ross
Sicherheit durch Dunkelheit, immer wirksam. - Chris Ballance
Ich hätte nichts dagegen, den Port so viel zu ändern, aber ich habe gelernt, dass die meisten Firewalls (außer meinen eigenen) dazu neigen, alle Ports außer den üblichen zu sperren (80, 22, 443, usw.). Wenn ich hinter diesen Firewalls bin, kann ich nicht über diesen nicht standardmäßigen Port zu meinem Heimserver gelangen. Für mich ist das ein Nein. - grieve
@grieve dann ändern Sie unsere Firewall, um diesen Port auszulassen? - Rory
@Roy Ich spreche über andere Firewalls als diejenigen, die ich besitze. Wenn ich zum Beispiel von Starbucks aus in meine Heimmaschine einsteigen möchte, blockiert ihre Firewall den ausgehenden Port. Ich kann das nicht ändern. (Ich habe gerade Starbucks als Beispiel verwendet. Ich habe keine Ahnung, welche Ports sie tatsächlich blockieren oder nicht). - grieve


Wie Chris hervorhebt, benutze Verschlüsselungsschlüssel anstelle von Passwörtern.

Fügen Sie hinzu:

  • Verwenden Sie wo möglich eine Whitelist.

Wie viele Personen oder Standorte (mit Floating Public IPs) müssen Sie wirklich auf Ihre öffentlichen SSH-Verbindungen zugreifen?

Abhängig von der Anzahl der öffentlichen ssh-Hosts, die Sie verwalten, und ob Sie Ihre allgemeinen Verbindungskriterien eingrenzen können, kann es eine einfachere, wartungsfreundliche Konfiguration sein, um den Zugriff auf einige externe Hosts zu beschränken.

Wenn dies für Sie funktioniert, kann es Ihren Verwaltungsaufwand erheblich vereinfachen.


12
2018-05-23 17:36



Whitelisting ist sehr wichtig, wenn Sie irgendeine Art von Blacklisting machen, es sei denn, Sie wollen ausgesperrt werden. - Ryaner
+1 für proaktives Whitelisting. - Chris Ballance
+1 für die absolut beste Antwort. Diese beiden Dinge sind die einzigen vernünftigen Schritte, und sie sind tatsächlich sehr effektiv. Entweder alleine lohnt sich, und beides zusammen mehr. Boo auf der anderen Antworten für Sicherheit durch Dunkelheit! - dwc


Zusätzlich zu den anderen guten Vorschlägen ist es eine sehr einfache Sache, eingehende Verbindungen zu begrenzen. 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

11
2018-05-21 09:04



Ich könnte etwas falsch verstehen, aber viele Mainstream-Browser verbinden zwischen 4-6 Verbindungen gleichzeitig - obwohl der HTTP-Standard es auf 2 setzt. - Joshua Enfield
Ja, das wäre ein Problem, wenn Sie versuchen würden, Port 80 zu Rate zu ziehen. Sie stellen keine Verbindung zu ssh mit Ihrem Webbrowser her und ssh-Sitzungen sind langlebige Sitzungen, die state, nicht kurzlebige Stateless Sessions wie http. Solche SSH-Sessions zu parallelisieren macht keinen Sinn. Das heißt nicht, dass es keinen Nischen-Gebrauch von ssh gibt, dass dies kaputt gehen 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 schnell eine große Anzahl von Verbindungen 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 weiße Liste setzen. Ich denke daran, fail2ban oder sshdfilter zu verwenden, um offensichtliche Angriffe beim ersten Mal zu erfassen, ohne meine legitimen Benutzer zu bestrafen. - paddy
Gut, diese Option auch zu kennen ... - ZEE


Verwenden Sie die Option "AllowUsers" in sshd_config, um sicherzustellen, dass nur eine kleine Gruppe von Benutzern sich überhaupt anmelden kann. Alle anderen werden abgelehnt, auch wenn Benutzername und Passwort korrekt sind.

Sie können Benutzer sogar auf Logins beschränken von ein bestimmter Gastgeber.

z.B.,

AllowUsers user1 user2@host.example.com

Dies reduziert den Suchraum und vermeidet die alten Benutzer, die versehentlich herumliegen oder aktiviert wurden (obwohl diese natürlich sowieso deaktiviert sein sollten, ist dies eine einfache Möglichkeit, sie für SSH-basierte Einträge zu stoppen).

Das stoppt die Brute-Force-Attacken nicht vollständig, hilft aber, das Risiko zu reduzieren.


6
2018-05-27 19:20





Verwenden Sie so etwas mit PF:

Tabelle <ssh-bruce> persistent
Im Schnellprotokoll vom Label ssh_brute blockieren
pass auf $ ext_if proto tcp an ($ ext_if) port ssh moduliere den Status \
        (max-src-conn-rate 3/10, Überlastspülung global)


3
2018-05-04 17:52





Port-Klopfen ist ein ziemlich solider Weg, um so etwas zu verhindern. Etwas fummelig, manchmal nervig, aber es macht das Problem definitiv weg.


2
2018-05-05 15:48



Ich habe das versucht und die Nutzer finden es nervig. Wenn es nur ein oder zwei Leute sind, könnte dies eine gute Option sein und würde Brute-Force-Angriffe fast vollständig ausschließen - Brent


Kontext ist wichtig, aber ich würde etwas ähnliches empfehlen:

  • Da Sie FreeBSD verwenden, sollten Sie die PF-Firewall ausführen und die festen Funktionen zur Begrenzung der Verbindungsrate verwenden. Auf diese Weise können Sie die Brute-Forcers an eine schwarze Liste senden, wenn sie sich häufig anmelden
  • Wenn auf diese Box von außen zugegriffen werden muss, sollten Sie eine PF-rdr-Regel in Betracht ziehen, um den Datenverkehr an Port 22 nicht zuzulassen, sondern einen unbekannten Port dorthin umzuleiten. Das heißt, Sie müssen eine Verbindung zu Port 9122 statt 22 herstellen. Es ist dunkel, aber es hält die Klopfer fern
  • Ziehen Sie in Betracht, nur zur Schlüssel-basierten Authentifizierung überzugehen, wodurch Wörterbuch-Angriffe nutzlos werden

2
2018-04-19 13:16