
Neste tutorial, vamos ver como configurar o acesso remoto ao daemonDockerutilizando a porta 2376, o que lhe permitirá gerir os seus contentores remotamente ou supervisioná-los.
Existem duas portas que permitem o acesso remoto:
- a porta 2375, que não é segura, quer ao nível do tráfego, quer do acesso
- 2376, que é seguro graças à utilização de TLS e que recorre a um conjunto de certificados para proteger o acesso
Em ambos os casos, não há autenticação através de uma conta e palavra-passe; apenas a utilização da porta 2376 permite proteger o acesso através de um conjunto de certificados.
Como há bastantes operações a realizar, escrevi dois scripts que permitirão executar as ações facilmente.
O primeiro passo será gerar os certificados para a ligação TLS entre o servidorDockere o cliente que pretende ligar.
Numa pasta, crie um ficheiroopenssl.cnfcom o seguinte conteúdo:
[ 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)DockerAltere as linhas 15 e 16 para que correspondam ao seu servidor.
generate-certificate.shAgora, na mesma pasta onde criou o ficheiroopenssl.cnf, crie o ficheiro.
#!/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."
fiExecute o script:
sudo bash generate-certificate.sh
DockerOs certificados já estão gerados; vamos agora passar à configuração do daemon.
/etc/docker/Para tal, terá de editar ou criar o ficheirodaemon.jsonque deve estar na pasta.
sudo nano /etc/docker/daemon.jsonNo ficheiro, adicione o seguinte conteúdo:
{
"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
}Aqui, configuramosDocker o para escutar na porta 2376 e indicamos-lhe a localização dos certificados.
DockerPor fim, temos de alterar os parâmetros de arranque do serviço; para tal, vamos utilizar umoverride.conf para modificar a configuração. Também aqui, para simplificar a configuração, eis o 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."DockerExecute o script que irá criar o ficheiro
override.confpara o serviçoDocker e recarregue o daemon e reinicie o sistema.
sudo bash docker-tls-override.sh
A configuraçãoDockerestá concluída.
Dependendo dos clientes que vai utilizar, terá de obter os certificados dos clientes em /etc/docker/certs/client.
Pode encontrar os ficheiros aqui: https://forge.rdr-it.com/Scripts/Linux/src/branch/main/docker-tls-config
