
En este tutorial, veremos cómo configurar el acceso remoto al daemonDockerutilizando el puerto 2376, lo que te permitirá gestionar tus contenedores de forma remota o supervisarlos.
Hay dos puertos que permiten el acceso remoto:
- el 2375, que no es seguro ni en cuanto al tráfico ni en cuanto al acceso,
- el 2376, que está protegido mediante TLS y utiliza un conjunto de certificados para asegurar el acceso
En ambos casos, no hay autenticación mediante cuenta y contraseña; solo el uso del puerto 2376 permite proteger el acceso mediante un conjunto de certificados.
Como hay bastantes pasos que seguir, he escrito dos scripts que te permitirán realizar estas acciones fácilmente.
El primer paso consistirá en generar los certificados para la conexión TLS entre el servidorDockery el cliente al que quieras conectarte.
En una carpeta, crea un archivoopenssl.cnfcon el siguiente contenido:
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ req_distinguished_name ]
# Information to be displayed for the user
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = docker-server
[ v3_req ]
# Extensions to add to a certificate request
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 192.168.X.X # Adresse IP de l'hôte
DNS.1 = docker-server.local # Nom d'hôte (par exemple, l'hôte Docker)DockerModifica las líneas 15 y 16 para que se ajusten a tu servidor.
generate-certificate.shAhora, en la misma carpeta en la que has creado el archivoopenssl.cnf, crea el archivo.
#!/bin/bash
# Définir le répertoire des certificats
CERT_DIR="/etc/docker/certs"
CA_DIR="$CERT_DIR/ca"
SERVER_DIR="$CERT_DIR/server"
CLIENT_DIR="$CERT_DIR/client"
# Créer les répertoires s'ils n'existent pas
mkdir -p $CA_DIR $SERVER_DIR $CLIENT_DIR
# Vérifier si les certificats existent déjà
if [ ! -f "$CA_DIR/ca.pem" ]; then
echo "Génération des certificats TLS..."
# Générer la clé privée de l'autorité de certification (CA)
openssl genrsa -aes256 -out $CA_DIR/ca-key.pem -passout pass:password 4096
# Générer le certificat de l'autorité de certification (CA)
openssl req -new -x509 -days 365 -key $CA_DIR/ca-key.pem -sha256 -passin pass:password \
-subj "/CN=Docker-CA" -out $CA_DIR/ca.pem
# Générer la clé privée du serveur
openssl genrsa -out $SERVER_DIR/server-key.pem 4096
# Créer une demande de signature de certificat (CSR) pour le serveur en utilisant le fichier de config avec SAN
openssl req -new -key $SERVER_DIR/server-key.pem -out $SERVER_DIR/server.csr -config openssl.cnf
# Signer le certificat du serveur avec l'autorité de certification
openssl x509 -req -days 365 -sha256 -in $SERVER_DIR/server.csr -CA $CA_DIR/ca.pem \
-CAkey $CA_DIR/ca-key.pem -passin pass:password -CAcreateserial -out $SERVER_DIR/cert.pem -extensions v3_req -extfile openssl.cnf
# Générer la clé privée du client
openssl genrsa -out $CLIENT_DIR/client-key.pem 4096
# Créer une demande de signature de certificat (CSR) pour le client
openssl req -new -key $CLIENT_DIR/client-key.pem -out $CLIENT_DIR/client.csr \
-subj "/CN=docker-client"
# Signer le certificat du client avec l'autorité de certification
openssl x509 -req -days 365 -sha256 -in $CLIENT_DIR/client.csr -CA $CA_DIR/ca.pem \
-CAkey $CA_DIR/ca-key.pem -passin pass:password -CAcreateserial -out $CLIENT_DIR/cert.pem
# Pour uptime kuma
cp $CLIENT_DIR/client-key.pem $CLIENT_DIR/key.pem
cp $CA_DIR/ca.pem $CLIENT_DIR/ca.pem
echo "Certificats générés avec succès."
else
echo "Les certificats existent déjà. Aucune génération nécessaire."
fiEjecuta el script:
sudo bash generate-certificate.sh
DockerLos certificados ya están generados; vamos a pasar a la configuración del daemon.
Para ello, tendrás que editar o crear el archivodaemon.json que debe encontrarse en la carpeta /etc/docker/.
sudo nano /etc/docker/daemon.jsonEn el archivo, añade el siguiente contenido:
{
"hosts": [
"tcp://0.0.0.0:2376",
"unix:///var/run/docker.sock"
],
"tls": true,
"tlscacert": "/etc/docker/certs/ca/ca.pem",
"tlscert": "/etc/docker/certs/server/cert.pem",
"tlskey": "/etc/docker/certs/server/server-key.pem",
"tlsverify": true
}Aquí configuramosDocker para que escuche en el puerto 2376 y le indicamos la ubicación de los certificados.
DockerPara terminar, debemos modificar los parámetros de inicio del servicio; para ello, utilizaremos unoverride.conf con el fin de modificar la configuración. También en este caso, para simplificar la configuración, aquí tienes el script:
#!/bin/bash
# Variables
DOCKER_SERVICE_OVERRIDE_DIR="/etc/systemd/system/docker.service.d"
OVERRIDE_CONF_FILE="$DOCKER_SERVICE_OVERRIDE_DIR/override.conf"
# Création du répertoire d'override si nécessaire
if [ ! -d "$DOCKER_SERVICE_OVERRIDE_DIR" ]; then
echo "Création du répertoire d'override systemd pour Docker..."
sudo mkdir -p "$DOCKER_SERVICE_OVERRIDE_DIR"
fi
# Création du fichier override.conf
echo "Création du fichier d'override Docker pour exposer Docker sur le port 2376 avec TLS..."
sudo tee "$OVERRIDE_CONF_FILE" > /dev/null <<EOL
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
EOL
# Recharger la configuration systemd
echo "Rechargement de la configuration systemd..."
sudo systemctl daemon-reload
# Redémarrage du service Docker
echo "Redémarrage du service Docker..."
sudo systemctl restart docker
# Vérification du statut du service Docker
echo "Vérification du statut du service Docker..."
sudo systemctl status docker
# Fin
echo "La configuration de Docker pour utiliser TLS sur le port 2376 a été appliquée avec succès."DockerEjecuta el script, que creará el archivo
override.confpara el servicioDocker y recargará el daemon y reiniciará el sistema.
sudo bash docker-tls-override.sh
La configuraciónDockerha finalizado.
Dependiendo de los clientes que vayas a utilizar, tendrás que obtener los certificados de cliente en /etc/docker/certs/client.
Puede encontrar los archivos aquí: https://forge.rdr-it.com/Scripts/Linux/src/branch/main/docker-tls-config
