So stoppen / verhindern Sie SSH-Bruteforce [geschlossen]


22

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 geworden ist. Ich habe einige Pings an den Server gesendet und es ist ein sehr hoher Paketverlust aufgetreten. Danach habe ich ein bisschen gegoogelt und festgestellt, dass es eine gibt auth.log. Ich habe es heruntergeladen und ein bisschen geblättert, 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 mehrmals versucht, sich über SSH anzumelden. Ich habe ein wenig herumgescrollt und festgestellt, 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 100Mbit Backbone, daher scheint die Datenübertragung selbst nicht das Problem zu sein.

Im Moment kann ich auf keinen Fall auf den Server zugreifen.

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


Ich lerne immer noch meine Sachen in dieser Abteilung ... Aber wäre das nicht eine gute Verwendung für das Klopfen von Häfen?
mjrider


Antworten:


37

Wie erhalte ich Zugang?

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

Wenn Ihr Computer angegriffen wird oder stark ausgelastet ist, sollten Sie mit Ihrem Provider über die Einschränkung des Zugriffs (IP-Einschränkungen) oder das Deaktivieren des Servers (Trennen der Verbindung zum Internet) sprechen.

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

Wenn jemand Ihren Server kompromittiert hat, müssen Sie möglicherweise Backups wiederherstellen oder ein Wiederherstellungs-Image verwenden.

So verhindern Sie Angriffe auf Ihren Server, insbesondere auf SSH

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

Lassen Sie sie erst gar nicht an Ihre Maschine! Es gibt viele Möglichkeiten, Brute-Force-Versuche zu stoppen, bevor sie Ihren Host erreichen, oder sogar auf SSH-Ebene.

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

Fail2ban ähnelt DenyHosts, aber im Gegensatz zu DenyHosts, das sich auf SSH konzentriert, kann fail2ban so konfiguriert werden, dass alle Dienste überwacht werden, die Anmeldeversuche in eine Protokolldatei schreiben, und statt /etc/hosts.deny nur zum Blockieren von IP-Adressen / Hosts verwendet werden , fail2ban kann Netfilter / iptables und TCP Wrapper /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 Sie Anfragen bearbeiten (z. B. eth0).
  • Verwenden Sie keine gebräuchlichen Benutzernamen
  • Verwenden Sie eine Zulassungsliste und lassen Sie nur Benutzer zu, 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-Adresse ist ideal, die Beschränkung auf xx0.0 / 16 ist jedoch besser als 0.0.0.0/0
  • Wenn es möglich ist, eine Verbindung ohne Internetzugang herzustellen, können Sie auf diese Weise den gesamten Internetverkehr für SSH ablehnen.
  • Verwenden Sie Software wie fail2ban, um Brute-Force-Angriffe abzuwehren
  • Stellen Sie sicher, dass das Betriebssystem immer auf dem neuesten Stand ist, insbesondere die Sicherheits- und SSH-Pakete

Anwendung:

  • Stellen Sie sicher, dass Ihre Anwendung immer auf dem neuesten Stand ist, insbesondere bei Sicherheitspaketen
  • Sperren Sie die Administrationsseiten Ihrer Anwendung. Viele der oben genannten Ratschläge gelten auch für den Administratorbereich Ihrer Anwendung.
  • Passwort Schützen Sie Ihren Admin-Bereich. So etwas wie htpasswd für die Webkonsole projiziert alle zugrunde liegenden Schwachstellen der Anwendung und schafft eine zusätzliche Eintrittsbarriere
  • Sperren Sie Dateiberechtigungen. 'Upload folder' sind berüchtigt dafür, Einstiegspunkte für alle möglichen bösen Dinge zu sein.
  • Ziehen Sie in Betracht, Ihre Anwendung hinter ein privates Netzwerk zu stellen und nur Ihren Front-End-Load-Balancer und eine Jumpbox bereitzustellen (dies ist eine typische Einrichtung in AWS unter Verwendung von VPCs).

1
Ich habe Fail2ban über help.ubuntu.com/community/Fail2ban installiert. Es scheint sehr leistungsfähig und benutzerfreundlich zu sein (

Ich habe eine Nachricht von meinem Rechenzentrum erhalten: Es gab einen Überflutungsangriff (was ist das?), Wodurch die Verbindung für viele Server sehr schlecht wurde. Es war kein Angriff auf meinen Server.


1
Interessant. Es scheint also, dass mein Rechenzentrum das Ziel des Angriffs war. Aber es ist auch sehr gut zu wissen, dass ich brutal dazu gezwungen wurde. Und Fail2ban ist wirklich ein gutes Werkzeug. Ich werde in den nächsten Tagen etwas über Iptables und SSH Config lesen und versuchen, es viel sicherer zu machen.

3
Konfigurieren Sie openssh, um einen anderen Port als 22 abzuhören, und konfigurieren Sie iptables, um alles zu löschen, was an Port 22 ankommt. Wenn Sie nicht erwarten, von einem anderen Land als Ihrem Heimatland einzusenden , erstellen Sie eine Sperrliste unter countryipblocks.net/country_selection. PHP und verwenden Sie es mit Iptables.
ThoriumBR

4

Wie kann ich diesen Angriff unterdrücken und nachfolgende Angriffe verhindern?

Normalerweise ändere ich den Standard-SSH-Port von 22 auf einen anderen wie 1122. Dadurch werden viele automatische Angriffe von Bot verhindert, aber ein einfacher Port-Scan kann dies erkennen. Sowieso:

vi /etc/ssh/sshd_config

und bearbeite Port 22 bis Port 1122 , aber das ist nicht genug.

Automatische IPTables-Regeln für Bruteforce

Ich verwende stattdessen log2iptables https://github.com/theMiddleBlue/log2iptables Fail2ban , da es sich um ein einfaches Bash-Skript handelt, das jede Protokolldatei mit einem regulären Ausdruck analysiert und iptables ausführt. Wenn zum Beispiel 5 Übereinstimmungen auftreten, löschen log2iptables die spezifische IP-Adresse. Es ist cool, weil Sie die Telegramm-API verwenden und mir eine Nachricht auf meinem Handy senden können, wenn er ein Problem findet :)

hoffe das wird helfen!


8
Aus der Korrelation zwischen der Projekt-URL und Ihrem SF-Handle schätze ich, dass Sie an diesem Projekt beteiligt sind. Bitte beachten Sie unsere Richtlinien zum Referenzieren Ihrer eigenen Produkte, insbesondere die Anforderung, dass " Sie Ihre Zugehörigkeit in Ihren Antworten offenlegen müssen ".
MadHatter unterstützt Monica

1

Ich habe das gerade zusammengestellt und alle 15 Minuten als Cronjob ausgeführt.

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

0

Dies ist meine alternative Lösung für SSH-Angriffe. Die Idee ist, den SSH-Daemon 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


1
Willkommen bei Server Fault! Ihre Antwort schlägt vor, dass eine praktikable Lösung für die Frage über eine andere Website verfügbar ist. Die Fragen- und Antworten-Websites der Stack Exchange-Familie stoßen im Allgemeinen auf diese Art von Antwort, da andere Websites möglicherweise verschoben, gelöscht oder geändert werden. Bitte lesen Sie Wie schreibe ich eine gute Antwort? und überlegen Sie, ob Sie Ihre Antwort dahingehend überarbeiten, dass sie die Schritte enthält, die zur Behebung des Problems erforderlich sind. Und vergessen Sie nicht, die Site-Tour zu machen .
Paul

0

Automatisierte Lösung für Centos / RHEL zur Blockierung von schlechten Darstellern

Hier ist ein Skript für Centos, mit dem ssh-Anmeldefehler sowohl auf ungültige Benutzerkonten als auch auf ungültige 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 das alle 15 Minuten von Roots Crontab aus. Ich habe auch Root-Logins über ssh verboten, so dass die Kombination die Dinge ziemlich ruhig hält.

     #/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

1
Schauen Sie ein fail2ban, das das Gleiche tut und kampferprobt ist.
Patrick Mevzek
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.