Die OpenSSH-Suite ist eine Sammlung robuster Tools, die die Fernsteuerung und Übertragung von Daten zwischen vernetzten Systemen erleichtern sollen. Es besteht aus einer Reihe von Tools, darunter SSH, SCP, SFTP, SSHD und viele mehr. Jedes Mal, wenn Sie sich mit ssh bei einem Remote-Rechner anmelden, nutzen Sie mit hoher Wahrscheinlichkeit den OpenSSH-Server. In diesem Leitfaden werden wir ausführlich erläutern, wie OpenSSH funktioniert und wie man es richtig einsetzt, um den wachsenden Sicherheitsanforderungen gerecht zu werden. Wenn Sie also mehr über die Feinheiten von OpenSSH erfahren möchten, bleiben Sie in diesem Leitfaden bei uns.
Eingehender Einblick in OpenSSH-Server und -Dienste
Der OpenSSH-Server ist das Herzstück der Fernkommunikation zwischen Linux- und/oder BSD-Rechnern. Einige seiner bemerkenswerten Funktionen umfassen die Verschlüsselung des Datenverkehrs, mehrere leistungsstarke Authentifizierungsmethoden, sicheres Tunneling und ausgefeilte Konfigurationsmöglichkeiten. Die folgenden Abschnitte vermitteln ein aussagekräftiges Verständnis der grundlegenden Dienste und Sicherheitstipps.
Die Grundlagen eines OpenSSH-Servers
Wie der Name schon sagt, verwendet OpenSSH das SSH-Protokoll (Secure Shell) zur Bereitstellung von Fernverbindungs- und Datenübertragungseinrichtungen. Es beseitigt die Sicherheitslücken, die mit Legacy-Methoden wie dem Linux-FTP-Befehl und Telnet verbunden sind. OpenSSH macht es einfach, legitime Benutzer zu authentifizieren und Remote-Verbindungen zu verschlüsseln.
Das Kerndienstprogramm der OpenSSH-Suite, das für die Verwaltung von Remote-Verbindungen verantwortlich ist, ist der OpenSSH-Server oder sshd. Es wartet ständig auf eingehende Anfragen und richtet den entsprechenden Verbindungstyp ein, wenn eine neue Anfrage eintrifft.
Wenn ein Benutzer beispielsweise das ssh-Clientprogramm verwendet, um mit dem Server zu kommunizieren, richtet sshd eine Fernsteuerungssitzung ein, sobald die Authentifizierung erfolgreich ist. Wenn der Benutzer stattdessen SCP verwendet, initiiert sshd eine sichere Kopiersitzung.
Der Endbenutzer muss den geeigneten Kommunikationsmechanismus für seine Verbindung auswählen. Dies wird durch Tools wie ssh-add und ssh-keygen erleichtert. Wenn ein Benutzer mit dem ssh-Befehl erfolgreich eine Verbindung zum Remote-Computer herstellt, wird er von einer textbasierten Konsole begrüßt. Alle auf dieser Konsole eingegebenen Befehle werden über einen verschlüsselten SSH-Tunnel zur Ausführung auf dem Remote-Rechner gesendet.
Installieren und Konfigurieren des OpenSSH-Servers
Im folgenden Abschnitt wird erläutert, wie der OpenSSH-Server-Daemon installiert und konfiguriert wird. Wir zeigen die besten Konfigurationsoptionen sowohl für den persönlichen Gebrauch als auch für Unternehmenszwecke. Am Ende dieses Abschnitts werden wir auch die Best Practices für die Konfiguration und Härtung von OpenSSH skizzieren.
So installieren Sie den OpenSSH-Server
- -Bei den meisten modernen Linux-Distributionen ist OpenSSH bereits installiert. Wenn Sie es jedoch manuell installieren müssen, können Sie dies mit dem folgenden einfachen Befehl tun.
$ sudo apt install openssh-server
Dieser Befehl installiert den Server-Daemon. Verwenden Sie den folgenden Befehl, um den OpenSSH-Client in Ihrem System zu installieren.
$ sudo apt install openssh-client
So konfigurieren Sie den OpenSSH-Server
OpenSSH unterstützt eine große Anzahl von Konfigurationsoptionen zur Steuerung von Dingen wie Kommunikationseinstellungen und Authentifizierungsmodi. Die Datei sshd_config gibt die Konfigurationsparameter an und enthält die Adresse anderer Konfigurationsdateien, einschließlich eines oder mehrerer Host-Schlüssel Dateien und authorized_keys Dateien. Es befindet sich im Verzeichnis /etc/ssh/ Verzeichnis Ihres Dateisystems.
Bevor Sie fortfahren, einige seiner Parameter zu optimieren, empfehlen wir Ihnen, die aktuelle Kopie der sshd_config zu sichern Datei. Sie können dies tun, indem Sie Ihren bevorzugten Linux-Terminalemulator öffnen und den folgenden Befehl ausführen.
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Auf diese Weise, wenn Sie Ihre sshd_config durcheinanderbringen Datei können Sie jederzeit zur ursprünglichen Konfiguration zurückkehren. Jetzt können Sie mit der Konfiguration Ihres SSH-Servers fortfahren. Davor empfehlen wir den Lesern, ihre effektive sshd-Konfiguration mit dem folgenden einfachen Befehl zu testen.
$ sudo sshd -T
Nachdem Sie Ihre sshd_confi gesichert haben g-Datei gespeichert und die Standardeinstellungen angesehen haben, ist es an der Zeit, die Konfigurationsdatei zu bearbeiten. Wir werden den vim-Texteditor verwenden, um unsere Konfigurationsdatei zu öffnen und zu bearbeiten. Sie können jedoch jeden beliebigen Linux-Texteditor verwenden.
$ sudo vim /etc/ssh/sshd_config
Wie Sie bemerken sollten, gibt es bereits eine Reihe vorkonfigurierter Optionen. Die meisten sind jedoch auskommentiert. Sie können sie aktivieren, indem Sie die jeweilige Zeile, die den Optionsparameter angibt, auskommentieren. Entfernen Sie das Pfund „#“ Symbol am Anfang einer Zeile, um das Kommentarzeichen aufzuheben. Wir diskutieren einige der wichtigen Optionen weiter unten.
- AcceptEnv
Diese Option legt fest, welche vom Client gesendeten Umgebungsvariablen in die Remote-Umgebung kopiert werden können.
- Adressfamilie
Definiert die IP-Adressfamilie für die Verwendung von sshd. Die drei verfügbaren Optionen sind – any, inet und inet6.
- Agentenweiterleitung zulassen
Diese Option definiert, ob ssh-agent forwarding erlaubt ist oder nicht.
- StreamLocalForwarding zulassen
Definiert, ob die Weiterleitung von Unix-Domain-Sockets erlaubt ist oder nicht.
- TcpForwarding zulassen
Definiert, ob TCP-Weiterleitung erlaubt ist oder nicht.
- Benutzer zulassen
Diese Option kann eine Liste von Benutzernamen definieren, denen der Zugriff basierend auf einem Muster gestattet ist. Alle Benutzernamen sind standardmäßig erlaubt.
- Authentifizierungsmethoden
Diese Option gibt die Authentifizierungsmethoden an, die ein Benutzer abschließen muss, bevor er Zugriff erhält.
- AuthorizedKeysFile
Diese Option gibt die Datei an, die die öffentlichen Schlüssel für die Benutzerauthentifizierung enthält.
- ChallengeResponseAuthentication
Wenn diese Option aktiviert ist, ermöglicht sie die Challenge-Response-Authentifizierung.
- ChrootDirectory
Gibt das Stammverzeichnis an, das Benutzern angezeigt wird, die sich erfolgreich authentifiziert haben.
- Chiffren
Diese Option definiert die vom OpenSSH-Server zugelassenen kryptografischen Chiffren. Es gibt eine große Auswahl an verfügbaren Optionen.
- Komprimierung
Gibt an, ob eine Komprimierung zulässig ist und wenn ja, in welcher Phase.
- Benutzer verweigern
Diese Option kann verwendet werden, um eine Liste von Benutzernamen zu definieren, denen der Zugriff basierend auf einem Muster verweigert wird.
- ForceCommand
Es kann verwendet werden, um die Ausführung eines bestimmten Befehls zu erzwingen. Dadurch ignoriert der Server alle vom ssh-Client bereitgestellten Befehle und alles, was in ~/.ssh/rc vorhanden ist .
- GatewayPorts
Diese Option definiert, ob entfernte Hosts sich mit Ports verbinden können, die für die Client-Seite weitergeleitet wurden.
- GSSAPI-Authentifizierung
Es wird verwendet, um anzugeben, ob die GSSAPI-basierte Benutzerauthentifizierung zulässig ist oder nicht.
- Hostbasierte Authentifizierung
Diese Option gibt an, ob ein auf dem Client-Rechner vorhandener öffentlicher Schlüssel einen Host auf dem Remote-Server authentifizieren kann.
- HostbasedUsesNameFromPacketOnly
Diese Option gibt an, ob der Server eine umgekehrte Namenssuche für Namen durchführen muss, die in /.shosts vorhanden sind , ~/.rhosts , und /etc/hosts.equiv Dateien.
- Hostschlüssel
Es kann verwendet werden, um eine Datei zu definieren, die einen privaten Hostschlüssel enthält. Administratoren können mehrere Schlüsseldateien angeben. die Standardwerte sind /etc/ssh/ssh_host_dsa_key , /etc/ssh/ssh_host_ecdsa_key , /etc/ssh/ssh_host_ed25519_key und /etc/ssh/ssh_host_rsa_key .
- HostKey-Algorithmen
Diese Option definiert die Hostschlüsselalgorithmen, die vom SSH-Server zur Verfügung gestellt werden. OpenSSH unterstützt zu diesem Zweck eine Vielzahl von Algorithmen.
- Rhosts ignorieren
Weist den Server an, die .rhosts zu ignorieren und .shosts Dateien für RhostsRSAAuthentication und hostbasierte Authentifizierung .
- KbdInteractiveAuthentication
Diese Option definiert, ob der Server eine tastaturinteraktive Authentifizierung zulässt oder nicht.
- Kex-Algorithmen
Es wird verwendet, um die verfügbaren Algorithmen für den SSH-Schlüsselaustausch anzugeben. OpenSSH unterstützt alle wichtigen Schlüsselaustauschalgorithmen, einschließlich Diffie Hellman und Elliptic Curves.
- ListenAddress
Definiert, auf welche lokalen Adressen der sshd-Daemon hören soll.
- LoginGraceTime
Diese Option definiert die Zeit, nach der sshd den Benutzer trennt, wenn er sich nicht erfolgreich anmelden kann.
- LogLevel
Es definiert den Ausführlichkeitsgrad der Protokollmeldungen für sshd.
- MACs
Diese Option wird zum Definieren der verfügbaren MAC-Algorithmen (Message Authentication Code) verwendet. Diese dienen dem Schutz der Datenintegrität.
- MaxAuthTries
Diese Option definiert die maximale Anzahl von Malen, die ein Benutzer versuchen kann, sich beim Server zu authentifizieren.
- Passwortauthentifizierung
Definiert, ob sich ein entfernter Benutzer mit passwortbasierter Authentifizierung anmelden kann.
- Leere Passwörter zulassen
Diese Option gibt an, ob Benutzer ein leeres Passwort für Remote-Anmeldungen verwenden können.
- RootLogin zulassen
Diese Option definiert, ob Root-Login erlaubt ist oder nicht.
- PermitTTY
Diese Option definiert, ob Pseudo-TTY erlaubt ist oder nicht.
Entkommentieren Sie die Zeile, die eine der obigen Optionen enthält, und legen Sie den gewünschten Optionswert fest. Der folgende Abschnitt veranschaulicht einige allgemeine Sicherheitshärtungspraktiken für OpenSSH.
Wie man die OpenSSH-Serversicherheit härtet
Da OpenSSH als Eingangstür zu Ihrem Server fungiert, ist es äußerst wichtig, seine Sicherheit zu erhöhen. Versuchen Sie, die folgenden Vorschläge einzuhalten, um die Remote-Anmeldung besonders sicher zu machen.
1. Root-Anmeldung deaktivieren
Sie sollten niemals Root-Login auf Ihrem SSH-Server zulassen, da eine Eskalation des Root-Kontos den gesamten Server gefährden kann. Darüber hinaus wird das Root-Benutzerkonto ständig von böswilligen Benutzern angegriffen. Daher ist es besser, einen regulären Benutzer zu erstellen und ihm sudo-Berechtigungen zu gewähren. Sie können die Root-Anmeldung deaktivieren, indem Sie den Wert von PermitRootLogin festlegen bis nein.
PermitRootLogin no
2. Authentifizierungsversuche einschränken
Administratoren müssen die Anzahl der Anmeldeversuche von Remote-Hosts begrenzen, um Brute-Force-Anmeldeversuche zu verhindern. Der Aufstieg riesiger Bot-Armeen hat dies wichtiger denn je gemacht. Verwenden Sie die Option MaxAuthTries, um die Anzahl der zulässigen Authentifizierungsversuche für Ihren Server festzulegen. Viele Admins halten drei für einen akzeptablen Wert für diese Option. Sie können es jedoch basierend auf Ihren Sicherheitsstandards festlegen.
MaxAuthTries 3
3. Reduzieren Sie die Kulanzzeit für die Anmeldung
Eine andere Möglichkeit, automatisierte Bots zu verhindern, besteht darin, die Kulanzzeit für die Anmeldung zu verkürzen. Dies ist die Zeitspanne, innerhalb der sich ein Benutzer erfolgreich authentifizieren muss, nachdem er sich mit dem Server verbunden hat. Die sshd_config Datei definiert diesen Wert in Sekunden.
LoginGraceTime 20
4. Kennwortauthentifizierung deaktivieren
Sie sollten Benutzern nur erlauben, sich mit schlüsselbasierter Authentifizierung beim Server anzumelden. Stellen Sie also sicher, dass Sie das passwortbasierte Authentifizierungsschema deaktivieren. Sie können dies tun, indem Sie den Wert von PasswordAuthentication festlegen bis nein.
PasswordAuthentication no
Es ist auch eine gute Idee, leere Passwörter zu deaktivieren. Setzen Sie den Wert des Felds PermitEmptyPasswords auf no.
PermitEmptyPasswords no
5. Andere Authentifizierungsmethoden deaktivieren
OpenSSH unterstützt neben der schlüsselbasierten und passwortbasierten Authentifizierung einige zusätzliche Authentifizierungsmethoden. Sie sollten sie vollständig deaktivieren, nachdem Sie die schlüsselbasierte Authentifizierung eingerichtet und die Kennwortauthentifizierung deaktiviert haben.
ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication no
6. Deaktivieren Sie die X11-Weiterleitung
Die X11-Weiterleitung wird verwendet, um grafische Anwendungen auf dem Server auf dem Remote-Host-Computer anzuzeigen. Für die meisten Unternehmensserver ist es jedoch nicht erforderlich. Deaktivieren Sie es also, wenn Sie diese Funktion nicht benötigen.
X11Forwarding no
Nachdem Sie die X11-Weiterleitung deaktiviert haben, müssen Sie alle Verweise auf AcceptEnv auskommentieren . Fügen Sie einfach eine Raute (#) vor die Zeilen ein, um sie zu kommentieren.
7. Verschiedene Optionen deaktivieren
Deaktivieren Sie die folgenden Optionen zum Tunneln und Weiterleiten, wenn Sie sie für Ihren Server nicht benötigen.
AllowAgentForwarding no AllowTcpForwarding no PermitTunnel no
8. SSH-Banner deaktivieren
Das ausführliche SSH-Banner ist standardmäßig aktiviert und zeigt wichtige Informationen über den Server an. Hacker können diese Informationen nutzen, um einen Angriff auf Ihren Server zu planen. Daher ist es eine gute Idee, das ausführliche SSH-Banner zu deaktivieren.
DebianBanner no
Wenn diese Option in Ihrer sshd_config nicht vorhanden ist Datei, fügen Sie sie hinzu, um das Banner zu deaktivieren.
9. Implementieren Sie die Zulassungsliste für IP-Adressen
In den meisten Fällen greifen Sie von einer Handvoll bekannter IP-Adressen auf den Remote-Server zu. Sie können eine IP-Adresse erstellen, die die Liste zulässt, um zu verhindern, dass andere Personen auf Ihren Server zugreifen. Dadurch wird das Risiko einer Serververletzung verringert, selbst wenn Ihre privaten Schlüssel kompromittiert wurden.
Sie sollten jedoch bei der Implementierung der IP-Zulassungsliste vorsichtig sein und keine dynamischen Adressen verwenden, da sich diese sehr häufig ändern.
Um die Zulassungsliste zu definieren, finden Sie zunächst die IP-Adresse heraus, die Sie derzeit verwenden, um sich mit dem OpenSSH-Server zu verbinden. Sie können dies tun, indem Sie den folgenden Befehl in Ihrem Terminal ausführen.
$ w
Notieren Sie die IP-Adresse unter dem Label „FROM“. ‘. Wir gehen von einer Beispiel-IP-Adresse von 203.0.113.1 aus für den Rest dieser Anleitung. Öffnen Sie nun Ihre ssh-Konfigurationsdatei und verwenden Sie die AllowUsers Konfigurationsdirektive, wie unten gezeigt.
AllowUsers *@203.0.113.1
Die obige Zeile beschränkt alle entfernten Benutzer auf eine ausgewählte IP-Adresse. Sie können dies mithilfe der Notation Classless Inter-Domain Routing (CIDR) in einen IP-Adressbereich ändern, wie unten dargestellt.
AllowUsers *@203.0.113.0/24
10. Beschränken Sie die Shell von Remote-Benutzern
Es empfiehlt sich immer, die vom entfernten Benutzer ausgeführten Operationen einzuschränken. Sie können dies tun, indem Sie die Shell des Remote-Benutzers einschränken. OpenSSH ermöglicht mehrere Konfigurationsoptionen, um diese Aufgabe zu unterstützen. Wir zeigen Ihnen, wie Sie mit diesen Optionen den Shell-Zugriff eines Benutzers auf SFTP beschränken.
Zuerst erstellen wir einen neuen Benutzer namens mary mit /usr/sbin/nologin Hülse. Dadurch werden interaktive Anmeldungen für diesen Benutzer deaktiviert, aber weiterhin nicht interaktive Sitzungen bereitgestellt, um Vorgänge wie Dateiübertragungen auszuführen.
$ sudo adduser --shell /usr/sbin/nologin mary
Dieser Befehl erstellt den Benutzer mary mit der nologin-Shell. Sie können die interaktive Shell auch für einen vorhandenen Benutzer deaktivieren, indem Sie den folgenden Befehl verwenden.
$ sudo usermod --shell /usr/sbin/nologin alex
Wenn Sie versuchen, sich als einer der oben genannten Benutzer anzumelden, wird Ihre Anfrage abgelehnt.
$ sudo su alex This account is currently not available.
Sie können jedoch weiterhin Aktionen ausführen, die keine interaktive Shell erfordern, indem Sie diese Konten verwenden.
Öffnen Sie als Nächstes erneut Ihre sshd-Konfiguration und verwenden Sie den ForceCommand internal-sftp und ChrootDirectory Anweisung zum Erstellen eines sehr restriktiven Nur-SFTP-Benutzers. Wir werden den Benutzer alex für dieses Beispiel einschränken. Außerdem wird dringend empfohlen, Match-Blöcke unten in Ihrer sshd_config hinzuzufügen .
Match User alex ForceCommand internal-sftp ChrootDirectory /home/alex/
Beenden Sie die Konfigurationsdatei und testen Sie, ob die Konfigurationsdatei einen Fehler verursacht oder nicht. Sie können dies tun, indem Sie den folgenden Befehl in Ihrem Linux-Terminalemulator ausführen.
$ sudo sshd -t
Wenn alles in Ordnung ist, sollten Sie eine robuste Konfiguration für den Benutzer alex erstellt haben. Die interaktive Anmeldesitzung ist für diesen Benutzer deaktiviert und er hat nur Zugriff auf das Home-Verzeichnis seines Kontos.
Abschlussgedanken
Da OpenSSH ein wesentlicher Bestandteil der Sicherheit Ihres Remote-Servers ist, ist es wichtig zu lernen, wie es funktioniert. Aus diesem Grund haben unsere Redakteure in diesem Handbuch verschiedene nützliche Informationen zum OpenSSH-Server zusammengestellt. Die Themen umfassen die Funktionsweise von OpenSSH, das Lesen und Bearbeiten der Konfigurationsdatei und die Implementierung der besten Sicherheitspraktiken.
Hoffentlich konnten wir Ihnen die gesuchten Informationen liefern. Lesezeichen für dieses Handbuch für zukünftige Referenzen. Und vergessen Sie nicht, einen Kommentar zu hinterlassen, wenn Sie weitere Fragen oder Vorschläge haben, wie Sie diesen Leitfaden benutzerfreundlicher gestalten können.