GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak zabezpečit TCP Socket Docker pomocí TLS

Rozhraní API Dockeru je ve výchozím nastavení zcela nechráněné, s výjimkou oprávnění souborového systému na jeho Unixovém socketu. Při odhalení rozhraní Docker API přes TCP byste měli nastavit TLS, aby si Docker Engine a vaši klienti mohli navzájem ověřit identitu. Jinak by kdokoli s přístupem k portu TCP mohl procházet vaše kontejnery Docker, spouštět nové a spouštět akce jako root ve vašem systému.

Konfigurovaný TLS bude vyžadovat, aby klienti předložili platný certifikát podepsaný certifikační autoritou serveru. Aby to fungovalo, musíte vytvořit certifikáty SSL a poté nastavit Docker Engine tak, aby vyžadoval připojení TLS. Klienti Docker CLI musí být také upraveni tak, aby očekávali server TLS.

Odhalení soketu TCP

TCP socket Dockeru můžete odhalit pomocí -H příznak k definování dalšího koncového bodu při spouštění dockerd proces. Tento příznak lze opakovat několikrát; v tomto příkladu bude k dispozici soket Unix i soket TCP:

/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

Port 2375 se běžně používá pro nešifrovaná připojení Docker. Po nastavení TLS by měl být místo toho použit port 2376.

Docker můžete nakonfigurovat tak, aby tyto příznaky používal automaticky, úpravou definice služby Docker. Přidejte přepsání v /etc/systemd/system/docker.service.d/override.conf který změní ExecStart řádek:

[Service]
ExecStart=/usr/bin/dockerd -H ...

Chcete-li změnu použít, znovu načtěte systemd:

sudo systemctl daemon-reload

Vytvoření certifikační autority

Začněte vytvořením certifikačního úřadu (CA) pro vaši konfiguraci TLS. Tuto CA budete používat k podepisování svých certifikátů; server odmítne komunikovat s klienty, kteří předloží certifikát od jiné CA.

Použijte OpenSSL ke generování soukromých a veřejných klíčů CA na počítači hostujícím váš server Docker:

# Generate the private key
openssl genrsa -aes256 -out ca-private.pem 4096

# Generate a public key from the private key
openssl req -new -x509 -days 365 -key ca-private.pem -sha256 -out ca-public.pem

Budete vyzváni k zadání přístupové fráze, e-mailové adresy, kódu země, názvů států a měst a názvu organizace, které mají být součástí vašeho veřejného klíče. Zadejte informace do svého terminálu a po každém řádku stiskněte Enter, abyste mohli postupovat vpřed a vytvořit klíč.

Vygenerování požadavku na podepsání klíče serveru a certifikátu

Dále vytvořte klíč serveru a žádost o podpis certifikátu:

# Generate the server key
openssl genrsa -out server-key.pem 4096

# Generate a certificate signing request
openssl req -subj "/CN=example.com" -sha256 -new -key server-key.pm -out request.csr

Žádost o podpis certifikátu (CSR) obsahuje všechny informace potřebné k vytvoření podepsaného certifikátu. Je důležité zkontrolovat, zda je běžný název v CSR pro váš server správný. Toto je uvedeno v CN pole jako example.com výše; měli byste jej nastavit na Fully Qualified Domain Name (FQDN) pro váš server.

Nastavení rozšíření certifikátu

Použití tohoto CSR by umožnilo připojení k serveru prostřednictvím jeho FQDN. Pokud chcete přidat další doménu nebo použít IP adresu, musíte zadat příponu certifikátu. Vytvořte soubor rozšíření s subjectAltName a extendedKeyUsage pole pro nastavení:

echo subjectAltName = DNS:sub.example.com;IP=192.168.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extFile.cnf

Tento příklad by navíc umožňoval připojení přes sub.example.com a 192.168.0.1 .

Generování podepsaného certifikátu

Nyní jste připraveni zkombinovat všechny komponenty a vygenerovat podepsaný certifikát:

openssl x509 -req -days 365 -sha256 
    -in request.csr 
    -CA ca-public.pem 
    -CAkey ca-private.pem 
    -CAcreateserial 
    -extfile extfile.cnf 
    -out certificate.pem

Tím se převezme žádost o podepsání certifikátu, přidá se soubor rozšíření a pomocí klíčů vaší CA vytvoří podepsaný certifikát OpenSSL. K dokončení procesu budete muset zadat přístupovou frázi CA.

Platnost tohoto certifikátu vyprší po roce. -days můžete upravit příznak pro získání užitečné životnosti pro vaše požadavky. Před vypršením platnosti tohoto certifikátu byste si měli zařídit vygenerování náhradního certifikátu.

Generování klientského certifikátu

Dále byste měli vygenerovat další certifikát, který budou vaši klienti Docker používat. Toto musí být podepsáno stejnou CA jako certifikát serveru. Použijte soubor rozšíření s extendedKeyUsage = clientAuth připravit tento certifikát pro použití v klientském scénáři.

# Generate a client key
openssl genrsa -out client-key.pem 4096

# Create a certificate signing request
openssl req -subj '/CN=client' -new -key client-key.pem -out client-request.csr

# Complete the signing
echo extendedKeyUsage = clientAuth >> extfile-client.cnf
openssl x509 -req -days 365 -sha256 
     -in client-request.csr  
     -CA ca-public.pem 
     -CAkey ca-private.pem 
     -CAcreateserial 
     -extfile extfile-client.cnf 
     -out client-certificate.pem

Příprava na konfiguraci dockeru

Zkopírujte svůj ca-public.pem , certificate.pem a server-key.pem soubory do nového adresáře připraveného k odkazování v konfiguraci Dockeru. Poté zkopírujte ca-public.pem , client-certificate.pem a client-key.pem soubory do počítače, ze kterého se budete připojovat.

Požadavek na podpis certifikátu a soubory rozšíření můžete odstranit ve svém pracovním adresáři. Dávejte pozor, abyste své soukromé klíče neztratili, protože je nelze obnovit. Bez nich nebudete moci ověřovat certifikáty ani vytvářet obnovy.

Konfigurace démona Docker

Nyní můžete spustit démona Docker s příznaky TLS odkazujícími na váš vygenerovaný certifikát a klíče. --tlscacert , --tlscert a --tlskey parametry určují cesty k příslušným zdrojům OpenSSL vygenerovaným výše.

/usr/bin/dockerd 
    -H unix:///var/run/docker.sock 
    -H tcp://0.0.0.0:2376 
    --tlsverify 
    --tlscacert=ca-public.pem 
    --tlscert=certificate.pem 
    --tlskey=server-key.pem

Přidání --tlsverify příznak umožňuje vynucení připojení TLS. Klientům bez odpovídajícího certifikátu bude zablokován přístup k soketu TCP společnosti Docker.

Konfigurace klienta Docker

Aktivujte TLS na klientovi poskytnutím příznaků TLS při použití docker příkaz. Musíte také přidat -H příznak určující adresu vzdáleného soketu Docker, ke kterému se chcete připojit. Z pohledu klienta --tlsverify znamená, že se příkaz připojí pouze k serverům s certifikátem TLS podepsaným stejnou certifikační autoritou jako jeho vlastní.

docker 
    -H tcp://0.0.0.0:2376 
    --tlsverify 
    --tlscacert=ca-public.pem 
    --tlscert=client-certificate.pem 
    --tlskey=client-key.pem 
    ps

Poskytování těchto příznaků při každém použití CLI se velmi rychle opakuje. Pokud budete většinou pracovat se stejným hostitelem chráněným TLS, nastavte DOCKER_HOST a DOCKER_TLS_VERIFY proměnné prostředí ve vašem profilu shellu. Zkopírujte soubory certifikátů do ca , cert a key uvnitř vašeho ~/.docker adresář. Ty odpovídají --tls Dockeru flags a definovat výchozí certifikát pro klienta.

export DOCKER_HOST=tcp://0.0.0.0:2376
export DOCKER_TLS_VERIFY=1

Můžete si zjednodušit práci s více hostiteli pomocí kombinace místních, vzdálených, nezabezpečených a TLS připojení nastavením kontextů Docker. Tato funkce vám umožňuje přepínat mezi cíli pomocí příkazů rozhraní CLI Dockeru.

Klient Docker také podporuje alternativní režimy ověřování. Použití kombinace tls , tlscacert , tlscert , tlskey a tlsverify flags aktivuje různé úrovně vynucení TLS.

Pouze s tls nastaven, Docker ověří server pomocí výchozího fondu CA. Přidání tlscacert a tlsverify příznaky bez klientského klíče vynutí, že server používá danou CA bez dalších kontrol. Vynechání tlscacert a tlsverify ale zahrnutí dalších tří klíčů ověří certifikát klienta bez ověřování CA serveru.

Závěr

Ochrana soketu TCP společnosti Docker pomocí certifikátů TLS vám umožní bezpečněji odhalit rozhraní API tím, že zabrání připojení neoprávněným klientům. Aktéři, kteří skenují vaši síť, budou mít zakázáno se připojit k Dockeru, což vám poskytne vrstvu ochrany, která zabrání kompromitaci vašeho počítače pomocí oprávnění root.

Jakmile vygenerujete své certifikáty, můžete je použít k ověření pomocí rozhraní Docker CLI nebo svých vlastních klientů HTTP. Curl je přijme jako --cert , --key a --cacert například příznaky.

TLS je pouze jednou součástí zabezpečené instance rozhraní API Dockeru. Poskytuje šifrování a ujištění, že klienti jsou důvěryhodní, ale není to podrobný mechanismus kontroly přístupu.

Pokud chcete omezit, co mohou jednotliví klienti dělat, měli byste nastavit autorizační plugin Docker Engine. Pluginy mohou kontaktovat externí službu, aby určily, zda může konkrétní požadavek API pokračovat. Alternativně můžete použít reverzní proxy před vaším soketem TCP k vynucení řízení přístupu předtím, než požadavky dorazí do Dockeru.


Docker
  1. Jak zabezpečit své e-mailové služby Linux pomocí SSL/TLS

  2. Jak zabezpečit účet s podporou cPanel pomocí certifikátu Sectigo SSL

  3. Jak zabezpečit připojení pomocí certifikátů SSL/TLS

  1. Jak nasadit mikroslužby s Dockerem

  2. Jak nasadit aplikace s Rancherem

  3. Jak nasadit kontejner nginx s Dockerem na Linode

  1. Jak nainstalovat Jenkins pomocí Docker

  2. Jak zabezpečit vsFTPd pomocí SSL/TLS

  3. Jak nakonfigurovat VSFTPD se šifrovaným připojením SSL/TLS?