Wie kann ich Benutzer und Zugriffsversuche auf SSH auf meinem Server überwachen?

28

Ich hatte ein paar Sicherheitsprobleme mit einem Server von mir, ein paar SSH-Benutzer haben Feuer gelegt, auch bekannt als Probleme.

Ich würde gerne:

  • Verfolgen Sie Benutzeranmeldungen und Abmeldungen
  • Verfolgen Sie die Aktivitäten dieser SSH, um böswillige Aktivitäten zu entdecken
  • Verhindern, dass Benutzer Protokolle löschen

Ich bin kein großer Systemadministrator und in dieser Angelegenheit ziemlich unerfahren. Daher wäre jeder Rat sehr willkommen und sehr hilfreich. :)

RadiantHex
quelle

Antworten:

27

Da es sich um SSH-Server handelt, gebe ich Ihnen Befehlszeilenlösungen.

  • Verfolgen Sie Benutzeranmeldungen und Abmeldungen. Das ist ganz einfach, die Datei /var/log/auth.logsollte diese Informationen enthalten.

  • Verfolgen Sie die Aktivitäten dieser Benutzer: Wenn sie ziemlich unschuldig sind, können Sie die Datei .bash_historyin ihrem Ausgangsverzeichnis überprüfen . Sie sehen eine Liste der Befehle, die sie ausgeführt haben. Das Problem ist natürlich, dass sie diese Datei löschen oder bearbeiten können.

  • Verhindern, dass Benutzer Protokolle löschen: Benutzer sollten nicht in der Lage sein, zu berühren auth.log. Um zu verhindern, dass sie mit .bash_historydir spielen, musst du ein paar Tricks machen .

  • Was ist, wenn der Benutzer Root-Zugriff erhält? : Du bist beschissen. Wenn sie keinen Fehler machen, können sie alle ihre Schritte verbergen.

Javier Rivera
quelle
Beachten Sie, dass Benutzer nicht daran gehindert werden können, unset HISTFILEinnerhalb von Bash zu tippen. In diesem Fall wird der Bash-Verlauf nicht aufgezeichnet.
Gilles 'SO- hör auf böse zu sein'
@ Gilles, lies bitte den Tricks-Link. Sie setzen HITSFILE als schreibgeschützte Variable in .profile.
Javier Rivera
Ich dachte, Sie könnten eine readonly-Variable in einer nicht eingeschränkten Bash deaktivieren, aber anscheinend nicht. Dies verbessert die Rückverfolgbarkeit ein wenig, da beim Starten einer anderen Shell (die nicht liest ~/.bash_historyoder ~/.bashrc) angezeigt wird $HISTFILE. Dies kann jedoch durchaus legitim sein (z. B. wenn der Benutzer nur ausführen zshoder alternativ eine eigene Option festlegen möchte bashrc).
Gilles 'SO- hör auf böse zu sein'
1
Ja. Sie können ihn auf Bash oder eine andere Shell beschränken. Sicherheit ist doch nur ein Rennen.
Javier Rivera
Es ist nicht wahr, dass Benutzer, die Root-Zugriff erhalten, alle Schritte ausblenden können. Sie können für die Prüfung immer einen externen Server verwenden, auf dem alle Schritte aufgezeichnet werden, einschließlich des Root-Status.
Petr
6

[HAFTUNGSAUSSCHLUSS] Mir ist klar, dass ich zu spät zur Party , aber ich möchte eine Antwort einfügen, die ich auf eine andere Frage gegeben habe , da ich der Meinung bin, dass sie den Lesern einen guten Einblick bieten kann, und diese Frage scheint der Ansprechpartner zu sein platz für grundlegende ssh info.

Es gab ein ähnliches Problem, das mir auffiel , nachdem ich diese Frage hier auf AskUbuntu gelesen und meinen VPS überprüft hatte, nur um eine Unmenge von Brute-Force-Versuchen zu sehen. Dann habe ich beschlossen, etwas zu unternehmen.

Wenn Sie nun gemäß der Frage, auf die ich verlinkt habe, fehlgeschlagene Anmeldeversuche auf Ihrem Computer über ssh sehen möchten (möglicherweise Brute-Force-Versuche oder ähnliches), geben Sie Folgendes ein:

grep sshd.\*Failed /var/log/auth.log | less

Wenn die Ausgabe aus mehreren Zeilen besteht, d. H. Aus vielen Brute-Force-Versuchen, insbesondere, wenn sie zwischen kurzen Intervallen stattgefunden haben, möchten Sie möglicherweise die folgenden Aktionen ausführen:

Ändern Sie die SSH-Konfigurationsdatei

Öffnen Sie dazu die Datei unter / etc / ssh / sshd_config mit Ihrem bevorzugten Editor vim /etc/ssh/sshd_config.

1. Versuchen Sie, ssh von Port 22 zu verschieben : Suchen Sie nun die folgende Zeile:

# What ports, IPs and protocols we listen for
Port 22

und kommentieren Sie Port 22 aus und verwenden Sie jeden, den Sie mögen könnten. Beispiel:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

Bitte beachten Sie, dass Ports unter 1024 eine spezielle (Root-) Berechtigung benötigen. Ich weiß nicht, wie das stören könnte, aber ich sage nur.

2. Deaktivieren Sie Root-Anmeldungen über ssh : Da der Root-Benutzername vorhersehbar ist und vollständigen Zugriff auf Ihr System bietet, ist es unklug, uneingeschränkt über SSH auf dieses Konto zuzugreifen. Suchen Sie die Zeile PermitRootLogin und setzen Sie sie auf no .

PermitRootLogin no

3. Deaktivieren Sie die Kennwortauthentifizierung : Generieren Sie SSH-Schlüssel und verwenden Sie sie, um sich bei Ihrem System anzumelden. Ohne aktivierte Passwörter müssen Angreifer Ihren privaten SSH-Schlüssel erraten (oder stehlen), um Zugriff auf Ihren Server zu erhalten. Etwas, das sehr, sehr schwierig ist. Suchen Sie die Zeile mit der Aufschrift PasswordAuthentication und setzen Sie sie auf no

PasswordAuthentication no

!WARNUNG! Bevor Sie dies tun, wenden Sie sich bitte diese Anleitung hier , wie die Zertifikatsauthentifizierung einzurichten.

HINWEIS: Nachdem Sie die Änderungen vorgenommen haben, verwenden Sie sudo /etc/init.d/ssh restart. So stellen Sie über ssh eine Verbindung zu einem anderen Port her:ssh [email protected] -p <port_number> .

Richten Sie eine Firewall ein

In diesem Handbuch erfahren Sie, wie Sie die äußerst leistungsfähige und effektive Firewall einrichten, die in Linux, IPTables , integriert ist .

Richten Sie Skripte ein, um Sie bei der Sicherheit zu unterstützen

Eine, die ich persönlich benutze und die mir schnell einfällt, ist Fail2Ban . Fail2ban überwacht Ihre Protokolldateien auf fehlgeschlagene Anmeldeversuche. Nachdem eine IP-Adresse die maximale Anzahl von Authentifizierungsversuchen überschritten hat, wird sie auf Netzwerkebene blockiert und das Ereignis wird angemeldet /var/log/fail2ban.log. So installieren Sie es:sudo apt-get install fail2ban

Befehlshistorie über ssh prüfen

Es gibt einen Linux-Befehl mit dem Namen history, mit dem Sie sehen können, welche Befehle bis zu diesem Zeitpunkt eingegeben wurden. Versuchen Sie, historyein Terminal einzugeben, um alle Befehle bis zu diesem Zeitpunkt anzuzeigen. Es könnte helfen, wenn Sie root wären .

Um nach einem bestimmten Befehl zu suchen, versuchen Sie:history | grep command-name

So listen Sie alle Befehle nach ssh auf :fc -l ssh

Sie können Befehle auch mit vi bearbeiten (habe es noch nicht mit vim ausprobiert, obwohl ich davon ausgehe, dass es auch funktioniert):fc -e vi

Sie können den Verlauf auch löschen :history -c

HINWEIS: Wenn Sie kein Fan des Befehls sind, historybefindet sich in Ihrem Ausgangsverzeichnis ( cd ~) auch eine Datei mit dem Namen .bash_history (wenn Sie bash verwenden), mit der Sie catalle in der bash-Shell eingegebenen Informationen anzeigen können .

NlightNFotis
quelle
sehr nette antwort. Sie sollten sich auch die Anleitung ansehen, auf die @radu in askubuntu.com/a/3906/59250
Cerber
3
  1. Javier hat diese Frage bereits beantwortet: /var/log/auth.log
  2. Ich habe hier einen tollen Artikel dazu gefunden .
  3. Wenn Ihre Benutzer keinen Zugriff auf root haben, sollten Ihre Protokolldateien sicher sein. Sie können versuchen, einige benutzerdefinierte Regeln in der sudoers-Datei zu erstellen, um zu beschränken, auf was und wie Ihre Benutzer zugreifen können. Sie können auch die Protokollstufe für den sshd-Daemon erhöhen.
Radu Cotescu
quelle
3

Abgesehen von der Anmeldung selbst gibt es keine sichere Möglichkeit, Benutzeraktionen nach der Anmeldung zu verfolgen / zu protokollieren, vorausgesetzt, sie verfügen über grundlegende Linux-Kenntnisse und können die Shell-Protokollierung deaktivieren oder einfach Befehle von anderen Shells (z. B. Python) ausführen.

Stattdessen sollten Sie bei der Bereitstellung des SSH-Zugriffs konservativ vorgehen. Brauchen sie ihn wirklich? Es ist nicht üblich, SSH-Zugriff zu gewähren, es sei denn, Sie sind im Shell-Bereitstellungsgeschäft tätig.

João Pinto
quelle