Protokollierung von SSH-Zugriffsversuchen

60

Ich habe einen Ubuntu-Server mit openssh konfiguriert, um eine Verbindung zu ihm herzustellen und Befehle von einem entfernten System wie einem Telefon oder einem Laptop auszuführen. Das Problem ist ... ich bin wahrscheinlich nicht der einzige.

Gibt es eine Möglichkeit, alle Anmeldeversuche zu ermitteln, die auf dem Server durchgeführt wurden?

UserK
quelle
Sie sollten auch in Betracht ziehen, sshd auf einem nicht standardmäßigen Port auszuführen. Es ist auch möglich, iptables einzurichten, um neue Verbindungsversuche zu verweigern, wenn eine einzelne IP-Adresse X-mal in einer Minute versucht, eine neue SSH-Verbindung herzustellen.
Ivanivan
Für mich war das Problem nicht fail2ban, sondern sshguard, etwas, von dem ich noch nie gehört hatte
Ray Foss

Antworten:

55

Auf Ubuntu-Servern finden Sie in der Datei, wer sich wann (und von wo) angemeldet hat /var/log/auth.log. Dort finden Sie Einträge wie:

May  1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)
Anthon
quelle
2
Hat Ubuntu aus Neugier den lastbBefehl ?
Bratchley
1
@JoelDavis Mein Ubuntu 12.04 funktioniert, aber die Ausgabe ist eine einzelne Zeile, die überhaupt nicht wie Ihre Ausgabe aussieht. Vielleicht muss es konfiguriert werden.
Anthon
Ist das relevant ?
Bratchley
Auf Ubuntu Server 14.04 und höher sollte dies lauten/var/log/auth.log
Serge Stroobandt
29

Auf Red Hat-basierten Distributionen wie Fedora / CentOS / RHEL können Sie überprüfen, ob Benutzer in der Datei angemeldet sind /var/log/secure.

Wenn Sie weitere Informationen benötigen, lesen Sie die SuperUser-Fragen und Antworten mit dem Titel: Wie kann ich SSH-Zugriffsversuche protokollieren und verfolgen, was SSH-Benutzer auf meinem Server tun? .

Ramesh
quelle
1
Auf /var/log/securekeinem meiner Ubuntu-Systeme gibt es eine.
Anthon
@Anthon, überraschenderweise habe ich das nicht /var/log/authin meinen Systemen. Aus diesem Grund habe ich vor dem Posten der Antwort überprüft, ob sich /var/log/secureauf meinem System ein Ubuntu-Server befindet :)
Ramesh
Ich hatte 14.04, 12.04 und und alte Maschine unter 8.04 überprüft. Welche Version laufen Sie? Hast du etwas Besonderes getan, um diese Datei zu bekommen?
Anthon
@Anthon, es stellte sich heraus, dass der Server, auf dem ich getestet habe, RHEL war. Die Antwort in dem Link, den ich bereitgestellt hatte, war jedoch für Ubuntu, was seltsam erscheint, da Sie 3 Ubuntu-Variationen überprüft hatten und es keine gibt /var/log/secure.
Ramesh
6
/var/log/secureist ein Fedora / CentOS / RHEL ism.
slm
8

Unter Ubuntu können Sie sich über SSH anmelden und den Linux-Befehl tail verwenden, um die letzten x Zeilen Ihrer /var/log/auth.logDatei anzuzeigen . Wenn Sie über SSH angemeldet sind, verwenden Sie den folgenden Befehl, um die letzten 100 Zeilen Ihres SSH-Protokolls anzuzeigen:

tail /var/log/auth.log -n 100

oder noch sauberer

tail -100 /var/log/auth.log | grep 'sshd'
WebComer
quelle
7

Beachten Sie, dass die Standardkonfiguration unter Ubuntu darin besteht, SSH-Anmeldungen NICHT in der /var/log/authDatei zu protokollieren . Dies ist die INFOProtokollierungsstufe.

Wenn Sie haben wollen , es Login - Versuche in der Protokolldatei enthalten, werden Sie müssen die bearbeitende /etc/ssh/sshd_configDatei (als root oder mit sudo) und der Änderung LogLevelvon INFOzu VERBOSE.

Starten Sie danach den sshd-Daemon mit neu

sudo service rsyslog restart

Danach werden die SSH-Anmeldeversuche in der /var/log/auth.logDatei protokolliert .

Shay Walters
quelle
4

Meine Empfehlung ist die Verwendung von auditd . Dies ist die Protokollierung mit dem Audit-Subsystem des Linux-Kernels und meiner Meinung nach der richtige Weg, dies zu tun, wenn Sie es ernst meinen. Und angesichts der Art der Sicherheitsfrage sollten Sie auch PAM verwenden . Bei der Standardstufe, bei der nur auditd und PAM installiert sind, sollten automatisch alle erfolgreichen und erfolglosen SSH-Versuche in Ihrer audit.log-Datei protokolliert werden. Sie müssen also wirklich nichts konfigurieren, sondern müssen nur auditd und PAM installieren. Ich kenne das aus erster Hand für SLES. Und würde wetten, RHEL und jede andere Enterprise- Version von Linux würden ähnlich funktionieren.

http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html

Innerhalb des von auditd generierten unformatierten Überwachungsprotokolls können Sie entweder eine Art aureportFilter verwenden, die in den auditd- Manpages beschrieben ist, einen eigenen Textparser schreiben oder einfach VI verwenden und nach Stichwörtern suchen.

hier ist eine /var/log/audit/audit.logausnahme meiner datei mit der ich auf meinen linux server ssh'ing.

node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
  • Von oben ist mein Servername Hai .
  • Viele solcher Zeilen befinden sich in audit.log. Ich möchte, dass diese auf exe = "/ usr / sbin / sshd" basiert.
  • Die UID des Kontos, in das ssh'd wird, ist der Wert von auid, der in diesem Beispiel 23456 beträgt
  • Der Name des mit auid verknüpften Benutzerkontos wird durch acct = "ron" angegeben.
  • In den meisten Fällen zeichnet das Prüfsystem den DNS-Hostnamen des Systems auf, das versucht, eine Verbindung herzustellen, aber es hat immer seine IP-Adresse
  • das Datum des Eintrags, der in Epoche Zeit, so dass Sie etwas , das über umwandeln müssen werden wie date --date @1480622612.317die in Ergebnisse Thu Dec 1 15:03:32 EST 2016und ist , wenn ich in meinen Server ssh'd.

Wann res=failedmöchten Sie diese IP-Adressen und Hostnamen untersuchen, um festzustellen, welche Systeme versucht haben, unter welchem ​​Benutzernamen eine Verbindung herzustellen? Und offensichtlich versucht der erfolgreiche SSH zu verstehen, was auf Ihrem System passiert - zum Beispiel Ihr Kollege Bob, der jeden Tag mit Hostname = Bobcomputer und IP-Adresse = 192.168.5.5 am selben Schreibtisch sitzt; Wenn Sie gestern um 2 Uhr einen erfolgreichen SSH-Versuch unter seinem Benutzernamen von der IP-Adresse 10.10.5.6 sehen, ist es möglicherweise in Ihrem Interesse, mit Bob zu sprechen, um dies zu untersuchen. Möglicher Hackversuch von jemand anderem? Und kurz danach gibt es su Versuche, sich im Audit-Log von Bob's Account aus zu verankern?

wenn Sie sehen , sich wiederholende res=failedund auid=0und acct=rootdann ist das jemand ssh in die Box in den Root - Account versuchen, und ist , wenn Sie ändern /etc/hosts.denymit dieser IP - Adresse für SSHD.

Ron
quelle
2

Ich weiß, dass dies alt ist, aber ich habe etwas geschrieben, um erfolgreiche und fehlgeschlagene SSH-Verbindungen / Versuche zu überwachen. Sowie gesperrte IPs, wenn Sie sshguard verwenden. Die Software ist in Python geschrieben. Sie erhalten eine E-Mail, wenn eine Verbindung über ssh erfolgreich hergestellt wurde, wenn jemand ein falsches ssh-Passwort hat oder wenn jemand aufgrund vieler fehlgeschlagener Versuche gesperrt wurde. Hoffentlich hilft dies jemandem in der Zukunft, der nach diesem Problem sucht und meinen Code findet!

https://github.com/amboxer21/SSHMonitor

Für das Python-Skript habe ich ein Bash-Skript geschrieben, um den Prozess zu überwachen. Es prüft, ob es jede Minute über eine Root-Cron-Task ausgeführt wird. Wenn es nicht läuft, startet es einen anderen Prozess. Was jede Minute von einem Root- Cron-Task aufgerufen wird .

Aguevara
quelle
-2

Das Beste, was ich je bei der Protokollierung von SSH-Befehlen gesehen habe, ist rootsh. Mit diesem Tool kann der Administrator jeden Befehl aus jeder Sitzung mit einer umfassenden Protokollierungsstufe abrufen.

Ich habe ein Skript geschrieben, um ROOTSH in Ubuntu und CentOS / RHEL zu installieren und zu konfigurieren

Download von Github hier ist der Link

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
Mansur Ali
quelle
Ich denke, dies ist ein schlechter Weg, um Ihr Github-Profil zu promoten. Grundsätzlich möchten Sie ein Skript aus dem Web herunterladen und es mit root ausführen. Abgestimmt
UserK
Ich bewerbe mein Github-Profil nicht. Ich habe nur versucht, die Dinge zu vereinfachen, wie es die Leute oben tun, wenn du mich dafür abstimmst, dass ich das Profil bewerbe, indem du sie ebenfalls abstimmst. Darüber hinaus ist im Regelwerk für den Stapelaustausch nichts so geschrieben, dass wir keine Codedateien aus persönlichen Repositorys freigeben können.
Mansur Ali
Bitte vergib mir meinen schlechten Sinn für Humor. Zunächst einmal vielen Dank für die Antwort Mansur. Die Ablehnung ergibt sich aus der Tatsache, dass Sie als Root-Benutzer eine Reihe unbekannter Befehle ausführen möchten. Das letzte Mal, als ich es getan habe, war ein 'rm-R-Schrägstrich' im Inneren.
UserK
1
Übrigens, Stack-Exchange erlaubt mir nicht, so lange Codes zu schreiben. Deshalb habe ich dieses Skript in meine Antwort aufgenommen. Linux ist sehr einfach.
Mansur Ali