Zum Hauptinhalt springen

Wie konfiguriert man OpenSSL und OpenSSH auf FreeBSD?

Veröffentlicht am:
.
12 Minuten Lesezeit
.
Für die englische version

Die OpenSSL-Version auf FreeBSD ist eine allgemeine kryptografische Bibliothek, die die Netzwerk-Sicherheitsprotokolle Transport Layer Security 1.0/1.1/1.2/1.3 (TLSv1/TLSv1.1/TLSv1.2/TLSv1.3) unterstützt.

Das OpenBSD-Team pflegt OpenSSH, das standardmäßig auf FreeBSD installiert ist.

In diesem Artikel werden wir erklären, was OpenSSL und OpenSSH sind, wie Sie OpenSSL-Zertifikate generieren können und wie Sie den Mailverkehr mithilfe von Zertifikaten verschlüsseln können.Darüber hinaus beschreibt dieser Artikel die integrierten Client-Tools für den sicheren Zugriff auf andere Systeme und die Übertragung von Daten von einem FreeBSD-System.Das Dokument erklärt dann, wie man einen SSH-Server auf einer FreeBSD-Maschine einrichtet.

Was ist OpenSSL?

OpenSSL ist ein Kryptographie-Toolkit, das die Netzwerkprotokolle Secure Sockets Layer (SSL v2/v3) und Transport Layer Security (TLS v1) sowie die notwendigen kryptographischen Standards implementiert.

Das openssl-Programm bietet eine Befehlszeilenschnittstelle zur Nutzung der kryptografischen Funktionen der OpenSSL-Kryptobibliothek aus der Shell.Das openssl-Dienstprogramm bietet die folgenden Funktionen an:

  • Erstellung und Verwaltung von privaten Schlüsseln, öffentlichen Schlüsseln und Parametern

  • Erstellung von X.509-Zertifikaten, CSRs und CRLs

  • Öffentliche Schlüssel-Kryptographie-Operationen

  • Verschlüsselung und Entschlüsselung mit Chiffren

  • Berechnung von Nachrichten-Hashes

  • SSL/TLS-Client- und Server-Tests

  • Zeitstempel-Anfragen, Erstellung und Validierung

  • Verarbeitung von S/MIME-signierten oder verschlüsselten E-Mails

Die openssl-Software bietet eine Fülle von Befehlen, jeder mit einer Fülle von Parametern und Argumenten.Die Syntax des openssl-Befehls ist wie folgt angegeben:

openssl  command [ command_opts ]  [ command_args ]
openssl list [ standard-commands | digest-commands | cipher-commands | cipher-algorithms | digest-algorithms | public-key-algorithms]
openssl no-XXX [ arbitrary options ]
Starten Sie noch heute kostenlos mit Zenarmor

Wie verwendet man OpenSSL auf FreeBSD?

OpenSSL wird häufig verwendet, um die Authentifizierung von Mail-Clients zu verschlüsseln und webbasierte Transaktionen wie Kreditkarteneinkäufe abzusichern.Einige Ports, einschließlich www/apache24 und databases/postgresql11-server, bieten eine OpenSSL-Kompilierungsoption.Wenn gewählt, fügt der Port OpenSSL-Unterstützung zum zugrunde liegenden System hinzu.

Sie können die folgende Zeile zu /etc/make.conf hinzufügen, um den Port gegen OpenSSL aus dem security/openssl-Port zu erstellen:

DEFAULT VERSIONS+= ssl=openssl

OpenSSL wird oft verwendet, um Zertifikate für Softwareanwendungen auszustellen.Ein Zertifikat wird verwendet, um die Berechtigungen eines Unternehmens oder einer Einzelperson zu validieren.

Dieser Abschnitt zeigt, wie man Zertifikate auf FreeBSD erstellt und verwendet.

Wie erstellt man OpenSSL-Zertifikate?

Sie können auf Ihrem FreeBSD-Server zwei Arten von Zertifikaten erstellen:

  • Zertifikate, die von einer externen Zertifizierungsstelle (CA) signiert werden

  • Selbstsignierte Zertifikate

warnung

Die Anwendung, die ein Zertifikat verwendet, das nicht von einer externen Zertifizierungsstelle (CA) wie http://www.verisign.com signiert wurde, gibt eine Warnung aus.Das Erwerben eines signierten Zertifikats verursacht eine Gebühr, jedoch ist die Verwendung eines signierten Zertifikats optional, da Zertifikate auch selbstsigniert sein können.Die Verwendung einer externen Behörde beseitigt Warnungen und beruhigt die Menschen.

Wie man Zertifikate mit einer externen Behörde erstellt?

Um ein Zertifikat zu erstellen, das von einer externen CA signiert wird, können Sie die folgenden Schritte befolgen:

  1. Führen Sie den untenstehenden Befehl aus und geben Sie die entsprechenden Informationen an den Eingabeaufforderungen ein.Diese Eingabedaten werden auf dem Zertifikat aufgezeichnet.

    openssl req -new -nodes -out req.pem -keyout cert.key -sha256 -newkey rsa:2048
  2. Geben Sie den Ländercode ein, wie z.B. US.

  3. Geben Sie Bundesstaat oder Provinzname (vollständiger Name) [Some-State]: ein, wie zum Beispiel Kalifornien.

  4. Geben Sie Ortsname ein, wie Cupertino

  5. Geben Sie Organisationsname ein, wie MyCompany

  6. Geben Sie den Namen der organisatorischen Einheit ein, wie z.B. IT.

  7. Geben Sie den vollqualifizierten Namen des Systems ein, das das Zertifikat verwenden wird, bei der Frage nach dem Common Name, z.B. server.meinefirma.com.Wenn dieser Name nicht mit dem Server übereinstimmt, wird die Anwendung, die das Zertifikat überprüft, den Benutzer warnen, wodurch die Überprüfung des Zertifikats unwirksam wird.

  8. Geben Sie E-Mail-Adresse ein.

  9. Geben Sie ein Herausforderungskennwort ein.

  10. Sie können einen optionalen Firmennamen eingeben.

Generating a RSA private key
................................................+++++
...................................................................................................................+++++
writing new private key to 'cert.key'
-----
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:California
Locality Name (eg, city) []:Cupertino
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:server.mycompany.com
Email Address []:web@mycompany.com

Please enter the following 'extra' attributes to be sent with your certificate request

A challenge password []:myStrongPass
An optional company name []:

Dieser Befehl wird zwei neue Dateien im aktuellen Verzeichnis erstellen:

  • Der Zertifikatsantrag, req.pem, kann bei einer CA eingereicht werden, die die bereitgestellten Anmeldeinformationen authentifiziert, den Antrag signiert und das signierte Zertifikat zurücksendet.

  • Die zweite Datei, cert.key, enthält den privaten Schlüssel des Zertifikats und sollte an einem sicheren Ort aufbewahrt werden.Wenn diese Informationen in die falschen Hände geraten, könnten sie ausgenutzt werden, um den Benutzer oder den Dienst zu impersonieren. Es scheint, dass Sie keinen Text eingegeben haben. Bitte teilen Sie mir mit, was Sie übersetzen möchten!

Der Inhalt der Zertifikatsanforderungsdatei, req.pem, sieht ähnlich aus wie folgt:

-----BEGIN CERTIFICATE REQUEST-----
MIIDFTCCAf0CAQAwgZUxCzAJBgNVYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh
MRIwEAYDVQQHDAlDdXBlcnRpbm8xEjAQBgNVBAoMCU15Q29tcGFueTELMAkGA1UE
CwwCSVQxGjAYBgNVBAMMEXdlYi5teWNvbXBhbnkuY29tMSAwHgYJKoZIhvcNAQkB
FhF3ZWJAbXljb21wYW55LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
ggEBAN/NMpDfAeVqXuDus8Hv/1FBts0TkUioKUdTBXVlnPDcRuMrgT/3qHnZ7b
POUucFWv3bFp88gaRq24onGgtqQuFlo6B5bmdshJu+OcAnNkay+TRKYN+PtIqDxV
rJkaT13muuJvcgH8Lj/sbHPrXUdHMVfagxOR/7NrsEiB9zQrHrG+G9ynsi23jqLJ
LA+lw2Mk/qEo77S1Nuu3/y829RiplS07LDj6lA4DE9RgRdfrYBjBt0V+WWyIN/kg
4HAmz11cqVqC9b+YgCj9i3IQFHAKqqBRKUc5tqxiUrh61VN1IQ66+3yVafclHCPs
5SE3U7PCyeou77oleipTjGQq4LUCAwEAAaA6MBsGCSqGSIb3DQEJAjEODAxteVN0
cm9uZ1Bhc3MwGwYJKoZIhvcNAQkHMQ4MDG15U3Ryb25nUGFzczANBgkqhkiG9w0B
AQsFAAOCAQEApG3ptjxHhCBvH72k/DYqyIiuQK7jMZS8TiLz++1zX6nkr8WXzI
r/X6kWeBnuGCHxcDBnHPB2HNg8/OVH8outIDRMj4DuQJcfj0MHxsISoOw5B5UUxN
7ljghi/Q8uzAP+zVl0T+hgIB+J+nGVUEhh5X67zK9Yso2C6wqggPiAtp0mNfe4ce
kUlkQzdAUKS5labzJeoY9aAS3lGUudJAVbNOTsJtsi4xFC2DsDRBUZKP2Hjg/8UZ
nIkhPWfPR9IG4LhgiceJaxc6OQzDQYBbk1YdaIc03OmKQsen5mMkPhThDuL/ggVL
6es7PSIs4abbYqAGTsOcXpaTRVtEpEhw==
-----END CERTIFICATE REQUEST-----

Wie erstellt man selbstsignierte Zertifikate?

Ein selbstsigniertes Zertifikat kann erstellt werden, wenn eine Signatur durch eine Zertifizierungsstelle (CA) nicht erforderlich ist, indem die folgenden Schritte befolgt werden.

  1. Erstellen Sie den RSA-Schlüssel, indem Sie den folgenden Befehl ausführen:

    openssl genrsa -writerand -genkey -out cert.key 2048
  2. Der obige Befehl erstellt eine private Schlüsseldatei cert.key im aktuellen Verzeichnis.Erstellen Sie ein selbstsigniertes Zertifikat mit diesem Schlüssel, indem Sie den nächsten Befehl ausführen.Befolgen Sie die Standardanweisungen, um ein Zertifikat zu erstellen.

    openssl req -new -x509 -days 365 -key cert.key -out cert.crt -sha256
  3. Geben Sie den Ländercode ein, wie z.B. US.

  4. Geben Sie Bundesstaat oder Provinzname (vollständiger Name) [Some-State]: ein, wie zum Beispiel Kalifornien.

  5. Geben Sie Ortsname ein, wie Cupertino

  6. Geben Sie Organisationsname ein, wie MyCompany

  7. Geben Sie den Namen der organisatorischen Einheit ein, wie z.B. IT.

  8. Geben Sie den vollqualifizierten Namen des Systems ein, das das Zertifikat verwenden wird, bei der Frage nach dem Common Name, wie z.B. server.meinefirma.com.Wenn dieser Name nicht mit dem Server übereinstimmt, wird die Anwendung, die das Zertifikat überprüft, den Benutzer warnen, wodurch die Überprüfung des Zertifikats unwirksam wird.

  9. Geben Sie E-Mail-Adresse ein.

    You are about to be asked to enter information that will be incorporated into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:US
    State or Province Name (full name) [Some-State]:California
    Locality Name (eg, city) []:Cupertino
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany
    Organizational Unit Name (eg, section) []:IT
    Common Name (e.g. server FQDN or YOUR name) []:server.mycompany.com
    Email Address []:web@mycompany.com
  10. Dies erstellt eine Zertifikatsdatei mit dem Namen cert.crt im aktuellen Verzeichnis.Sowohl die private Schlüsseldatei cert.key als auch das Zertifikat selbst, cert.crt, sollten an einem Ort gespeichert werden, auf den nur der Root-Zugriff hat, idealerweise /etc/ssl/.Führen Sie den nächsten Befehl aus:

    mv cert.* /etc/ssl/
  11. Diese Dateien sollten die Berechtigungen 0700 haben.Setzen Sie die Dateiberechtigungen, indem Sie den nächsten Befehl ausführen:

    chmod 0700 /etc/ssl/cert.*

Wie man Zertifikate zur Verschlüsselung von Sendmail verwendet?

Die Verschlüsselung von Verbindungen zum Sendmail-Mailserver, um die Authentifizierung im Klartext zu umgehen, ist eine Verwendung eines Zertifikats.

warnung

Wenn der Benutzer keine lokale Kopie des Zertifikats installiert hat, können bestimmte E-Mail-Clients einen Fehler anzeigen. Es scheint, dass Sie nichts eingegeben haben. Wie kann ich Ihnen helfen?

In FreeBSD 10.0-RELEASE und später ist es möglich, ein selbstsigniertes Zertifikat für Sendmail automatisch zu generieren.Sie können OpenSSL-Zertifikate verwenden, um den Sendmail-Verkehr zu verschlüsseln, indem Sie die folgenden Schritte befolgen:

  1. Fügen Sie die folgenden Zeilen zu /etc/rc.conf hinzu, um die Unterstützung von OpenSSL-Zertifikaten für Sendmail zu aktivieren:

    sendmail_enable="YES"
    sendmail_cert_create="YES"
    sendmail_cert_cn="server.mycompany.com"

    Dies wird ein selbstsigniertes Zertifikat mit dem Namen /etc/mail/certs/host.cert, einen Signaturschlüssel mit dem Namen /etc/mail/certs/host.key und ein CA-Zertifikat mit dem Namen /etc/mail/certs/cacert.pem erzeugen.Der in sendmail_cert_cn angegebene Common Name wird vom Zertifikat verwendet.

  2. Nach dem Übernehmen der Änderungen starten Sie Sendmail neu, indem Sie den nächsten Befehl ausführen.Wenn alles gut geht, enthält /var/log/maillog keine Fehlermeldungen.

    service sendmail restart
  3. Um die Einstellungen zu überprüfen, können Sie den folgenden Befehl ausführen und sich mit dem Mailserver über den Telnet-Befehl mit dem Listening-Port verbinden.

    telnet localhost 25

    Dies sollte die Ausgabe ähnlich wie die folgende anzeigen:

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    220 server ESMTP Sendmail 8.16.1/8.16.1; Thu, 2 Feb 2023 11:31:39 +0300 (+03)
  4. Geben Sie den folgenden Befehl ein.

    ehlo server

    Dies sollte die Ausgabe ähnlich wie die folgende anzeigen:

    250-server Hello localhost [127.0.0.1], pleased to meet you
    250-ENHANCEDSTATUSCODES
    250-PIPELINING
    250-8BITMIME
    250-SIZE
    250-DSN
    250-ETRN
    250-STARTTLS
    250-DELIVERBY
    250 HELP

Wenn die STARTTLS-Zeile in der Ausgabe vorhanden ist, funktioniert alles ordnungsgemäß.

Was ist OpenSSH?

OpenSSH ist eine Sammlung von Netzwerkkommunikationswerkzeugen, die entwickelt wurden, um entfernten Arbeitsstationen sicheren Zugang zu ermöglichen.Zusätzlich können TCP/IP-Verbindungen sicher durch SSH-Verbindungen getunnelt oder geleitet werden.OpenSSH verschlüsselt alle Datenübertragungen, um Abhören, Verbindungsübernahmen und andere Angriffe auf Netzwerkebene zu verhindern.

Wenn Daten über das Netzwerk unverschlüsselt übertragen werden, können Netzwerk-Sniffer, die sich irgendwo zwischen dem Client und dem Server befinden, Benutzer-/Passwortinformationen oder Sitzungsdaten abfangen.OpenSSH bietet mehrere Authentifizierungs- und Verschlüsselungstechniken an, um dies zu verhindern.

Wie verwendet man SSH-Client-Dienstprogramme?

Um sich remote auf einen Server einzuloggen, können Sie ssh verwenden und einen Benutzernamen angeben, der auf dem Server existiert, sowie die IP-Adresse oder den Hostnamen des Servers:

ssh username@10.10.10.28

Wenn dies das erste Mal ist, dass auf den angegebenen Server zugegriffen wird, muss der Benutzer den Fingerabdruck des Servers validieren:

The authenticity of host '10.10.10.28 (10.10.10.28)' can't be established.
ED25519 key fingerprint is SHA256:9+ESHcNaDTLpZ7fRVahs8jy6QJk4VhOXnSmTXuBrbno.
No matching host key fingerprint found in DNS.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

SSH verwendet einen Schlüssel-Fingerabdruckmechanismus, um die Identität des Servers zu authentifizieren, wenn sich ein Client verbindet.Wenn der Benutzer den Fingerabdruck des Schlüssels akzeptiert, indem er beim ersten Verbindungsversuch ja eingibt, wird eine Kopie des Schlüssels im Home-Verzeichnis des Benutzers in der Datei .ssh/known_hosts gespeichert.Zukünftige Anmeldeversuche werden mit dem gespeicherten Schlüssel verglichen, und eine Warnung wird angezeigt, wenn der Schlüssel des Servers nicht mit dem gespeicherten Schlüssel übereinstimmt.Bevor die Verbindung wiederhergestellt wird, muss der Benutzer zunächst feststellen, warum sich der Schlüssel geändert hat, falls dies der Fall ist.

Aktuelle OpenSSH-Versionen erlauben nur SSHv2-Verbindungen.Version 1 des SSH-Protokolls ist veraltet.

Verwenden Sie scp, um eine Datei sicher von oder zu einem entfernten System zu kopieren.Dieses Beispiel überträgt die entfernte Datei freebsd.iso in eine Datei mit demselben Namen im aktuellen Verzeichnis auf der lokalen Maschine.

scp username@server.mycompany.com:/freebsd.iso  freebsd.iso
Password for username@server.mycompany: *******
freebsd.iso 100% |*****************************| 554735
00:00

Da der Fingerabdruck dieses Hosts bereits validiert wurde, wird der Schlüssel des Servers automatisch bestätigt, bevor der Benutzername für das Passwort abgefragt wird.

Ähnliche Parameter werden scp und cp übergeben.Der erste Eingabewert ist die Datei oder die Dateien, die übertragen werden sollen, und der zweite ist der Zielort, an den kopiert werden soll.Da die Datei über das Netzwerk abgerufen wird, sind eine oder mehrere der Datei-Parameter wie folgt:

user@host:<path to remote file>

Beim rekursiven Kopieren von Verzeichnissen verwendet scp den Parameter -r.

Sie können sftp verwenden, um eine interaktive Sitzung zum Kopieren von Dateien zu starten.

Wie verwendet man die schlüsselbasierte Authentifizierung?

Ein SSH-Server authentifiziert Clients mit einer Reihe verschiedener Techniken.Die häufigsten Authentifizierungsmechanismen sind Passwörter und SSH-Schlüssel.Während Passwörter einen gewissen Schutz gegen unbefugten Zugriff bieten, sind SSH-Schlüssel weitaus sicherer.

Das Problem mit Passwörtern ist, dass sie oft manuell erstellt werden und an angemessener Länge und Komplexität fehlen.Daher können Brute-Force-Angriffe ihre Sicherheit gefährden.SSH-Schlüssel bieten eine Option, die durchweg sicher ist.

Jedes SSH-Schlüsselpaar besteht aus einem privaten Schlüssel und einem passenden öffentlichen Schlüssel und kann anstelle von Passwörtern zur Authentifizierung verwendet werden.

Der private Schlüssel wird auf dem Computer des Clients gespeichert und funktioniert ähnlich wie ein Passwort.Wenn eine unbefugte Person Zugriff auf Ihren privaten Schlüssel hat, sollte dieser als kompromittiert angesehen und sofort ersetzt werden.Der private Schlüssel ist normalerweise mindestens 2048 Bit lang und kann optional mit einer Passphrase (essentially ein Passwort, das zur Verwendung des privaten Schlüssels benötigt wird) verschlüsselt werden, um seine Nutzung einzuschränken, falls eine unbefugte Person Zugriff darauf erhält.

Der entsprechende öffentliche Schlüssel wird ohne Konsequenzen frei verteilt.Der öffentliche Schlüssel wird verwendet, um Kommunikationen zu verschlüsseln, die nur der private Schlüssel entschlüsseln kann; dies ist die Grundlage der SSH-Schlüsselauthentifizierung.

Um die Verwendung eines privaten Schlüssels zur Authentifizierung zu ermöglichen, muss der zugehörige öffentliche Schlüssel im Benutzerkonto des Remote-Servers platziert werden.Der öffentliche Schlüssel muss in die Datei .ssh/authorized_keys im Heimatverzeichnis des entfernten Benutzers eingefügt werden.Wenn ein Client versucht, sich mit einem Remote-Server zu verbinden, kann der Server überprüfen, ob der Client über einen privaten Schlüssel verfügt, der mit einem der autorisierten öffentlichen Schlüssel übereinstimmt; wenn der private Schlüssel als übereinstimmend mit einem autorisierten öffentlichen Schlüssel verifiziert wird, wird der Client authentifiziert und eine Shell-Sitzung wird gestartet.

Sie können ssh-keygen verwenden, um RSA-Authentifizierungsschlüssel zu erstellen, indem Sie die folgenden Schritte befolgen.Um ein Paar aus öffentlichen und privaten Schlüsseln zu erzeugen, wählen Sie den Schlüsseltyp aus und folgen Sie den Anweisungen auf dem Bildschirm.Es wird empfohlen, die Schlüssel mit einem einprägsamen, aber schwer zu erratenden Passwort zu sichern.

  1. Führen Sie den nächsten Befehl aus.

    ssh-keygen -t rsa
  2. Drücken Sie die Eingabetaste, um die Standarddatei zu akzeptieren, in der der Schlüssel gespeichert werden soll.Wenn Sie die Standardeinstellung akzeptieren, werden die Schlüssel im .ssh-Verzeichnis unter dem Home-Verzeichnis Ihres Benutzers gespeichert.

  3. Geben Sie passphrase ein.Der private Schlüssel wird mit diesem optionalen Passwort verschlüsselt.Wenn Sie in diesem Feld eine Passphrase angeben, wird diese jedes Mal benötigt, wenn der private Schlüssel zur Authentifizierung verwendet wird.Die Authentifizierung erfordert sowohl den privaten Schlüssel als auch seine Passphrase, was zusätzlichen Schutz bieten kann, falls der private Schlüssel gehackt wird.Wenn Sie kein Passwort eingeben, können Sie den privaten Schlüssel verwenden, um sich ohne Passwort bei Ihren Servern anzumelden; die Authentifizierung hängt dann nur von Ihrem privaten Schlüssel ab, also seien Sie vorsichtig, ihn zu schützen.

  4. Geben Sie das Passwort erneut ein, um es zu bestätigen.

    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/username/.ssh/id_rsa):
    Created directory '/home/username/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /home/username/.ssh/id_rsa
    Your public key has been saved in /home/username/.ssh/id_rsa.pub
    The key fingerprint is:
    SHA256:ap4FzRbCtlHKTgeqME7t0Jgy0kEBSwCjVh4/eZyhHOE username@server
    The key's randomart image is:
    +---[RSA 3072]----+
    |B+++ oo.. |
    |o+B.=+=+o |
    |O*.+.EO+o |
    |*+o. +oB . |
    | ... + S |
    | + |
    | o . |
    | o o |
    | o |
    +----[SHA256]-----+

Der private Schlüssel wird in ~/.ssh/id_rsa aufbewahrt, während der öffentliche Schlüssel in ~/.ssh/id_rsa.pub aufbewahrt wird. Die schlüsselbasierte Authentifizierung erfordert, dass der öffentliche Schlüssel auf den Remote-Host in ~/.ssh/authorized_keys übertragen wird.Um den öffentlichen Schlüssel zu diesem Zweck auf den Remote-Server zu kopieren, müssen Sie möglicherweise ein paar Befehle ausführen.Sie müssen das Verzeichnis ~/.ssh erstellen, falls es noch nicht existiert, und dann den öffentlichen Schlüssel in eine Datei namens authorized_keys in das Verzeichnis einfügen.Sie können den >>-Umleitungsoperator verwenden, um den Schlüssel zur Datei authorized_keys hinzuzufügen, falls sie bereits existiert, wenn zuvor öffentliche SSH-Schlüssel im Benutzerkonto des entfernten Benutzers installiert wurden.

Angenommen, der Standardname Ihres öffentlichen Schlüssels ist id_rsa.pub, der Befehl zur Installation des öffentlichen SSH-Schlüssels lautet wie folgt (ersetzen Sie den entfernten Benutzer und Host):

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Geben Sie das Passwort ein und drücken Sie RETURN.Wenn der Befehl korrekt ausgeführt wurde, erhalten Sie keine Rückmeldung.Der Inhalt Ihres öffentlichen Schlüssels, id rsa.pub, wird ans Ende der autorisierten Schlüsseldatei des entfernten Benutzers eingefügt.

Sie können nun den folgenden Befehl ausführen, um sich mit dem SSH-Server unter Verwendung Ihres privaten Schlüssels zu verbinden:

ssh -i ~/.ssh/id_rsa -p 22 username@server.mycompany.com
warnung

Zahlreiche Benutzer glauben, dass Schlüssel sicher gestaltet sind und verwenden sie ohne ein Passwort.Dieses Verhalten ist gefährlich.Durch die manuelle Überprüfung des privaten Schlüssels kann ein Administrator feststellen, ob ein Schlüsselpaar durch eine Passphrase gesichert ist.Der Schlüsselinhaber verwendet eine Passphrase, wenn die private Schlüsseldatei den Begriff ENCRYPTED enthält.Darüber hinaus kann zur Verbesserung der Sicherheit der Endbenutzer ein from in die öffentliche Schlüsseldatei aufgenommen werden.Das Hinzufügen von from="10.10.10.5" vor dem ssh-rsa-Präfix beschränkt den Benutzer beispielsweise darauf, sich ausschließlich von dieser IP-Adresse aus anzumelden.

Wenn eine Passphrase verwendet wird, wird der Benutzer jedes Mal aufgefordert, diese einzugeben, wenn eine Verbindung zum Server hergestellt wird.Sie können ssh-agent und ssh-add verwenden, um SSH-Schlüssel in den Speicher zu laden und die Notwendigkeit zu beseitigen, das Passwort jedes Mal einzugeben.

ssh-agent verwaltet die Authentifizierung mithilfe der privaten Schlüssel, die ihm hinzugefügt werden.ssh-agent kann unter anderem verwendet werden, um eine Shell oder einen Fenstermanager auszuführen.

Um ssh-agent in einer Shell zu verwenden, geben Sie eine Shell als Parameter des Befehls an.Fügen Sie die Identität hinzu, indem Sie ssh-add ausführen und das Passwort des privaten Schlüssels angeben.Der Benutzer wird dann in der Lage sein, sich mit jedem Host zu verbinden, auf dem der öffentliche Schlüssel installiert ist.

ssh-agent csh
% ssh-add
Enter passphrase for key '/usr/home/username/.ssh/id_rsa':
Identity added: /usr/home/username/.ssh/id_rsa (/usr/home/username/.ssh/id_rsa)

Um ssh-agent mit Xorg zu nutzen, fügen Sie einen Eintrag in ~/.xinitrc dafür hinzu.Dies bietet ssh-agent-Dienste für alle von Xorg gestarteten Apps an.Ein Beispiel für eine ~/.xinitrc könnte wie folgt aussehen:

exec ssh-agent startxfce4

Jedes Mal, wenn Xorg startet, wird ssh-agent gestartet, der wiederum XFCE ausführt.Sobald Xorg neu gestartet wurde, um die Änderungen wirksam werden zu lassen, führen Sie ssh-add aus, um alle SSH-Schlüssel zu laden.

Wie man die Passwortauthentifizierung deaktiviert?

Sie haben Ihr Konto im vorherigen Abschnitt erfolgreich für die Authentifizierung mit SSH-Schlüsseln eingerichtet.Allerdings ist das passwortbasierte Authentifizierungssystem Ihres Servers weiterhin aktiv, was ihn anfällig für Brute-Force-Angriffe macht.

Bevor Sie die Anweisungen in diesem Abschnitt abschließen, stellen Sie sicher, dass die SSH-Schlüssel-Authentifizierung entweder für das Root-Konto auf diesem Server eingerichtet ist oder, vorzugsweise, für ein Konto mit Sudo-Zugriff.Dieser Schritt wird passwortbasierte Anmeldungen deaktivieren, daher ist es entscheidend, dass Sie weiterhin administrativen Zugriff haben.

Sobald die oben genannten Voraussetzungen erfüllt sind, verbinden Sie sich mit dem Remote-Server über SSH-Schlüssel als Root oder mit einem Konto mit Sudo-Rechten. Bearbeiten Sie die Konfigurationsdatei für SSH unter /etc/ssh/sshd_config und fügen Sie folgende Zeile zur Konfiguration hinzu:

ChallengeResponseAuthentication no

Damit die Änderungen wirksam werden, muss der sshd-Dienst neu gestartet werden.Dieser Befehl wird den SSH-Daemon auf FreeBSD neu starten:

service sshd restart

Die Passwortauthentifizierung wurde entfernt, daher muss jeder SSH-Zugriff auf den Server jetzt die SSH-Schlüsselauthentifizierung verwenden.

Wie erstellt man einen SSH-Tunnel?

OpenSSH ist in der Lage, einen Tunnel zu erstellen, um ein anderes Protokoll innerhalb einer sicheren Sitzung zu kapseln.Zum Beispiel, um einen Tunnel für Telnet zu erstellen, können Sie den folgenden Befehl ausführen:

ssh -2  -N  -f  -L 5023:localhost:23 username@server.mycompany.com

Diese Illustration verwendet die folgenden Optionen:

  • -2: Erzwingt, dass ssh sich mit dem Server über Version 2 verbindet.

  • N: Gibt an, dass kein Befehl oder nur der Tunnelbetrieb verwendet wird.Wenn nicht angegeben, stellt ssh eine Standardsitzung her.

  • -f: Führt ssh im Hintergrund aus.

  • -L: Gibt einen lokalen Tunnel im Format localport:remotehost:remoteport an.

  • [email protected]: Der Benutzername, der auf dem angegebenen Remote-SSH-Server verwendet werden soll.

Ein SSH-Tunnel funktioniert, indem er einen localhost listen Socket auf dem angegebenen localport erstellt.Es leitet dann alle Verbindungen, die auf localport empfangen werden, über die SSH-Verbindung an remotehost:remoteport weiter.Im Beispiel wird der Port 5023 des Clients an den Port 23 der entfernten Maschine weitergeleitet.Da Telnet den Port 23 verwendet, wird dadurch eine verschlüsselte Telnet-Verbindung über einen SSH-Tunnel erzeugt.

Wie in den folgenden Beispielen zu sehen ist, kann dieser Ansatz verwendet werden, um eine beliebige Anzahl unsicherer TCP-Protokolle wie SMTP, POP3 und FTP zu kapseln.

  • Um einen sicheren Tunnel für SMTP zu erstellen, führen Sie den folgenden Befehl aus:

    ssh -2  -N  -f  -L 5025:localhost:25 username@server.mycompany.com

    Zusammen mit ssh-keygen und anderen Benutzerkonten kann dies verwendet werden, um eine nahtlosere SSH-Tunneling-Umgebung zu schaffen.Schlüssel können anstelle eines Passworts eingegeben werden, und Tunnel können als ein separater Benutzer betrieben werden.

  • Um einen sicheren Tunnel für POP3 zu erstellen, führen Sie den folgenden Befehl aus:

    ssh -2  -N  -f  -L 2110:mailserver.mycompany.com:110 username@ssh-server.mycompany.com

In diesem Fall erlaubt ein SSH-Server Verbindungen von der Außenwelt.Im selben Netzwerk befindet sich ein Mailserver mit POP3-Serverfunktionalität.Um E-Mails sicher abzurufen, stellen Sie eine SSH-Verbindung zum SSH-Server her und tunneln Sie zum Mail-Server:

Sobald der Tunnel betriebsbereit ist, konfigurieren Sie den E-Mail-Client so, dass POP3-Anfragen an localhost auf Port 2110 gesendet werden.Diese Verbindung wird sicher durch den Tunnel an mailserver.mycompany.com gesendet.

Um eine Firewall zu umgehen, können Sie den folgenden Befehl verwenden:

ssh -2  -N  -f  -L 8888:musicsite.com:8000 user@unfirewalled-system.myhome.net

Einige Firewalls überprüfen sowohl ausgehende als auch eingehende Verbindungen.Zum Beispiel kann eine Firewall den Zugriff auf entfernte Computer auf die Ports 22 und 80 beschränken, sodass nur SSH und Web-Browsing erlaubt sind.Dies schränkt den Zugriff auf alle Dienste ein, die einen anderen Port als 22 oder 80 verwenden.Die Lösung besteht darin, eine SSH-Verbindung zu einem Computer außerhalb der Firewall des Netzwerks herzustellen und über diese Verbindung zu dem benötigten Dienst zu tunneln.

Ein Streaming-Client kann jetzt auf localhost Port 8888 geleitet werden, der auf musicsite.com Port 8000 umgeleitet wird, wodurch die Firewall erfolgreich umgangen wird.

Wie aktiviere ich den SSH-Server?

Neben der Bereitstellung von SSH-Client-Tools kann FreeBSD auch als SSH-Server konfiguriert werden, der Verbindungen von anderen SSH-Clients akzeptiert.

  • Um festzustellen, ob sshd läuft, verwenden Sie den Befehl service:

    service sshd status
  • Fügen Sie die folgende Zeile zu /etc/rc.conf hinzu, wenn der ssh-Dienst nicht läuft:

    sshd_enable="YES"

Dies wird sshd, die OpenSSH-Daemon-Anwendung, beim nächsten Booten der Maschine starten.

Um den SSH-Server sofort zu starten, führen Sie den folgenden Befehl aus:

service sshd start

OpenSSH-Daemon (sshd) ist die SSH-Daemon-Anwendung.Es sichert die Kommunikation zwischen zwei nicht vertrauenswürdigen Standorten über ein unsicheres Netzwerk.sshd wartet auf Client-Verbindungen.Es wird oft von /etc/rc.d/sshd beim Booten gestartet.Es erstellt einen separaten Daemon für jede eingehende Verbindung.Schlüsselaustausch, Verschlüsselung, Authentifizierung, Befehlsausführung und Datenaustausch werden von den geforkten Daemons verwaltet.

sshd kann mithilfe von Befehlszeilenargumenten oder einer Konfigurationsdatei (sshd_config standardmäßig) angepasst werden; Befehlszeilenoptionen haben Vorrang vor Werten, die in der Konfigurationsdatei angegeben sind.

Die CLI-Syntax von sshd ist unten angegeben:

sshd [-46DdeiqTt] [-C  connection_spec] [-c  host_certificate_file]
[-E log_file] [-f config_file] [-g login_grace_time]
[-h host_key_file] [-o option] [-p port] [-u len]

Wenn sshd das SIGHUP-Signal erhält, liest es seine Konfigurationsdatei erneut, indem es sich mit dem Namen und den Einstellungen, mit denen es gestartet wurde, wie /usr/sbin/sshd, erneut ausführt.

Wenn sshd zum ersten Mal auf einem FreeBSD-System gestartet wird, werden die Host-Schlüssel sofort generiert und der Fingerabdruck wird auf der Konsole angezeigt.Geben Sie den Fingerabdruck den Benutzern, damit sie ihn beim ersten Verbinden mit dem Server validieren können.

Sie können netstat oder sockstat verwenden, um zu bestätigen, dass ssh funktioniert und TCP-Port 22 zugänglich ist:

 netstat -na | grep LISTEN

Sie sollten eine Ausgabe sehen, die der folgenden ähnlich ist:

tcp4       0      0 *.587                  *.*                    LISTEN
tcp6 0 0 *.25 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
tcp4 0 0 *.80 *.* LISTEN
tcp6 0 0 *.80 *.* LISTEN
tcp4 0 0 127.0.0.1.9000 *.* LISTEN
tcp4 0 0 127.0.0.1.3306 *.* LISTEN
tcp46 0 0 *.33060 *.* LISTEN
tcp4 0 0 *.22 *.* LISTEN
tcp6 0 0 *.22 *.* LISTEN
sockstat -4 -l

Sie sollten eine Ausgabe sehen, die der folgenden ähnlich ist:

USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root sendmail 2403 5 tcp4 *:25 *:*
root sendmail 2403 7 tcp4 *:587 *:*
www httpd 2213 4 tcp4 *:80 *:*
www httpd 2212 4 tcp4 *:80 *:*
www httpd 2211 4 tcp4 *:80 *:*
www httpd 2210 4 tcp4 *:80 *:*
www httpd 2209 4 tcp4 *:80 *:*
root httpd 2198 4 tcp4 *:80 *:*
www php-fpm 2190 6 tcp4 127.0.0.1:9000 *:*
www php-fpm 2183 6 tcp4 127.0.0.1:9000 *:*
root php-fpm 2182 8 tcp4 127.0.0.1:9000 *:*
mysql mysqld 2170 29 tcp46 *:33060 *:*
mysql mysqld 2170 32 tcp4 127.0.0.1:3306 *:*
root sshd 1007 4 tcp4 *:22 *:*
root syslogd 831 7 udp4 *:514 *:*
  • Um den sshd-Dienst zu stoppen, führen Sie den folgenden Befehl aus
service sshd stop
  • Um den sshd-Dienst neu zu starten, führen Sie den folgenden Befehl aus
service sshd restart

Wie sichert man einen SSH-Server?

Trotz der Tatsache, dass sshd die beliebteste Fernverwaltungsfunktion für FreeBSD ist, sind Brute-Force- und Drive-by-Angriffe typisch für jedes System, das über öffentliche Netzwerke zugänglich ist.Mehrere andere Einstellungen sind verfügbar, um zu verhindern, dass diese Angriffe erfolgreich sind, und sie werden in diesem Abschnitt detailliert beschrieben.

  • Mit dem Schlüsselwort AllowUsers in der Konfigurationsdatei des OpenSSH-Servers ist es ratsam, einzuschränken, welche Benutzer sich von welchen Adressen aus am SSH-Server anmelden dürfen. Um beispielsweise Root-Anmeldungen auf die IP-Adresse 192.168.0.10 zu beschränken, fügen Sie die folgende Zeile in die Datei /etc/ssh/sshd_config ein:

    AllowUsers root@192.168.0.10
  • Um dem Benutzer admin die Anmeldung von überall zu erlauben, geben Sie den Benutzer ohne IP-Adresse an. Fügen Sie dazu die folgende Zeile in die Datei /etc/ssh/sshd_config ein:

    AllowUsers admin
  • Mehrere Benutzer müssen in einer einzigen Zeile erwähnt werden, wie folgt:

    AllowUsers root@192.168.0.10 admin
  • Um SSH so zu konfigurieren, dass es einen anderen TCP-Port verwendet – zum Beispiel 2222 statt 22 –, fügen Sie die folgende Zeile in die Datei /etc/ssh/sshd_config ein:

    Port 2222
  • FreeBSD deaktiviert standardmäßig die SSH-Anmeldung als Root aus Sicherheitsgründen. Daher können Sie sich nicht als Root-Benutzer per SSH mit Ihrem FreeBSD-Server verbinden. Es wird dringend empfohlen, die SSH-Anmeldung für Root deaktiviert zu lassen und stattdessen einen nicht privilegierten Benutzer mit SSH-Zugriff zu verwenden. Wenn Sie dennoch aus bestimmten Gründen Root den SSH-Zugriff gewähren möchten, können Sie die folgende Zeile in die Datei /etc/ssh/sshd_config einfügen:

    PermitRootLogin yes

Nach dem Ändern der Datei /etc/ssh/sshd_config weisen Sie sshd an, seine Konfigurationsdatei neu zu laden, indem Sie folgenden Befehl ausführen:

service sshd reload
warnung

Wenn dieses Schlüsselwort verwendet wird, ist es unerlässlich, jeden Benutzer anzugeben, der sich an diesem Computer anmelden muss.Jeder Benutzer, der nicht in dieser Zeile aufgeführt ist, wird der Zugriff verweigert.Zusätzlich gilt für die in der OpenSSH-Serverkonfigurationsdatei verwendeten Schlüsselwörter die Groß- und Kleinschreibung.Wenn das Schlüsselwort falsch geschrieben ist, einschließlich seiner Groß- und Kleinschreibung, wird es ignoriert.Testen Sie immer die Änderungen an dieser Datei, um sicherzustellen, dass sie wie erwartet funktionieren.

Darüber hinaus kann von den Benutzern verlangt werden, die Zwei-Faktor-Authentifizierung mit einem öffentlichen und einem privaten Schlüssel zu implementieren.Bei Bedarf kann der Benutzer ein Schlüsselpaar mit ssh-keygen erstellen und den öffentlichen Schlüssel dem Administrator übermitteln.Diese Schlüsseldatei wird dem Verzeichnis der autorisierten Schlüssel hinzugefügt, wie zuvor im Abschnitt für Clients angegeben.Um die Benutzer zu zwingen, nur Schlüssel zu verwenden, kann die folgende Konfigurationsoption aktiviert werden:

AuthenticationMethods publickey
tipp

Verwechseln Sie nicht /etc/ssh/sshd_config mit /etc/ssh/ssh_config (beachten Sie das zusätzliche d im ersten Dateinamen). Die erste Datei konfiguriert den Server, während die zweite Datei den Client konfiguriert.