Wie kann ich IP-Adressen von möglichen SSH-Angreifern abrufen?


17

Ich habe mich gerade cat /var/log/auth.logangemeldet und festgestellt, dass es viele | grep "Failed password for"Datensätze gibt.

Es gibt jedoch zwei mögliche Datensatztypen - für einen gültigen / ungültigen Benutzer. Es erschwert meine Versuche, | cutsie.

Ich würde gerne eine Liste (Textdatei) mit den IP-Adressen möglicher Angreifer und der Anzahl der Versuche für jede IP-Adresse erstellen. Gibt es eine einfache Möglichkeit, es zu erstellen?

Außerdem nur in Bezug auf ssh: Was für Aufzeichnungen /var/log/auth.logsollte ich berücksichtigen, wenn ich eine Liste möglicher Angreifer erstelle?

Beispiel für mein 'auth.log' mit versteckten Zahlen:

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

Ergebnis:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1

Ich schlage vor, Sie erstellen SSH-Schlüssel, installieren sie auf Ihrem Server und deaktivieren die Passwörter vollständig in der SSHD-Konfigurationsdatei Ihres Servers /etc/ssh/sshd_config... Einstellungen für die Suche PasswordAuthentication nound PermitRootLogin without-password ... dann werden alle derartigen Passwortversuche vereitelt, bevor Sie jemals in die Datei auth.log eintreten ...
Scott Stensland

Antworten:


19

Sie könnten so etwas verwenden:

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

Es greift nach dem String Failed password forund extrahiert ( -o) die IP-Adresse. Es ist sortiert und uniqzählt die Anzahl der Vorkommen.

Die Ausgabe würde dann so aussehen (mit Ihrem Beispiel als Eingabedatei):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

Der letzte in der Ausgabe hat es 6 Mal versucht.


Dies ist die beste Antwort @chaos - meiner Schachtel mit nützlichen Onelinern hinzugefügt - danke!
Jake

Großartige Lösung. Ich wusste nicht, dass grep Regex-Übereinstimmungen extrahieren kann, nicht nur Zeilen filtern. Ich habe gerade | sort -ndie Kette hinzugefügt .
Kravemir

1
Gute Antwort - mehrere Greps sind normalerweise ein Zeichen, sed zu benutzen. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'ersetzt beide greps.
Orion

1
@orion stimmt aber stell dir vor, dass das erste grep auch sein kann zgrep "Failed" /var/log/auth.log*, auch die komprimierten Logarchive zu durchsuchen, was sednicht geht.
Chaos

1
Was ist mit IPv6?
Ortomala Lokni

6

Es könnte eine aufgeblähte Lösung sein, aber ich schlage vor, Sie versuchen etwas wie Fail2Ban zu installieren

Diese Art der Protokollierung bietet den Vorteil, dass Sie (temporäre) Regeln in Ihre Firewall einfügen können, um sich wiederholende Täter zu blockieren. Stellen Sie jedoch sicher, dass Sie Ihre eigenen IP-Adressen auf die Whitelist setzen. Ich habe es nur gelegentlich geschafft, mich vorübergehend auszuschließen


Naja, netter Kommentar, aber keine Antwort auf die Frage. Es ist eher ein Vorschlag, der die Notwendigkeit von Fragen beseitigen könnte, aber ich brauche keinen Dämon, um meine Dateien zu überwachen. Ich habe meine Gründe, warum ich diese Liste als Textdatei nur durch Skripte erstellen muss. :)
kravemir

Ich stimme @Miro zu, hätten Sie es hier nicht erwähnt, hätte ich es in einem Kommentar hinzugefügt.
SailorCire

@Miro, du hast recht, keine Antwort auf die Frage selbst, es kam mir nur als praktisches Werkzeug für diese Art der Protokollierung in den Sinn.
Jake

0

Das hat für mich sehr gut geklappt. (IPs wurden geändert, um die Schuldigen zu schützen)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4

0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u

Das Ergebnis ist password- funktioniert nicht. Es werden nicht einmal verschiedene Eintragsarten behandelt, die awkDruckspalte ist eine Alternative zur cut, nicht die Lösung.
Kravemir

Es funktioniert für mich entweder mit Beispiel oben oder real /var/log/auth.log
Archemar

Nun, es hat vor der Bearbeitung nicht funktioniert - als der Kommentar abgegeben wurde. Jetzt funktioniert es richtig. Es fehlt jedoch uniq -cwie in der besten Antwort.
Kravemir
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.