🐳 نحوه ایمن کردن سوکت Docker TCP با TLS |

7 دقیقه

فایل به‌طور پیش‌فرض در سیستم فایل به‌طور پیش‌فرض برای Dock است. .

هنگام عبور Docker API از طریق TCP باید TLS را پیکربندی کنید تا Docker Engine و مشتریان شما بتوانند هویت یکدیگر را تأیید کنند. موارد جدید را شروع کنید و اقدامات روت را روی سیستم خود انجام دهید.

برای پیکربندی TLS، مشتریان باید گواهی معتبر امضا شده توسط CA سرور ارائه کنند. برای نیاز به اتصالات TLS.[19659006] مشتریان Docker CLI نیز باید برای گوش دادن به سرور TLS پیکربندی شوند. تقسیم یک نقطه پایانی اضافی هنگام شروع فرآیند dockerd.

این پرچم را می توان چندین بار تکرار کرد. در این مثال، هر دو سوکت یونیکس و سوکت TCP در دسترس خواهند بود:

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

پورت 2375 معمولاً برای اتصالات Docker رمزگذاری نشده استفاده می‌شود.

بعد از پیکربندی TLS باید به جای آن از پورت 2376 استفاده کنید. لغو در / etc/systemd/system/docker.service.d/override.conf، که خط ExecStart را تغییر می‌دهد:

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

بارگیری مجدد سیستم برای اعمال تغییرات:

sudo systemctl daemon-reload

ایجاد یک CA

با ایجاد یک مرجع صدور گواهی (CA) شروع کنید پیکربندی TLS شما.

شما از این CA برای امضای گواهی های خود استفاده خواهید کرد. سرور از برقراری ارتباط با کلاینت هایی که گواهینامه ای از CA دیگر ارائه می دهند، خودداری می کند.

از OpenSSL برای تولید یک کلید CA خصوصی و عمومی در دستگاهی که سرور Docker شما در آن قرار دارد استفاده کنید:

# یک کلید خصوصی ایجاد کنید.
openssl genrsa -aes256 -out ca-private.pem 4096

# کلید عمومی را از کلید خصوصی تولید کنید
openssl req -new -x509 -days 365 -key ca-private.pem -sha256 -out ca-public.pem

[194596] 5 آدرس ایمیل کد کشور، نام ایالت و شهر، و نام سازمان برای درج در کلید عمومی. ایجاد کلید سرور و درخواست امضای گواهی

بعدی ایجاد کلید سرور و درخواست امضای گواهی:

# ایجاد کلید سرور

# ایجاد کلید سرور
openssl genrsa -out server-key.pem 4096

# درخواست امضای گواهی را ایجاد کنید
openssl req -subj "/CN=itsecforu.ru" -sha256 -new -key server-key.pm -out request.csr

درخواست امضای گواهی (CSR) شامل تمام اطلاعات مورد نیاز برای ایجاد یک گواهی امضا شده است.

. ]این مهم است که بررسی کنید نام رایج در CSR سرور شما صحیح باشد.

این نام در قسمت CN به عنوان itecforu.ru در بالا فهرست شده است. شما باید آن را روی نام دامنه کاملاً واجد شرایط (FQDN) برای سرور خود تنظیم کنید.

تنظیم پسوندهای گواهی

استفاده از این CSR امکان اتصال به سرور را از طریق FQDN آن فراهم می‌کند.

اگر پسوند گواهینامه را مشخص کنید، لازم است می خواهید دامنه دیگری اضافه کنید یا از یک آدرس IP استفاده کنید.

برای این کار، یک فایل پسوند با فیلدهای subjectAltName و extendedKeyUsage ایجاد کنید:

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

این مثال علاوه بر این به اتصالات از طریق sub.itsecforu.ru و 192.168.0.1 اجازه می دهد.

تولید یک گواهی امضا شده

شما اکنون آماده هستید تا همه مؤلفه ها را ترکیب کنید. گواهی امضا شده:

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

سیستم درخواست امضای گواهی را می‌پذیرد، فایل پسوند شما را اضافه می‌کند و از کلیدهای CA برای ایجاد گواهی امضا شده OpenSSL استفاده می‌کند.

برای تکمیل فرآیند از شما خواسته می‌شود که عبارت عبور CA را وارد کنید.

مدت اعتبار این گواهی پس از یک سال منقضی می‌شود.

می‌توانید پرچم -days را تغییر دهید. ]تولید گواهی مشتری [19659012] سپس باید گواهی دیگری را برای استفاده از مشتریان Docker خود ایجاد کنید. باید توسط همان CA به عنوان گواهی سرور امضا شود.

از یک فایل پسوندی با extensionedKeyUsage = clientAuth استفاده کنید تا این گواهی را برای استفاده در سناریوی کلاینت آماده کنید.[1949]#59004 [1945]#59004 [1945]#59004 [1945]#6G500 [1945] [19659057]openssl genrsa -out client-key.pem 4096

# یک درخواست امضای گواهی ایجاد کنید

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

# امضای پایان

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

آماده‌سازی برای راه‌اندازی Docker

فایل‌های ca-public.pem، Certificate.pem و new server-key را کپی کنید. دایرکتوری، آماده استفاده در پیکربندی Docker.

پس از آن، فایل‌های ca-public.pem، client-certificate.pem و client-key.pem را به دستگاهی که از متصل می‌کنید کپی کنید.

می‌توانید درخواست امضای گواهی و فایل‌های پسوند را در فهرست کاری خود حذف کنید.

مراقب باشید کلیدهای خصوصی خود را گم نکنید زیرا قابل بازیابی نیستند. [04]

بدون آن‌ها، نمی‌توانید گواهینامه‌ها را تأیید کنید یا به‌روزرسانی‌ها را ایجاد کنید.

راه‌اندازی Daemon Docker

اکنون می‌توانید Daemon Docker را با پرچم‌های TLS که به گواهی و کلیدهایی که ایجاد کرده‌اید، راه‌اندازی کنید.[19659006]تنظیمات –tlscacert، –tlscert و –tlskey به منابع OpenSSL مربوطه تولید شده در بالا اشاره می کنند.

/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

افزودن پرچم –tlsverify اطمینان حاصل می کند که اتصالات TLS تأیید می شوند.

دسترسی مشتریان بدون گواهی مناسب به سوکت TCP Docker مسدود می شود.

پیکربندی مشتری Docker

19659012]با مشخص کردن پرچم‌های TLS هنگام استفاده از دستور docker، TLS را در کلاینت فعال کنید.

همچنین باید پرچم -H را اضافه کنید تا آدرس سوکت Docker راه دور را برای اتصال به آن مشخص کنید.

از دیدگاه مشتری، –tlsverify به این معنی است که فرمان فقط به سرورهایی با گواهی TLS که توسط همان CA امضا شده است متصل می شود.

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

تنظیم این پرچم‌ها هر بار که از CLI استفاده می‌کنید خسته‌کننده می‌شود.

اگر بیشتر با همان میزبان ایمن TLS کار می‌کنید، متغیرهای محیطی را تنظیم کنید DOCKER_HOST و و [19]DOCKER_IFER_194 19459016 ]در نمایه پوسته.

فایل های گواهی را در ca، cert و key داخل دایرکتوری ~/.docker کپی کنید.

آنها با پرچم های Docker –tls مطابقت دارند و گواهی پیش فرض را برای مشتری تعریف می کنند.

. ]صادر کردن DOCKER_HOST=tcp:/ /0.0.0.0:2376
صادرات DOCKER_TLS_VERIFY=1

شما می‌توانید کار با چندین میزبان را با استفاده از ترکیبی از اتصالات محلی، راه دور، ناامن و TLS با تنظیم زمینه‌های Docker آسان‌تر کنید.

این ویژگی به شما امکان می‌دهد با استفاده از Docker CLI بین اهداف سوئیچ کنید. دستورات.

Client Docker از حالت‌های تأیید جایگزین نیز پشتیبانی می‌کند.

استفاده از ترکیبی از پرچم‌های tls، tlscacert، tlscert، tlskey، و tlsverify سطوح مختلف اجرای TLS را فعال می‌کند.

اگر Docker فقط tls تنظیم شود سرور را با استفاده از مخزن پیش‌فرض CA احراز هویت کنید.

افزودن پرچم‌های tlscacert و tlsverify بدون کلید کلاینت تضمین می‌کند که سرور از این CA بدون هیچ بررسی دیگری استفاده می‌کند. ایمن استفاده کنید o API، از اتصال‌های مشتریان غیرمجاز جلوگیری می‌کند.

مهاجمانی که شبکه شما را در پورت اسکن می‌کنند نمی‌توانند به Docker متصل شوند و سطحی از محافظت را به شما می‌دهند که از هک شدن دستگاه شما با امتیازات سطح ریشه جلوگیری می‌کند.

مراجعه کنید. همچنین ببینید: