امنیت سامانه داکری روی پورت 8443 فقط باز باشه و تمام آسیب پذیری های نرم افزار اطلاع بده و یه سامانه امن باشه
قدمبهقدم یک برنامهٔ عمل امن و قابل اجرا میدم تا «سامانهٔ داکر» شما فقط پورت 8443 باز باشه و تمام نقاط آسیبپذیری مهم شناسایی و تا حد ممکن رفع بشن. ابتدا یک هشدار کوتاه و مهم: باز کردن هر API داکر روی TCP حتی بهروی 127.0.0.1 خطرناک است مگر اینکه حتماً از TLS/mTLS یا تونل SSH/RevProxy با احراز هویت قوی استفاده کنید — چون دسترسی به API داکر معادل دسترسی root روی هاست است. منابع رسمی و ابزارهای پیشنهادی در متن آمدهاند.
خلاصهٔ گامهای اصلی (ترتیب اجرا)
بستن همهٔ پورتها و باز کردن فقط 8443 در فایروال (یا فقط localhost).
هرگز docker.sock را روی شبکه باز نکنید؛ در صورت نیاز از SSH tunneling یا TLS+client-certs (mTLS) استفاده کنید.
پیکربندی dockerd فقط روی Unix socket و/یا روی 127.0.0.1:8443 با TLS (اگر نیاز به TCP دارید). مثال daemon.json پایین آمده است.
اجرای اسکن امنیتی و شناسایی CVE و misconfig: Trivy, docker-bench-security، Clair/Anchore.
trivy.dev
اعمال hardening container: non-root containers، drop capabilities، read-only filesystem، seccomp, AppArmor/SELinux، user namespaces.
مدیریت و بهروزرسانی تصاویر: استفاده از تصاویر مینیمال، اسکن CI، image signing (cosign/notary)، registry خصوصی با auth.
trivy.dev
مانیتورینگ و لاگ، auditing (auditd)، runtime detection (Falco) و پاسخ خودکار.
تست مجدد با docker-bench-security و ثبت گزارش.
دستورات و مثالهای عملی
1) فایروال — اجازه فقط پورت 8443 (مثال با UFW)
(اگر سرور شما در پشت NAT یا load balancer است، محدودسازی در لایهٔ شبکه را هم انجام بدید.)
# ببین وضعیت ufw
sudo ufw status verbose
# ریست امن: ببند همه
sudo ufw default deny incoming
sudo ufw default deny outgoing
# باز کردن فقط پورت 8443 (TCP)
sudo ufw allow proto tcp from any to any port 8443
# اگر میخواهید فقط لوکال/مشکل با SSH: فقط از localhost قبول کن
# (این دستور برای remote host فایدهای ندارد؛ بهتر است bind به 127.0.0.1 در dockerd کنید)
sudo ufw enable
2) پیکربندی dockerd — فقط روی unix socket و tcp://127.0.0.1:8443 با TLS (نمونهٔ /etc/docker/daemon.json)
توجه: TLS نیازمند ایجاد CA/server/client certs است (مستندات رسمی نحوهٔ ساخت را توضیح میدهد). اگر TLS را انتخاب نکنید، نیازی به TCP باز نکنید.
{
"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:8443"],
"tls": true,
"tlsverify": true,
"tlscacert": "/etc/docker/certs/ca.pem",
"tlscert": "/etc/docker/certs/server-cert.pem",
"tlskey": "/etc/docker/certs/server-key.pem",
"userns-remap": "default",
"live-restore": true
}
بعد از ویرایش:
sudo systemctl daemon-reload
sudo systemctl restart docker
مستندات رسمی راهاندازی remote daemon و TLS را ببینید.
3) اگر میخواهید مطمئن باشید کسی از راه دور مستقیم وصل نشه — روش امنتر:
از SSH socket forwarding برای دسترسی به داکر استفاده کنید (docker context با SSH) یا تنها از docker context با SSH کار کنید تا نیازی به پورت TCP نباشد.
4) اجرای اسکن خودکار و baseline
نصب و اجرای Trivy برای اسکن تصاویر:
# نصب و اسکن یک image
trivy image --severity HIGH,CRITICAL myimage:latest
اجرای Docker Bench for Security (audit خودکار مطابق CIS):
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo ./docker-bench-security.sh | tee /var/log/docker-bench-$(date +%F).log
این دو ابزار به شما لیست وقایع/توصیهها و CVEهای کشفشده را میدهند.
trivy.dev
فهرست نقاط ضعف شایع که باید بررسی و رفع شوند
(هر بند را با ابزارهای بالا چک کنید)
Exposed Docker API / docker.sock — بیشترین خطر؛ دسترسی معادل root. اگر TCP باز است: باید TLS+mTLS یا SSH تونل باشد.
تصاویر حاوی بستههای آسیبپذیر (CVE) — اسکن CI/CD، بهروزرسانی base image.
trivy.dev
Container breakout via privileged / mount host paths — جلوگیری از privileged containers، محدود کردن bind mounts، چک ACLها.
ضعفهای مدیریت ابزار مدیریتی (مثلاً Portainer) — نسخههای قدیمی Portainer چندین CVE مهم داشتهاند؛ اگر از Portainer استفاده میکنید، فوراً آپدیت کنید یا از ابزار دیگر با auth قوی استفاده کنید.
OpenCVE
Missing runtime controls — نبود AppArmor/SELinux/seccomp/Falco برای تشخیص رفتارهای مشکوک.
عدم جداسازی کاربران و دسترسیها — کاربران باید به گروه docker اضافه نشوند مگر نیاز؛ دسترسی به docker.sock را محدود کنید.
عدم امضای تصاویر / registry ناامن — استفاده از registry خصوصی با auth و امضای تصاویر (cosign/notary).
پچ نشدن هستهٔ لینوکس و بستهها — kernel escapes بهروز نگه داشتن host ضروری است.
Logging & Auditing غیرفعال — فعال کردن auditd و ارسال لاگها به SIEM.
پیکربندی نادرست شبکهٔ کانتینر — محدودسازی egress/ingress با policies یا firewall.
برای مثال جزئیات CVEها و سوابق Portainer را چک کنید — Portainer قبلتر چند RCE و اشتباه در access control داشته. اگر از Portainer استفاده میکنید، نسخهٔ فعلیتون رو با لیست CVEها مقایسه کنید و سریع آپدیت کنید.
OpenCVE
بهترین اقدامات (CIS-based checklist — کوتاه)
اجرا و پاس کردن Docker Bench for Security؛ همهٔ FAILها را رفع کنید.
GitHub
اگر نیاز به TCP دارید: فقط bind به 127.0.0.1:8443 + TLS و client certs یا فقط SSH.
استفاده از user namespaces، seccomp (پروفایل پیشفرض یا اختصاصی)، AppArmor/SELinux.
کانتینرها را non-root اجرا کنید و capability های غیرضروری را drop کنید (--cap-drop=ALL --cap-add=... فقط در صورت نیاز).
فایلسیستم کانتینرها read-only در جاهایی که لازم نیست write شود.
لاگ گذاری متمرکز + مانیتورینگ runtime (Falco) + IDS.
pipeline CI: اسکن تصاویر پیش از push و امضای تصویر؛ نصب vulnerability management (Trivy/Govulncheck/Anchore).
گزارشسازی و بازبینی (چه چیزی را تحویل میدهم/باید تحویل بگیرید)
اجرای docker-bench-security و خروجی لاگ (فایل .log).
GitHub
خروجی اسکن Trivy از تصاویر اصلی (CSV/JSON).
trivy.dev
لیست versionها و سرویسهایی که در هاست اجرا میشوند (برای بررسی CVEهای مرتبط با آنها).
توصیهٔ تغییرات در daemon.json و فایروال.
منابع رسمی و ابزارهایی که پیشنهاد میکنم الآن بررسی کنید
مستندات رسمی Docker — Protect the Docker daemon socket / remote access.
CIS Docker Benchmark (و دانلود PDF برای چکلیست کامل).
Docker Bench for Security (اسکریپت اتوماتیک براساس CIS).
GitHub
Trivy (اسکن CVE و misconfig برای images).
trivy.dev
مرجع CVEها / Portainer vulnerabilities (اگر از Portainer استفاده میکنید، فوراً چک کنید).
OpenCVE
اگر دوست دارید، همین الآن میتونم برای شما مستقیم:
یک daemon.json امنتر (بر اساس آنچه روی سرورتان هست) بسازم؛
دستورالعمل قدمبهقدم تولید CA/server/client certs برای TLS (یا راهاندازی SSH-based access) ارائه دهم؛
یک اسکریپت شل آماده بدهم که ufw را تنظیم، docker-bench و trivy را اجرا و خروجیها را در /var/log ذخیره کند.