Frage Ist es normal, täglich Hunderte Einbruchversuche zu bekommen?


Ich habe gerade meinen Server überprüft /var/log/auth.log und festgestellt, dass ich über 500 fehlgeschlagene Passwort / Einbruchsversuch Benachrichtigungen pro Tag bekomme! Meine Website ist klein und ihre URL ist unklar. Ist das normal? Sollte ich irgendwelche Maßnahmen ergreifen?


196
2018-03-08 11:26


Ursprung


Bis wir alle unnötigen externen Ports gesperrt haben, weiß ich nicht nur, dass wir nicht nur viele Hackerangriffe bekommen haben, sondern eines Tages war es so schlimm, dass wir aus zwei verschiedenen Ländern gehackt wurden - zur gleichen Zeit! Also ja, 100 Einbruchsversuche sind völlig normal. - Django Reinhardt
Wir haben Server, die alle 16 Sekunden eine neue Angriffs- "Sequenz" erleben. Eine einzelne Sequenz ist normalerweise ein Batch von ungefähr 100 Versuchen über verschiedene Ports. Nur zum Spaß habe ich eines Tages einen ungepatchten Server außerhalb unserer Firewall eingeschaltet; es ist weniger als 10 Minuten von dem Zeitpunkt an, an dem es eingeschaltet wurde, damit es pwnd bekommt. Punkt ist das Internet ist wirklich ein Dschungel; Versuche, nicht gefressen zu werden. - NotMe
Ich kann sehen, dass ich meine Frage auf die falsche Seite gestellt habe: superuser.com/questions/200896/ ... - Justin C
Während ich mit anderen übereinstimme, ist dies bei üblichen Ports normal (80, 443). Ich habe diese Versuche gegen meinen SSH-Port praktisch eliminiert, indem ich einfach den Standard-Port von 22 auf etwas Obskures wie 6022 geändert habe. Alleine das zu tun, hat 99% dieser Art von Angriff fast eliminiert. - Kilo
Wenn Sie Ihren SSH-Port ändern, gibt es Sicherheitsgründe, ihn unter Port 1024 zu halten (nur Root kann Ports <1024 öffnen, so dass es Sie vor anderen Benutzern schützt, die SSH entführen). - Brendan Long


Antworten:


Im heutigen Internet ist das leider ganz normal. Es gibt Horden von Botnets, die versuchen, sich bei jedem Server anzumelden, den sie in ganzen IP-Netzwerken finden. In der Regel verwenden sie einfache Wörterbuchangriffe auf bekannte Konten (wie Root- oder bestimmte Anwendungskonten).

Die Angriffsziele werden nicht über Google- oder DNS-Einträge gefunden, aber die Angreifer versuchen einfach jede IP-Adresse in einem bestimmten Subnetz (z. B. von bekannten Root-Server-Hosting-Unternehmen). Es spielt also keine Rolle, dass Ihre URL (daher der DNS-Eintrag) eher unklar ist.

Deshalb ist es so wichtig:

  • Root-Login in SSH nicht zulassen (wie man)
  • Verwenden Sie überall starke Kennwörter (auch in Ihren Webanwendungen)
  • Verwenden Sie für SSH die Public-Key-Authentifizierung, wenn möglich, und deaktivieren Sie das Passwort-Auth vollständig (wie man)

Zusätzlich können Sie installieren fail2ban Das wird das Authlog scannen und wenn es eine bestimmte Anzahl von fehlgeschlagenen Anmeldeversuchen von einer IP findet, wird es fortfahren, diese IP hinzuzufügen /etc/hosts.deny oder iptables / netfilter, um den Angreifer für einige Minuten zu sperren.

Zusätzlich zu den SSH-Angriffen wird es auch üblich, Ihren Webserver nach anfälligen Webanwendungen zu durchsuchen (einige Blogging-Apps, CMS, phpmyadmin usw.). Stellen Sie also sicher, dass diese auch aktuell und sicher konfiguriert sind!


207
2018-03-08 11:35



Anwendungen wie fail2ban können viel dazu beitragen, dass diese Bots "vorrübergehend" verhindern, dass sie zu morgendlichen Zeiten ihren Server treffen :-) Ich habe meinen eingerichtet, um 3 falsche Versuche für 24 Stunden zu verbieten. - emtunc
Und verschiebe sshs Port von 22 auf 222. Das funktioniert ganz gut. - Tom O'Connor
+1, Public-Key-Authentifizierung nur :) - 0xC0000022L
@STATUS_ACCESS_DENIED: Die Aktionen fail2ban takes sind nur Listen von Shell-Befehlen, die ausgeführt werden sollen. So ist es wirklich flexibel und einfach, mit jeder benutzerdefinierten Konfiguration richtig zu arbeiten. Die beste Referenz ist, es herunterzuladen und anzuschauen action.d/iptables.conf. - mattdm
Solche Angreifer zu blockieren ist Zeitverschwendung. Wenn Sie den Root-Login deaktivieren, besteht eine gute Chance, dass niemand Ihren richtigen Login-Namen erraten wird, geschweige denn ein Passwort. SSH selbst ist bereits Rate-limiting Passwort-Anfragen, so dass selbst wenn sie Ihren Benutzernamen kennen (zufällige Bots nicht), wenn Sie ein anständiges Passwort haben, werden sie es nie erraten. - Brendan Long


Ein paar 100 ist in Ordnung ... Letzten Monat fand ich einen meiner Server hatte 40k fehlgeschlagene Versuche. Ich habe die Mühe gemacht, sie zu planen: Karte

Sobald ich den ssh-Port geändert und Port Knocking implementiert habe, fiel die Zahl auf 0 :-)


58
2018-03-08 11:36



Schöne Karte. Ich würde gerne wissen, wie das geht! - jftuga
@jftuga Ich habe zuerst alle IPs von den Logs bekommen. grep 'Failed password' /var/log/secure* | grep sshd | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort | uniq(Entfernen Sie am Ende das | uniq, wenn Sie Duplikate zulassen möchten). Sie können sie dann in eine CSV-Datei einfügen und sie auf zeemaps.com hochladen. Ich habe bessere Karten als meins gesehen, wo sie die Zählung benutzen würden, um die Karte zu färben (grün bis rot für die Anzahl der Versuche pro Landkreis), aber ich habe das nicht herausgefunden - Bart De Vos
Was meinst du mit "implementiertem Port Knocking"? Gibt es eine App, die ich über apt-get installieren kann? Die Zahl, die auf 0 fällt, klingt gut
Sicherheit durch Dunkelheit bekommt einen schlechten Einschlag. Es ist völlig in Ordnung, solange es ist Teil der Gesamtstrategie und nicht der gesamten Strategie. Was ist sonst noch ein Passwort außer einer obskuren Zeichenfolge? - Joel Coel
@ Joel Coel, es ist ein Geheimnis String, im Gegensatz zu der meisten Sicherheit durch Unklarheiten - ein obskurer, aber nicht unbedingt geheimer Prozess. - tobyodavies


Ich benutze zum einen ein "Tarpit" und erlaube nur die Authentifizierung mit öffentlichen Schlüsseln und das Unterbinden von Root-Logins.

Im netfilter da ist ein recent Modul, mit dem Sie arbeiten können (INPUT Kette):

iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --set --name tarpit --rsource
iptables -A INPUT -i if0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 6 --name tarpit --rsource -j DROP
iptables -A INPUT -i if0 -p tcp --dport 22 -j ACCEPT

Was das ist, ist, dass jeder Versuch, eine Verbindung zu Port 22 herzustellen, von der recent Modul mit IP und ein paar andere Sachen unter dem Namen "Tarpit" (wenn Sie neugierig sind, schauen Sie sich an /proc/net/xt_recent/tarpit). Natürlich können Sie andere Namen verwenden.

Verwenden Sie zum Auflisten oder Löschen von IP-Adressen:

echo "+123.123.123.123" > /proc/net/xt_recent/tarpit
echo "-123.123.123.123" > /proc/net/xt_recent/tarpit

Diese Rate begrenzt die Versuche auf 5 in 300 Sekunden. Bitte beachten Sie, dass Benutzer mit einer bestehenden Verbindung von dieser Beschränkung nicht betroffen sind, da sie bereits eine Verbindung aufgebaut haben und mehr (auch über der Gebührengrenze) anlegen dürfen.

Passen Sie die Regeln Ihren Wünschen an, stellen Sie jedoch sicher, dass sie in dieser Reihenfolge hinzugefügt werden (d. H. Beim Hinzufügen, dann verwenden Sie sie in dieser Reihenfolge, beim Einfügen dann in umgekehrter Reihenfolge).

Dies reduziert den Lärm immens. Es bietet auch tatsächliche Sicherheit (gegen Brute-Forcing) im Gegensatz zu der vermeintlichen Sicherheit, den Port zu ändern. Ich würde jedoch empfehlen, den Port zu ändern, wenn dies in Ihrer Umgebung möglich ist. Es wird auch den Geräuschpegel stark reduzieren ...

Sie können dies immer noch mit fail2ban kombinieren, obwohl ich ohne es und nur die oben genannten Regeln gut gelaufen bin.

BEARBEITEN:

Es ist möglich, sich selbst zu sperren, so dass Sie etwas wie das Folgende hinzufügen können, mit dem Sie Ihr Verbot deaktivieren können, indem Sie an einen bestimmten Port klopfen:

iptables -A INPUT -i if0 -p tcp --dport <knockport> -m state --state NEW -m recent --name tarpit --remove

29
2018-03-08 14:24



Ich benutze dies und schaffe es, mich gelegentlich zu blockieren, also setze gerne einen anderen Port auf, an den du "klopfen" kannst, um dein Verbot zu löschen. - benlumley
@benlumley: guter Punkt. Port-Klopfen kann ähnlich nützlich sein, um den Standard-Port zu ändern - oder sogar beides in Kombination ... - 0xC0000022L
@benlumley: habe deinen Kommentar gesehen (jetzt von Sam entfernt). Es macht mir nichts aus, wenn die Antwort bearbeitet / verbessert wird;) - 0xC0000022L


Sie könnten implementieren fail2banoder ähnliche Methoden wie das Sperren von SSH mit Ihrer IP. Leider versuchen Bots die ganze Zeit Zugriff zu haben, also ist das ganz normal. Sie müssen sicherstellen, dass Sie ein gutes Passwort haben.


15
2018-03-08 11:32



Wenn Sie SSH verwenden, sollten Sie die Authentifizierung mit öffentlichen Schlüsseln in Erwägung ziehen. Dies ist ein wenig sicherer als die Passwort-Authentifizierung. - Piskvor


Ja. Das ist heutzutage normal.

Verwenden Sie nach Möglichkeit nur die Authentifizierung mit öffentlichen Schlüsseln für administrative Zwecke. Generiere einen privaten Schlüssel auf deiner Workstation:

$ ssh-keygen -t dsa

Kopieren Sie den Inhalt von ~ / .ssh / id_dsa.pub zu deinen Servern ~ / .ssh / authorized_keys (und /root/.ssh/authorized_keys, falls Sie eine direkte root-Anmeldung benötigen).

Konfigurieren Sie Ihre Server / etc / ssh / sshd_config Nur Authentifizierung mit öffentlichem Schlüssel akzeptieren:

PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin without-password

Wenn Sie zu viele Server haben, können Sie verwenden Marionette um öffentliche Schlüssel und Konfigurationen für sie auszuführen.

Einblick in Denyhosts und fail2ban um wiederholte SSH-Login-Versuche zu blockieren und zu sehen Schnauben wenn Sie ein vollständiges IDS / IPS benötigen.


12
2018-03-09 23:32



Ich würde nicht empfehlen, die Authentifizierung mit öffentlichen Schlüsseln in SSH für Shell-Zugriff auf Ihren Server zu verwenden. Wenn Ihre Workstation kompromittiert oder, noch schlimmer, gestohlen wird, hat nun jemand Zugriff auf Ihre Server, ohne dass ein Passwort erforderlich ist. Die Authentifizierung mit öffentlichen Schlüsseln eignet sich eher für Situationen, in denen Sie ein Skript oder ein Programm benötigen, um SSH-Zugriff auf ein anderes System zu haben, ohne ein Kennwort zu benötigen, sodass Sie keine Klartextkennwörter in Ihr Skript / Programm einbetten müssen. - Registered User
@Deleted Account: Sie können eine Passphrase für den privaten SSH-Schlüssel festlegen. - Phil Cohen
Der Kommentar "Registrierter Benutzer" ist fehlgeleitet. Zur Klarstellung: Legen Sie immer ein gutes Passwort für Ihren privaten Schlüssel fest und speichern Sie den privaten Schlüssel nicht auf Servern. Behalten Sie den privaten Schlüssel auf Ihrer eigenen Workstation. Nachdem Sie den Schlüssel einem ssh-agent-Programm hinzugefügt und Ihr Kennwort eingegeben haben, können Sie sich bei jedem System anmelden, auf dem der öffentliche Schlüssel installiert ist, ohne dass Sie das Kennwort erneut eingeben müssen. Aktivieren Sie die Agentenweiterleitung in Ihrem ssh-Client, damit Sie sich von Server zu Server anmelden können. Der Diebstahl Ihres privaten Schlüssels ist schlecht, aber mit einem anständigen Passwort ist es nicht so schlimm wie ein gestohlenes Passwort. - Martijn Heemels
Richtig, denken Sie nicht einmal daran, die privaten Schlüssel des Administrators unverschlüsselt zu speichern. - yarek


benutzen http://denyhosts.sourceforge.net/

und ja, Sie sollten Public-Key-Authentifizierung verwenden und Passwortauth deaktivieren.


8
2018-03-09 09:37



Die Deaktivierung der Kennwortauth ist nicht immer eine praktikable Lösung. - Publiccert


Die Versuche sind mechanisiert, so dass die Zahlen in Ordnung zu sein scheinen (ja, sie sind hoch im Vergleich zu einigen Websites und die niedrigen im Vergleich zu anderen). Sie sollten die folgenden Schritte ausführen: Sie betrachten Ihre Websites jeden Tag als Angriffsziele, auch wenn Sie keinen Angriff erkennen. keinen Angriff zu entdecken, bedeutet nicht, dass es nicht existiert.


6
2018-03-08 11:33