Detailliertes grafisches Tutorial zum Aktivieren des sicheren Remotezugriffs mit Docker

Detailliertes grafisches Tutorial zum Aktivieren des sicheren Remotezugriffs mit Docker

1. Bearbeiten Sie die Datei docker.service

vi /usr/lib/systemd/system/docker.service

Suchen Sie den Knoten [Service] , ändern Sie die Eigenschaft ExecStart und fügen Sie -H tcp://0.0.0.0:2375 hinzu

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

Dies entspricht dem Öffnen von Port 2375 für die Außenwelt. Natürlich können Sie ihn je nach Ihrer Situation auch auf andere Ports ändern.

2. Laden Sie die Docker-Konfiguration neu, damit sie wirksam wird

systemctl daemon-reload
systemctl Neustart Docker

Wir testen es, indem wir über den Browser auf 2375 zugreifen. Das Format ist: http://ip:2375/version

Wenn Sie nicht darauf zugreifen können, können Sie versuchen, den Firewall-Port 2375 zu öffnen. Die spezifischen Befehle lauten wie folgt:

Firewall-Befehl --zone=public --add-port=2375/tcp --permanent
Firewall-Befehl --reload

Wenn Sie immer noch nicht darauf zugreifen können und es sich bei der von Ihnen verwendeten Maschine um einen Cloud-Server wie Alibaba Cloud, Tencent Cloud usw. handelt, müssen Sie in den Server-Sicherheitsgruppenregeln überprüfen, ob Port 2375 geöffnet ist. Wenn nicht, fügen Sie die Portkonfiguration hinzu.

Auf diese Weise können wir eine direkte Verbindung zum Test im Docker-Plugin in Idea herstellen:

3. Konfigurieren Sie den sicheren Docker-Zugriff

Die beiden oben genannten Schritte sollten nicht in einer Produktionsumgebung verwendet werden! Es ist in Ordnung, es in der Entwicklungsumgebung zu verwenden. Wenn Sie Docker auf diese Weise direkt der Außenwelt aussetzen, ist dies sehr gefährlich, genauso wie Sie Redis 6379 ohne Festlegung eines Kennworts für die Außenwelt öffnen.

Im Grunde ähneln viele Artikel im Internet den beiden oben genannten Schritten, den nackten Schritten ... Denken Sie darüber nach, denken Sie sorgfältig darüber nach, wenn nicht Sie, wer wird dann gehackt?

Tatsächlich wurde im offiziellen Dokument bereits eine Verschlüsselungsmethode auf Basis von CA-Zertifikaten bereitgestellt. Weitere Einzelheiten finden Sie hier.

1. Erstellen Sie einen privaten CA-Schlüssel und einen öffentlichen CA-Schlüssel

Erstellen Sie zunächst einen CA-Ordner, um den privaten und den öffentlichen Schlüssel zu speichern

mkdir -p /usr/local/ca
cd /usr/local/ca

Generieren Sie dann auf dem Host des Docker-Daemons die privaten und öffentlichen Schlüssel der Zertifizierungsstelle:

openssl genrsa -aes256 -out ca-key.pem 4096

Nachdem wir die obigen Anweisungen ausgeführt haben, werden wir aufgefordert, ein Passwort einzugeben, bevor wir mit dem nächsten Schritt fortfahren. Hier habe ich das Passwort auf: niceyoo gesetzt

2. Vervollständigen Sie die CA-Zertifikatsinformationen

Führen Sie den folgenden Befehl aus:

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

Geben Sie dann der Reihe nach Folgendes ein: Zugangspasswort, Land, Provinz, Stadt, Name der Organisation, Name der Einheit, beliebiger Name, E-Mail-Adresse usw. Um Zeit zu sparen, verwende ich niceyoo anstelle von Organisation, Einheit usw.

niceyoo cn Peking Peking niceyoo niceyoo niceyoo [email protected]

An diesem Punkt wurde das CA-Zertifikat erstellt. Mit der CA können Sie einen Serverschlüssel und eine Zertifikatsignieranforderung (CSR) erstellen und dabei sicherstellen, dass der „Common Name“ mit dem Hostnamen übereinstimmt, den Sie bei der Verbindung mit Docker verwenden.

3. Generieren Sie server-key.pem

openssl genrsa -out server-key.pem 4096

4. Signieren Sie den öffentlichen Schlüssel bei CA

Da TLS-Verbindungen sowohl über IP-Adressen als auch über DNS-Namen hergestellt werden können, müssen Sie beim Erstellen des Zertifikats die IP-Adresse angeben. Um beispielsweise Verbindungen über 10.211.55.4 zuzulassen:

openssl req -subj "/CN=10.211.55.4" -sha256 -new -key server-key.pem -out server.csr

Wenn Sie eine URL verwenden (zum Beispiel: www.sscai.club), ersetzen Sie diese einfach:

openssl req -subj "/CN=www.sscai.club" -sha256 -new -key server-key.pem -out server.csr

Hinweis: Bei dem hier genannten IP- bzw. Domänennamen handelt es sich um die Adresse, die zukünftig für externe Zwecke verwendet wird.

5. Passende Whitelist

Die Bedeutung der Konfiguration der Whitelist besteht darin, zuzulassen, welche IP-Adressen eine Remote-Verbindung zu Docker herstellen können. Es gibt zwei Möglichkeiten, dies zu tun, aber Sie können einfach Schritt 2 von 5.2 ausführen:

5.1. Erlauben Sie der angegebenen IP, eine Verbindung zum Docker im Server herzustellen. Mehrere IPs werden durch Kommas getrennt.

Wenn Ihre externe Docker-Adresse eine IP-Adresse ist, lautet der Befehl wie folgt:

echo subjectAltName = DNS:$HOST,IP:XX.XX.XX.XX,IP:XX.XX.XX.XX >> extfile.cnf

Ersetzen Sie bei der Verwendung $HOST durch Ihre eigene IP-Adresse oder URL, je nachdem, ob der Docker-Link, den Sie der Außenwelt zugänglich machen, eine IP-Adresse oder eine URL ist.

# Docker auf dem Server 10.211.55.4 erlaubt nur Clients mit der IP-Adresse 221.217.177.151 eine Verbindung echo subjectAltName = DNS:10.211.55.4,IP:221.217.177.151 >> extfile.cnf

# Docker auf dem Server www.sscai.club erlaubt nur Clients mit den IP-Adressen 221.217.177.151 und 127.0.0.1 eine Verbindung echo subjectAltName = DNS:www.sscai.club,IP:221.217.177.151,IP:127.0.0.1 >> extfile.cnf

5.2. Konfigurieren Sie 0.0.0.0, um allen IPs die Verbindung zu ermöglichen (aber nur diejenigen mit permanenten Zertifikaten können erfolgreich eine Verbindung herstellen)

echo subjectAltName = DNS:10.211.55.4,IP:0.0.0.0 >> extfile.cnf

6. Befehle ausführen

Legen Sie die erweiterte Verwendungseigenschaft des Docker-Daemon-Schlüssels so fest, dass er nur für die Serverauthentifizierung verwendet wird:

echo extendedKeyUsage = serverAuth >> extfile.cnf

7. Signatur-Integer generieren

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf

Nach der Ausführung müssen Sie das oben festgelegte Passwort eingeben

8. Client key.pem generieren

openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

9. Machen Sie den Schlüssel für die Client-Authentifizierung geeignet

Erstellen Sie eine Erweiterungskonfigurationsdatei:

echo extendedKeyUsage = clientAuth >> extfile.cnf
echo extendedKeyUsage = clientAuth > extfile-client.cnf

10. Signatur-Integer generieren

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf

Generieren Sie cert.pem, Sie müssen das zuvor festgelegte Passwort erneut eingeben: niceyoo

11. Löschen Sie unnötige Dateien, zwei ganzzahlige Signaturanforderungen

Nach dem Generieren cert.pem und server-cert.pem können Sie sowohl die Zertifikatsignieranforderung als auch die erweiterte Konfigurationsdatei sicher löschen:

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

12. Änderbare Berechtigungen

Um Ihren Schlüssel vor versehentlicher Beschädigung zu schützen, entfernen Sie seine Schreibberechtigungen. Um sie für Sie schreibgeschützt zu machen, ändern Sie den Dateimodus wie folgt:

chmod -v 0400 ca-key.pem key.pem server-key.pem

Das Zertifikat kann öffentlich lesbar gemacht werden, indem die Schreibberechtigungen entfernt werden, um eine versehentliche Beschädigung zu verhindern:

chmod -v 0444 ca.pem server-cert.pem cert.pem

13. Server-Zertifikate sammeln

cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

14. Docker-Konfiguration ändern

Sorgen Sie dafür, dass der Docker-Daemon nur Verbindungen von Clients akzeptiert, die ein von der Zertifizierungsstelle vertrauenswürdiges Zertifikat vorweisen

vim /lib/systemd/system/docker.service

Ersetzen Sie den Eigenschaftswert ExecStart :

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

15. Daemon neu laden und Docker neu starten

systemctl daemon-reload

systemctl Neustart Docker

Lassen Sie uns dies im Docker-Modul in IDEA überprüfen und einen Blick auf die vorherige Verbindung werfen:

Offensichtlich ist es nicht möglich, eine Verbindung herzustellen. Zu diesem Zeitpunkt müssen wir das vom Docker-Host erstellte Zertifikat abrufen und es zum Herstellen einer Verbindung verwenden:

Ziehen Sie diese vier Zertifikatsdateien in einen lokalen Ordner. Dieser Ordner wird zur Angabe in idea verwendet. Es ist zu beachten, dass der Link in TCP in das HTTPS-Format geändert werden muss. Der spezifische Inhalt ist in der folgenden Abbildung dargestellt:

Zusammenfassen

Damit ist dieser Artikel über das ausführliche grafische Tutorial zum Aktivieren des sicheren Remotezugriffs mit Docker abgeschlossen. Weitere Informationen zum Remotezugriff auf Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Lösung für das Problem, dass beim Hinzufügen eines Tomcat-Containers zu Docker kein Zugriff auf die Homepage möglich ist
  • So greifen Sie über eine unabhängige IP direkt auf das Docker-für-Windows-Container-Intranet zu
  • Eine Fehlerbehebungserfahrung im CentOS-Docker-Bridge-Modus, bei dem auf den Host-Redis-Dienst nicht zugegriffen werden kann
  • Detaillierte Erklärung zur Verwendung von Docker zum Erstellen von extern zugänglichem MySQL
  • Detaillierte Erläuterung zur Lösung des Problems, dass der Docker-Container nicht über IP auf den Hostcomputer zugreifen kann
  • So greifen Sie in Docker auf den lokalen Computer (Hostcomputer) zu
  • So verwenden Sie einen Docker-Container für den Zugriff auf das Host-Netzwerk
  • Lösung für das Problem, dass Docker Nginx nach dem Ausführen nicht mehr aufgerufen werden kann
  • Methode zum Zugriff auf unabhängige IP im Docker-Container
  • Drei Möglichkeiten zur Kommunikation zwischen Docker-Containern

<<:  JavaScript Snake-Implementierungscode

>>:  Vue-Methode zum Überprüfen, ob der Benutzername verfügbar ist

Artikel empfehlen

Zusammenfassung zum Erlernen von HTML-Tags und Grundelementen

1. Elemente und Tags in HTML <br />Ein Elem...

So erfassen Sie Ausnahmen in React

Inhaltsverzeichnis Vorwort Fehlergrenze Jenseits ...

Sortieren von MySQL-Aggregatfunktionen

Inhaltsverzeichnis MySQL-Ergebnissortierung - Agg...

Zusammenfassung der Shell-Methode zum Bestimmen, ob eine Variable leer ist

So ermitteln Sie, ob eine Variable in der Shell l...

Javascript zum Erzielen eines Trommeleffekts

In diesem Artikel wird der spezifische Code von J...

Diskussion zum Problem verstümmelter Zeichen in Iframe-Seitenparametern

Ich bin auf ein sehr ungewöhnliches Problem mit ve...

MySql 8.0.16-win64 Installations-Tutorial

1. Entpacken Sie die heruntergeladene Datei wie u...

HTML-Auszeichnungssprache - Tabellen-Tag

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Teilen Sie 9 Linux Shell Scripting Tipps für die Praxis und Interviews

Vorsichtsmaßnahmen 1) Interpreter am Anfang hinzu...

Zwei Verwendungen von iFrame-Tags in HTML

Ich habe kürzlich an einem Projekt gearbeitet – B...

Lösungen für Probleme bei der Verwendung von addRoutes in Vue-Projekten

Inhaltsverzeichnis Vorwort 1. 404 Seite 1. Ursach...

So finden Sie Informationen zu nicht festgeschriebenen Transaktionen in MySQL

Vor einiger Zeit habe ich einen Blogbeitrag mit d...

JavaScript zur Implementierung des Anmeldeformulars

In diesem Artikelbeispiel wird der spezifische Ja...