Implementierung der One-Click-TLS-Verschlüsselung für die Docker-Remote-API

Implementierung der One-Click-TLS-Verschlüsselung für die Docker-Remote-API

Vor Kurzem wurde der Server des Unternehmens gehackt und die Ursache schließlich am Port 2375 von Docker ausfindig gemacht.

Lassen Sie uns das klären. Zunächst stellten wir fest, dass sich aus unbekannten Gründen mehrere weitere Images und laufende Container in Docker befanden, die sehr CPU-intensiv waren. Darüber hinaus wurden für Port 2375 keine IP-Zugriffsregeln festgelegt, was bedeutet, dass jeder Ihren Docekr über Ihren Port 2375 betreiben und den Host-Ordner mit dem Startcontainer mounten kann. Da Docker mit Root-Berechtigungen gestartet wird, kann jeder Ihren Host über Ihren Port 2375 als Root-Benutzer steuern.

Hier sind unsere Reaktionsschritte:

1. Ändern Sie den Port 2375 von Docker in einen anderen Port. Dies ist nur eine Notlösung.

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

Bildbeschreibung hier einfügen

Docker neu starten:

$ systemctl daemon-neu laden
$ systemctl Neustart Docker

2. TLS für Docker verschlüsseln

#!/bin/bash
mkdir -p /root/tls/pem
DOMAIN_HOST=`ifconfig eth0 | grep "inet" | awk '{ print $2}' | sed -n '1p;1q'`
#DOMAIN_HOST=`hostname` #Wählen Sie den besten Domänennamenplan HOST=$DOMAIN_HOST
# Benutzerdefinierte Informationen PASSWORD="IhrPasswort"
LAND=CN
PROVINZ=gd
STADT=gz
ORGANISATION=dounine
GRUPPE=dg
NAME=See
SUBJ="/C=$LAND/ST=$PROVINZ/L=$STADT/O=$ORGANISATION/OU=$GRUPPE/CN=$HOST"
# Benutzerdefinierte Informationen#=================================================================================================================
#Mit diesem Formular stellen Sie sich selbst ein Zertifikat aus. Sie können eine Zertifizierungsstelle sein oder es einer Drittorganisation zur Ausstellung übergeben. #Generieren Sie den privaten RSA-Schlüssel des Stammzertifikats und verwenden Sie das Passwort als privates Schlüsselkennwort (Ausweis).
openssl genrsa -passout pass:$PASSWORT -aes256 -out /root/tls/pem/ca-key.pem 4096
# 2. Generieren Sie ein selbstsigniertes Stammzertifikat (Geschäftslizenz) mit dem privaten RSA-Schlüssel des Stammzertifikats
openssl req -new -x509 -days 365 -passin pass:$PASSWORT -key /root/tls/pem/ca-key.pem -sha256 -subj $SUBJ -out /root/tls/pem/ca.pem
#============================================================================================
#Stellen Sie dem Server ein Zertifikat aus# 1. Der Server generiert seinen eigenen privaten Schlüssel openssl genrsa -out /root/tls/pem/server-key.pem 4096
# 2. Der Server generiert ein Zertifikat (das den öffentlichen Schlüssel und die Serverinformationen enthält)
openssl req -new -sha256 -key /root/tls/pem/server-key.pem -out /root/tls/pem/server.csr -subj "/CN=$DOMAIN_HOST"
# 3. Wie verbinde ich mich mit mir? Sie können mehrere IP-Adressen festlegen und diese durch Kommas trennen echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf
# 4. Die Zertifizierungsstelle stempelt das Zertifikat, um es wirksam zu machen openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in /root/tls/pem/server.csr -CA /root/tls/pem/ca.pem -CAkey /root/tls/pem/ca-key.pem -CAcreateserial -out /root/tls/pem/server-cert.pem -extfile /tmp/extfile.cnf
#============================================================================================
#Stellen Sie dem Client ein Zertifikat aus openssl genrsa -out /root/tls/pem/client-key.pem 4096
openssl req -subj '/CN=client' -new -key /root/tls/pem/client-key.pem -out /root/tls/pem/client.csr
echo extendedKeyUsage = clientAuth > /tmp/extfile.cnf
openssl x509 -passin pass:$PASSWORT -req -days 365 -sha256 -in /root/tls/pem/client.csr -CA /root/tls/pem/ca.pem -CAkey /root/tls/pem/ca-key.pem -CAcreateserial -out /root/tls/pem/client-cert.pem -extfile /tmp/extfile.cnf
#============================================================================================
# Bereinigen Sie die Datei rm -rf /root/tls/pem/ca-key.pem
rm -rf /root/tls/pem/{server,client}.csr
rm -rf /root/tls/pem/ca.srl
# Endgültige Datei# ca.pem == CA-Zertifikat# client-cert.pem == Client-Zertifikat# client-key.pem == Privater Client-Schlüssel# server-cert.pem == Server-Zertifikat# server-key.pem == Privater Server-Schlüssel

Beachten:

  • Wenn DOMAIN_HOST auf den Domänennamen eingestellt ist, echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf. Das $DOMAIN_HOST in diesem Code sollte durch die öffentliche IP-Adresse Ihres Servers ersetzt werden.
  • echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > IP:0.0.0.0 in /tmp/extfile.cnf bedeutet, dass auf alle IPs mit Zertifikaten zugegriffen werden kann. Obwohl hier alle eingestellt sind, sollte die öffentliche IP Ihres Servers nicht ausgelassen werden. Das heißt, IP:$yourip,IP:0.0.0.0, nicht IP:0.0.0.0

Geben Sie der Datei Ausführungsberechtigungen:

$ chmod +x tls.sh

Nach der Ausführung des Shell-Skripts werden ca.pem, client-cert.pem, client-key.pem, server-cert.pem und server-key.pem im Verzeichnis /root/tls/pem generiert.

Ändern Sie dann die Docker-Konfiguration:

$ vim /usr/lib/systemd/system/docker.service

Hinzufügen zu:

		--tlsverify \
        --tlscacert=/root/tls/pem/ca.pem \
        --tlscert=/root/tls/pem/server-cert.pem \
        --tlskey=/root/tls/pem/server-key.pem \


Docker neu starten:

$ systemctl daemon-neu laden
$ systemctl Neustart Docker

Stellen Sie jetzt mithilfe der Docker-Remote-API eine Verbindung her:

Keine Zertifizierung:

$ docker -H tcp://192.168.0.150:2376 version

Es wird eine Fehlermeldung angezeigt, die darauf hinweist, dass die Authentifizierung nicht erfolgreich war.

Carry-Authentifizierungsmethode:

docker --tlsverify --tlscacert=/root/tls/pem/ca.pem --tlscert=/root/tls/pem/client-cert.pem --tlskey=/root/tls/pem/client-key.pem -H tcp://192.168.0.150:2376 Version

Dies ist das Ende dieses Artikels über die Implementierung der One-Click-TLS-Verschlüsselung der Docker-Remote-API. Weitere verwandte Inhalte zur One-Click-TLS-Verschlüsselung der Docker-Remote-API 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:
  • Detailliertes Beispiel für eine Remote-Verbindung zu Docker mithilfe einer TLS-verschlüsselten Kommunikation
  • So aktivieren Sie TLS- und CA-Authentifizierung in Docker
  • Docker stellt eine MySQL-Remoteverbindung bereit, um 2003-Probleme zu lösen
  • Docker ermöglicht sicheren TLS-Remoteverbindungszugriff

<<:  Beispiel für die Verwendung des href-Attributs und des onclick-Ereignisses eines Tags

>>:  Die umfassendste Erklärung des Sperrmechanismus in MySQL

Artikel empfehlen

Der eigentliche Prozess der Einbindung von Axios in das Projekt

Inhaltsverzeichnis Vorwort Vorteile der Axios-Kap...

So installieren Sie Docker mit YUM

Wie in der folgenden Abbildung dargestellt: Wenn ...

JavaScript implementiert kreisförmiges Karussell

In diesem Artikel wird der spezifische JavaScript...

So führen Sie JavaScript in Jupyter Notebook aus

Später habe ich auch hinzugefügt, wie man Jupyter...

Beispielschritte zur Verwendung von AntV X6 mit Vue.js

Inhaltsverzeichnis 0x0 Einführung 0x1 Installatio...

Vue implementiert die browserseitige Code-Scan-Funktion

Hintergrund Vor nicht allzu langer Zeit habe ich ...

Detailliertes Linux-Installationstutorial

(Win7-System) Tutorial zur Installation einer vir...

Neunundvierzig JavaScript-Tipps und Tricks

Inhaltsverzeichnis 1. Betrieb von js Integer 2. S...

Bild-Scrolling-Effekt mit CSS3 erstellt

Ergebnisse erzielenImplementierungscode html <...

So verwenden Sie den Linux-Befehl nl

1. Befehlseinführung nl (Anzahl der Zeilen) fügt ...

Ausführliche Erläuterung versteckter Felder, einer neuen Funktion von MySQL 8.0

Vorwort MySQL Version 8.0.23 fügt eine neue Funkt...

Implementierung des Wasserfall-Layouts im Uni-App-Projekt

GitHub-Adresse, Sie können es mit einem Stern mar...

So legen Sie die Anzahl der MySQL-Verbindungen fest (zu viele Verbindungen)

Während der Verwendung von MySQL wurde festgestel...