Was sind mögliche Sicherheitsprobleme mit einem SSH-Daemon?

14

Ich möchte von außen auf meinen Ubuntu 10.04 Office-PC SSH können. Ich denke daher, einen SSH-Daemon auf dem PC zu starten. Was sind die Sicherheitsprobleme, möglichen Störungen, spezifischen Konfigurationseinstellungen usw., die ich beachten sollte?

Für den Fall, dass es wichtig ist: Dies ist im Wesentlichen nur für meinen eigenen Gebrauch bestimmt. Ich glaube nicht, dass es andere Leute geben wird, die es benutzen. Es ist ein Ubuntu 10.04-PC in einer meist Windows 7 / Vista / XP-Umgebung.

ev-br
quelle
1
Vielleicht möchten Sie auch OpenVPN installieren und einen VPN-Tunnel in Ihrem PC für Ihre SSH-Verbindung erstellen. Auf diese Weise müssen Sie Ihren SSH-Port nicht für die Welt öffnen.
Linker3000
@ Linker3000 Danke! Ich werde es mir überlegen - obwohl ich vor einiger Zeit eine ziemlich unangenehme Erfahrung mit VPN gemacht habe.
ev-br
@Zhenya Wenn Sie Ihr "@" und den Benutzernamen nicht mit einem Leerzeichen versehen, erhalten sie eine Benachrichtigung, dass Sie ihnen antworten. ;) Du erhältst also einen Kommentar, wenn ich @ Zhenya verwende, aber nicht, wenn ich @ Zhenya
BloodPhilia 11.02.11
@Zhenya Und jetzt machst du es wieder XD
BloodPhilia
@Linker, warum ist OpenVPN sicherer als SSH?
Arjan

Antworten:

20

Das größte Problem sind die Benutzer, die sich über SSH als Administrator des Computers anmelden. Dies kann mit brutaler Gewalt geschehen, wenn Sie ein leicht zu erratendes Passwort haben.

Es gibt verschiedene Sicherheitsmaßnahmen, die Sie ergreifen können. Nachfolgend sind einige der Maßnahmen aufgeführt, die ich beim Einrichten eines SSH-Servers immer ergriffen habe, und einige zusätzliche.

  1. Verwenden Sie ein sicheres Passwort, das aus mindestens 10 Groß- und Kleinbuchstaben, Zahlen und anderen Zeichen besteht.

  2. Jail-Benutzer in ihr Home-Verzeichnis. Eingesperrte Benutzer können nicht auf Dateien zugreifen / diese bearbeiten, die sich außerhalb ihres Ausgangsverzeichnisses befinden. Ihr Benutzer kann daher nicht auf wichtige Systemdateien zugreifen bzw. diese bearbeiten. Viele Tutorials finden Sie online, wie Sie einen Benutzer einsperren können. Die meisten von ihnen verwenden JailKit . Ein Beispiel für ein solches Tutorial finden Sie hier . Alternativ können Sie auch die native ChrootDirectoryDirektive des OpenSSH-Servers verwenden . Ein Beispiel für ein Tutorial dazu finden Sie hier .

  3. Installieren Sie Fail2Ban . Fail2Ban ist ein Programm, das die Authentifizierungsprotokolle auf falsche Einträge überprüft. Wenn ein bestimmtes Limit erreicht ist, wird für diese bestimmte IP-Adresse für eine voreingestellte Zeitdauer ein Firewallblock hinzugefügt. Es gibt auch mehrere Online-Tutorials zum Einrichten von Fail2Ban mit SSH. Ein Beispiel wäre dieses . Die Fail2Ban-Homepage enthält auch einige nette und vollständige HOWTOs.

  4. Deaktivieren Sie die Root-Anmeldung über SSH. Dies ist der Benutzer, der Zugriff auf so ziemlich alle Dateien auf Ihrem System hat. Daher wird empfohlen, die Shell-Anmeldung zu deaktivieren. In den neuesten Versionen von Ubuntu wird der Root-Benutzer automatisch deaktiviert, es schadet jedoch nicht, den SSH-Zugriff zu deaktivieren. Dies erfolgt durch Bearbeiten der Datei /etc/ssh/sshd_config. Suchen Sie nach der folgenden Zeile und vergewissern Sie sich, dass kein # davor steht.

    #PermitRootLogin no
    
  5. Verwenden Sie einen nicht standardmäßigen Port (z. B. nicht 22). Dies erfolgt entweder über die Portweiterleitung in Ihrem Router (z. B. 16121 -> 22 statt 22 -> 22) oder indem der SSH-Dämon einen anderen Port überwacht. Dadurch wird Ihr SSH-Dienst für böswillige Benutzer weniger leicht erkennbar. Dies erfolgt durch Bearbeiten der Datei /etc/ssh/sshd_config. Suchen Sie nach der folgenden Zeile und ändern Sie 22 in den gewünschten Port. Vergessen Sie nicht, anschließend den richtigen Port in Ihrem Router weiterzuleiten.

    Port 22
    
  6. Verwenden Sie zum Anmelden keine Passwörter. Neben Passwörtern ermöglicht SSH auch das Anmelden mit privaten Schlüsseln. Dies bedeutet, dass auf Ihrem Computer ein Schlüssel gespeichert ist, über den Sie auf die SSH des SSH-Computers zugreifen können. Wenn versucht wird, eine Verbindung herzustellen, verwendet der SSH-Client den Schlüssel, um sich beim Server anzumelden, anstatt sich über eine Kennwortauthentifizierung anzumelden. Authentifizierungsschlüssel sind kryptografisch viel stärker als Kennwörter und daher nicht so einfach zu knacken. Es gibt auch mehrere Online-Tutorials zum Einrichten der schlüsselbasierten Authentifizierung mit SSH. Ein Beispiel hierfür ist dieses . (Wenn Sie in Windows mit PuTTY SSH ausführen , finden Sie in diesem Link eine Anleitung zu PuTTY.) Nachdem Sie die schlüsselbasierte Authentifizierung eingerichtet haben, können Sie die Kennwortauthentifizierung deaktivieren, indem Sie die Datei bearbeiten /etc/ssh/sshd_config. Suchen Sie nach der folgenden Zeile und vergewissern Sie sich, dass kein # davor steht.

    #PasswordAuthentication no
    
  7. Optional können Sie, wie @ Linker3000 in seinem Kommentar erwähnte, einen VPN-Tunnel zu dem PC einrichten, auf den Sie über SSH zugreifen möchten, und anschließend den nicht lokalen Netzwerkzugriff auf dem SSH-Server nicht zulassen. Auf diese Weise kann kein externes Gerät ohne VPN-Verbindung auf Ihren SSH-Server zugreifen. Dies kann erreicht werden, indem ALLE Hosts abgelehnt werden und nur die lokalen Netzwerk-IPs sich anmelden können. Dies erfolgt durch Bearbeiten /etc/hosts.denyund Hinzufügen der folgenden Elemente:

    sshd: ALL
    

    und /etc/hosts.allowFolgendes hinzuzufügen:

    sshd: 192.168.1.*
    

    wo die IP mit der Ihres lokalen Netzwerks übereinstimmt. *ist ein Platzhalter, daher werden alle IP-Adressen 192.168.1.akzeptiert, die mit beginnen. Wenn dies nicht funktioniert, wird Ihre Distribution möglicherweise sshanstelle von verwendet sshd. In diesem Fall sollten Sie ssh: 192.168.1.*und ssh: ALLstattdessen versuchen .

  8. Sie könnten nur erlauben bestimmte Hosts, mit der das gleiche tun /etc/hosts.allowund /etc/hosts.denywie in 6 beschrieben, aber in /etc/hosts.allowdie folgende Zeile und jeden Host durch Leerzeichen getrennt zu ermöglichen:

    sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
    
  9. Erlauben Sie nur bestimmten Benutzern den Zugriff auf Ihren SSH-Server. Dies erfolgt durch Bearbeiten der Datei /etc/ssh/sshd_config. Suchen Sie nach der folgenden Zeile und vergewissern Sie sich, dass kein # davor steht. Wenn es nicht existiert, erstelle es. Wenn Sie beispielsweise nur John, Tom und Mary zulassen möchten, fügen Sie diese Zeile hinzu bzw. bearbeiten Sie sie:

    AllowUsers john tom mary
    

    Sie können auch bestimmte Benutzer ablehnen. Wenn Sie beispielsweise den Zugriff auf John, Tom und Mary verweigern möchten, fügen Sie diese Zeile hinzu oder bearbeiten Sie sie:

    DenyUsers john tom mary
    
  10. Lassen Sie das Protokoll SSH2 nur für eingehende Verbindungen zu. Es gibt zwei Versionen des SSH-Protokolls. SSH1 unterliegt Sicherheitsproblemen, daher wird die Verwendung von SSH 2 empfohlen. Dies kann durch Bearbeiten der Datei erzwungen werden /etc/ssh/sshd_config. Suchen Sie nach der folgenden Zeile und vergewissern Sie sich, dass kein # davor steht. Wenn es nicht existiert, erstelle es.

    Protocol 2,1
    

    Entferne die 1, damit die Linie wird

    Protocol 2
    
  11. Erlauben Sie Benutzern nicht, sich anzumelden, für die kein Kennwort festgelegt wurde. Dies kann durch Bearbeiten der Datei erzwungen werden /etc/ssh/sshd_config. Suchen Sie nach der folgenden Zeile und vergewissern Sie sich, dass kein # davor steht. Wenn es nicht existiert, erstelle es.

    PermitEmptyPasswords no
    
  12. Und obwohl einfach und vielleicht unnötig zu sagen, aber in vielen Fällen von entscheidender Bedeutung, halten Sie Ihre Software auf dem neuesten Stand. Aktualisieren Sie regelmäßig Ihre installierten Pakete / Software.


= Vergessen Sie nicht, nach dem Bearbeiten der SSH-Konfigurationsdatei den Dämon neu zu starten, um die Änderungen zu übernehmen. Starten Sie den Daemon neu, indem Sie Folgendes ausführen:

sudo /etc/init.d/ssh restart

oder

sudo /etc/init.d/sshd restart

Abhängig davon, welche Linux-Distribution Sie verwenden.

BloodPhilia
quelle
2
sudo service ssh restartauf Ubuntu.
ulidtko
@ulidtko Diese Frage wurde mit einer allgemeineren Frage zusammengeführt, sodass meine Antwort allgemeiner und für verschiedene Distributionen geeignet war. Dies funktioniert auf fast allen Distributionen, aber Sie haben Recht.
BloodPhilia
@BloodPhilia Vielen Dank für diese detaillierte und leicht zugängliche Antwort! Ein paar weitere Fragen zu Ihren Punkten: 1. Was ist der Vorteil, wenn Sie Benutzer inhaftieren, um nur die Berechtigungen einzuschränken? Angenommen, ich melde mich als 'Benutzer' an. Ich habe nur Lesezugriff auf Dinge außerhalb von meinem / meinem Zuhause, aber keinen Schreib- oder Ausführungszugriff [nach Ubuntu-Standard, nehme ich an]. Ist es besser / schlechter als im Gefängnis? 2. Wo befinden sich normalerweise die Authentifizierungsprotokolle? Ich möchte in der Lage sein, sie von Zeit zu Zeit manuell / über grep zu untersuchen.
ev-br
@BloodPhilia 4. Wenn ich sshd dazu bringe, einen nicht standardmäßigen Port auf einem Server abzuhören, z. B. 1234, wie kann ich dann von einer Linux-Befehlszeile auf einem Client aus eine Verbindung zu diesem Server herstellen? Ich meine, braucht ein Standard-SSH-Befehl eine Art Schalter?
ev-br
1
@ulidtko: Mit Upstart sudo restart ssh.
Hallo71
7

Einige Tipps:

  1. Verwenden Sie die schlüsselbasierte Authentifizierung, die WIE sicherer ist als Kennwörter
  2. Nur SSH 2
  3. Deaktivieren Sie Root-Anmeldungen
  4. Ändern Sie für den Paranoiden den Port von Standard-Port 22
  5. Verwenden Sie zur Vereinfachung ein Tool, um Ihre IP-Adresse einem DNS-Namen wie Dyndns oder einem ähnlichen Namen zuzuordnen. Sie können eine lange Zeit mit derselben IP-Adresse verreisen, aber wenn Sie einmal verreisen und diese benötigen, werden Sie feststellen, dass Ihnen eine neue IP-Adresse ausgestellt wurde.
  6. Erlauben Sie natürlich nur den für SSH benötigten Port (Port 22 oder einen anderen als den Standard) durch Ihre Firewall.
Brian
quelle
1
Zu 5: Wenn Sie ein E-Mail-Konto auf einem Computer außerhalb Ihres Hauses haben, können Sie einen Cron-Job einrichten, um regelmäßig eine Nachricht von Ihrem Heimcomputer an diese Adresse zu senden. Ihre Heimat-IP wird in den Kopfzeilen sein. Nicht so praktisch wie DNS, aber verwendbar.
Garyjohn
Sie können sich auch an Ihren ISP wenden und nach dem Preis für eine statische IP-Adresse fragen. Dies ist bei weitem die einfachste Lösung von allen, aber in der Regel teurer als ein dynamischer DNS
Steen Schütt
2

Das Hauptrisiko besteht darin, zu vergessen, dass Sie einen SSH-Server verwenden und ein schwaches Kennwort für ein Konto festlegen. Es gibt Angreifer, die systematisch gemeinsame Kontonamen (wie webmasterund bob) und schwache Passwörter ausprobieren . Sie können durch das Verbot Passwort - Logins (put dieses Risiko eliminieren PasswordAuthentication noin sshd_configund entweder auch setzen UsePAM Nodeaktivieren Passwort - Authentifizierung in den PAM - Einstellungen für ssh oder). Eine Zwischenmaßnahme besteht darin, ssh-Anmeldungen auf eine Whitelist von Benutzern mit AllowUsersoder AllowGroupsin zu beschränken sshd_config.

Beachten Sie, dass das Zulassen von Kennwortanmeldungen an sich kein Sicherheitsproblem darstellt. Schwache Passwörter und geschnüffelte Passwörter sind die Probleme, und das Zulassen der Passwortauthentifizierung auf dem SSH-Server ist ein Enabler. Geben Sie zum Schutz vor Kennwort-Snooping niemals Ihr Kennwort auf einem Computer ein, dem Sie nicht vollständig vertrauen (wenn Sie jedoch einem Computer vertrauen, können Sie auch einen privaten Schlüssel darauf installieren und benötigen dann keine Kennwortauthentifizierung).

Die Mindestanforderung für die Verwendung eines ssh-Clients auf einem Computer besteht darin, dass Sie darauf vertrauen, dass die ssh-Kommunikation nicht aktiv missbraucht wird (ein Man-in-the-Middle-Angriff ist möglich, wenn er auf dem Client-Computer ausgeführt wird) Sie tippen Befehle in einen unberührten SSH-Client ein, der Client überträgt jedoch Ihre Authentifizierungsdaten zuverlässig, fügt jedoch anschließend ein Trojanisches Pferd in die Kommunikation ein. Dies ist eine schwächere Voraussetzung als die Gewissheit, dass kein Kennwort-Snooper vorhanden ist (normalerweise über einen Keylogger ausgeführt, aber es gibt andere weniger automatisierte Methoden wie das Schulter-Surfen). Wenn Sie das Mindestmaß an Vertrauen haben, aber dennoch Angst vor Snoopern haben, können Sie Einmalpasswörter verwenden (OpenSSH unterstützt sie durch seine PAM-Unterstützung).

Natürlich müssen Sie wie jedes andere Programm, das mit Computern außerhalb Ihrer Kontrolle interagiert (nicht nur Netzwerkserver, sondern auch Clients), über Sicherheitsupdates auf dem Laufenden bleiben.

Gilles 'SO - hör auf böse zu sein'
quelle
2

Drei Dinge kamen mir in den Sinn:

  1. Wenn Sie den Standard-Port 22 öffnen, wird dieser bald erkannt und Ihr PC wird von Brute-Force-Angriffen heimgesucht. Ich schlage vor, Sie konfigurieren sshd so, dass es einen anderen Port abhört oder eine Portzuordnung auf Ihrer Firewall vornimmt. Dies ist zwar kein Wundermittel, spart aber mindestens dieselben CPU-Zyklen.

    Port 12345

  2. Deaktivieren Sie die Kennwortauthentifizierung explizit und verwenden Sie nur Schlüssel. Jeder Schlüssel ist besser als das komplexeste Passwort, das Sie sich merken können.

    PasswordAuthentication no

  3. Obwohl in Ubuntu der Root-Benutzer standardmäßig deaktiviert ist, deaktivieren Sie die Root-Anmeldung explizit

    PermitRootLogin Nr

shpokas
quelle