it-swarm.com.de

So stoppen / verhindern Sie SSH Bruteforce

Ich bin sehr neu in der Netzwerkadministration. Bitte beachten Sie, dass ich noch nicht so erfahren bin.

Ich habe einen Ubuntu-Root-Server mit Plesk-Panel.

Gestern haben meine Freunde und ich festgestellt, dass die Sprachqualität auf unserem TS3 sehr schlecht wurde. Ich habe einige Pings an den Server gesendet und es gab einen sehr hohen Paketverlust. Danach habe ich ein bisschen gegoogelt und herausgefunden, dass es einen auth.log Gibt. Ich habe es heruntergeladen und ein bisschen gescrollt, dann habe ich folgendes gefunden:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Es scheint, als hätte jemand viele Male versucht, sich über SSH anzumelden. Ich habe ein bisschen gescrollt und gesehen, dass dieser jemand versucht, viele verschiedene Benutzernamen zu verwenden: student, tech, psi, news,...

Hunderte dieser Anmeldungen wurden in der Datei angezeigt.

Ich habe die Verkehrsstatistik auf der Website meines Rechenzentrums nachgeschlagen. Es war nur bei 17 MB pro Stunde. Ich habe ein 100-Mbit-Backbone, daher scheint die Datenübertragung selbst nicht das Problem zu sein.

Im Moment kann ich in keiner Weise auf den Server zugreifen.

Meine Frage ist: Wie kann ich wieder Zugang bekommen, wie kann ich diesen Angriff unterdrücken und folgende Angriffe verhindern?

23
user219534

Wie erhalte ich Zugang?

Es ist nicht klar, warum Sie nicht auf Ihr Konto zugreifen können.

Wenn Ihr Computer angegriffen oder stark ausgelastet ist, sollten Sie mit Ihrem Anbieter über die Einschränkung des Zugriffs (IP-Einschränkungen) oder das Offline-Schalten des Servers (Verbindung zum Internet trennen) sprechen.

Möglicherweise benötigen Sie auch einen Out-of-Band-Zugriff, bei dem Ihr Provider möglicherweise helfen kann.

Wenn jemand Ihren Server kompromittiert hat, müssen Sie möglicherweise aus Sicherungen wiederherstellen oder ein Wiederherstellungsimage verwenden.

So verhindern Sie Angriffe auf Ihren Server, insbesondere SSH

bester Weg, um Brute-Force-Anmeldungen zu verhindern?

Lassen Sie sie überhaupt nicht an Ihre Maschine gelangen! Es gibt viele Möglichkeiten, Brute-Force-Versuche zu stoppen, bevor sie zu Ihrem Host oder sogar auf SSH-Ebene gelangen.

Trotzdem ist es eine großartige Idee, Ihr Betriebssystem mit etwas wie fail2ban zu schützen. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban ähnelt DenyHosts ... Im Gegensatz zu DenyHosts, das sich auf SSH konzentriert, kann fail2ban so konfiguriert werden, dass jeder Dienst überwacht wird, der Anmeldeversuche in eine Protokolldatei schreibt, und statt /etc/hosts.deny nur IP-Adressen/Hosts blockiert , fail2ban kann Netfilter/iptables und TCP Wrappers /etc/hosts.deny) verwenden.

Es gibt eine Reihe wichtiger Sicherheitstechniken, die Sie berücksichtigen sollten, um Brute-Force-Anmeldungen zu verhindern:

SSH:

  • Erlaube root nicht, sich anzumelden
  • SSH-Passwörter nicht zulassen (Authentifizierung mit privatem Schlüssel verwenden)
  • Hören Sie nicht auf jede Schnittstelle
  • Erstellen Sie eine Netzwerkschnittstelle für SSH (z. B. eth1), die sich von der Schnittstelle unterscheidet, von der aus Sie Anforderungen bedienen (z. B. eth0).
  • Verwenden Sie keine gebräuchlichen Benutzernamen
  • Verwenden Sie eine Zulassungsliste und erlauben Sie nur Benutzern, die SSH-Zugriff benötigen
  • Wenn Sie einen Internetzugang benötigen ... Beschränken Sie den Zugriff auf eine begrenzte Anzahl von IP-Adressen. Eine statische IP ist ideal, jedoch ist das Sperren auf x.x.0.0/16 besser als 0.0.0.0/0
  • Wenn möglich, finden Sie eine Möglichkeit, eine Verbindung ohne Internetzugang herzustellen. Auf diese Weise können Sie den gesamten Internetverkehr für SSH verweigern (z. B. können Sie mit AWS eine direkte Verbindung erhalten, die das Internet umgeht und als direkte Verbindung bezeichnet wird).
  • Verwenden Sie Software wie fail2ban, um Brute-Force-Angriffe abzuwehren
  • Stellen Sie sicher, dass das Betriebssystem immer auf dem neuesten Stand ist, insbesondere Sicherheits- und SSH-Pakete

Anwendung:

  • Stellen Sie sicher, dass Ihre Anwendung immer auf dem neuesten Stand ist, insbesondere Sicherheitspakete
  • Sperren Sie die Administrationsseiten Ihrer Anwendung. Viele der oben genannten Ratschläge gelten auch für den Administrationsbereich Ihrer Anwendung.
  • Passwort Schützen Sie Ihren Administratorbereich. So etwas wie htpasswd für die Webkonsole projiziert alle zugrunde liegenden Anwendungsschwachstellen und schafft eine zusätzliche Eintrittsbarriere
  • Sperren Sie Dateiberechtigungen. 'Upload-Ordner' sind bekannt dafür, Einstiegspunkte für alle möglichen bösen Dinge zu sein.
  • Stellen Sie Ihre Anwendung möglicherweise hinter ein privates Netzwerk und stellen Sie nur Ihren Front-End-Load-Balancer und eine Jumpbox bereit (dies ist ein typisches Setup in AWS mit VPCs).
39
Drew Khoury

wie kann ich diesen Angriff unterdrücken und folgende Angriffe verhindern?

Normalerweise ändere ich den Standard-SSH-Port von 22 auf einen anderen wie 1122. Dies verhindert viele automatische Angriffe von Bot, aber ein einfacher Port-Scan kann ihn erkennen. Wie auch immer:

vi /etc/ssh/sshd_config

und bearbeiten Sie Port 22 zu Port 1122 , aber das reicht nicht aus.

Automatische IPTables-Regeln für Bruteforce

ich benutze log2iptables https://github.com/theMiddleBlue/log2iptables stattdessen Fail2ban, weil es ein einfaches Bash-Skript ist, das analysiert Jede Protokolldatei mit einem regulären Ausdruck und führen Sie iptables aus. Wenn beispielsweise 5 Übereinstimmungen auftreten, löschen log2iptables die spezifische IP-Adresse. Es ist cool, weil ich die Telegramm-API verwende und mir eine Nachricht auf meinem Handy senden kann, wenn er ein Problem findet :)

hoffe das wird helfen!

4
theMiddle

Ich habe das gerade zusammengestellt, laufe alle 15 Minuten als Cronjob usw.:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    Sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    Sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    Sudo chmod 644 /etc/hosts.deny
  fi
done
2
Mark

Automatisierte Lösung für Centos/RHEL zum Blockieren fehlerhafter Akteure

Hier ist ein Skript für Centos, mit dem fehlgeschlagene SSH-Anmeldungen sowohl auf ungültige Benutzerkonten als auch auf falsche Kennwörter für gültige Konten überprüft werden können. Wenn die Quell-IP uns mehr als dreimal getroffen hat und nicht bereits auf der Verweigerungsliste steht, wird sie der Verweigerungsliste hinzugefügt. Ich führe dies alle 15 Minuten von Roots Crontab aus. Ich habe auch Root-Anmeldungen über ssh nicht zugelassen, daher hält die Kombination die Dinge ziemlich ruhig.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done
0
David Lash

Dies ist meine alternative Lösung für SSH-Angriffe. Die Idee ist, den SSH-Daemon weiterhin zu schließen, wenn er nicht verwendet wird. Kein offener Port, kein Angriff. Du kannst es versuchen. Es ist Open Source https://github.com/indy99/nnet_port_guard

0
indy99