مقدمه
در بسیاری از سازمانها و مراکز داده، به دلایل امنیتی یا تحریمی، دسترسی مستقیم به اینترنت وجود ندارد. این محیطها که اصطلاحاً Airgap نامیده میشوند، نیاز به یک Container Registry داخلی دارند تا تیمهای توسعه بتوانند imageهای Docker را Pull و Push کنند. بدون Registry داخلی، هر بار باید imageها را بهصورت دستی روی سرور مقصد منتقل کرد که فرآیندی زمانبر و خطاپذیر است. در این مقاله دو روش رایج برای راهاندازی Docker Registry در محیط Airgap را بررسی میکنیم.
روش اول: Docker Registry (Open Source)
سادهترین راه، استفاده از Docker Registry رسمی و متنباز است. این روش برای تیمهای کوچک و پروژههای شخصی کاملاً مناسب است.
برای اجرا کافی است دستور زیر را بزنید:
docker run -d -p 5000:5000 --name registry registry:2Registry پیشفرض imageها را داخل کانتینر ذخیره میکند. برای ماندگاری دادهها، مسیر ذخیرهسازی را با Bind Mount به هاست متصل کنید:
docker run -d -p 5000:5000 --name registry -v /data/registry:/var/lib/registry registry:2تنظیم احراز هویت با Basic Auth
برای محیطهای Airgap که چند نفر از Registry استفاده میکنند، حتماً احراز هویت فعال کنید. ابتدا فایل htpasswd را بسازید:
docker run --entrypoint htpasswd httpd:2 -Bbn admin mypassword > /auth/htpasswdسپس Registry را با احراز هویت اجرا کنید:
docker run -d -p 5000:5000 --name registry -v /auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry:2تنظیم TLS (گواهی Self-Signed)
برای ارتباط امن، یک گواهی Self-Signed بسازید:
mkdir -p /certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/domain.key -x509 -days 365 -out /certs/domain.crtو Registry را با TLS اجرا کنید:
docker run -d -p 443:5000 --name registry -v /certs:/certs -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" -e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" registry:2روش دوم: Harbor
Harbor یک Container Registry سازمانی و اوپنسورس است که توسط Cloud Native Computing Foundation (CNCF) پشتیبانی میشود. اگر تیم بزرگی دارید و نیاز به قابلیتهای پیشرفته دارید، Harbor انتخاب بهتری است.
نصب Harbor در محیط Airgap
Harbor یک offline installer ارائه میدهد که شامل همه imageهای مورد نیاز است. مراحل نصب:
# دریافت بسته نصب آفلاین
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
# استخراج و ویرایش تنظیمات
tar xzvf harbor-offline-installer-v2.10.0.tgz
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
# اجرای نصبکننده
sudo ./install.shقبل از اجرا، فایل harbor.yml را ویرایش کنید و hostname، پسورد admin و مسیر گواهی TLS را تنظیم نمایید.
قابلیتهای Harbor
- Web UI: مدیریت imageها از طریق مرورگر بدون نیاز به CLI
- Vulnerability Scanning: اسکن خودکار imageها برای یافتن آسیبپذیریها با Trivy یا Clair
- Replication: replicate کردن imageها بین چند Harbor یا بین Harbor و Docker Hub
- RBAC: کنترل دسترسی نقشمحور برای پروژهها و کاربران مختلف
- Garbage Collection: پاکسازی خودکار imageهای بلااستفاده برای مدیریت فضای دیسک
- Audit Logging: ثبت تمام عملیاتها برای پیگیری و امنیت
در محیط Airgap، قابلیت Replication بسیار حیاتی است: میتوانید یک Harbor واسط در محیطی با دسترسی محدود به اینترنت داشته باشید که imageهای مورد نیاز را از Docker Hub گرفته و به Harbor داخلی شما Replicate کند.
نکات امنیتی
- TLS اجباری: هیچوقت Registry را بدون TLS در معرض شبکه قرار ندهید. ترافیک HTTP باعث لو رفتن imageها و credentials میشود. در محیط داخلی از Self-Signed Certificate استفاده کنید و گواهی CA را روی همه کلاینتها نصب کنید.
- Basic Authentication: حتی در شبکه داخلی، حتماً احراز هویت فعال باشد. برای Harbor از LDAP/AD هم میتوانید استفاده کنید.
- Firewall Rules: دسترسی به پورت Registry (پیشفرض 5000 یا 443) را فقط به IP تیمهای مجاز محدود کنید. Harbor از پورت 80 و 443 استفاده میکند.
- Rate Limiting: اگر چندین CI/CD pipeline همزمان از Registry استفاده میکنند، Rate Limiting را در فایروال یا خود Registry فعال کنید.
- آپدیت منظم: image پایه Registry و Harbor را بهروز نگه دارید. آسیبپذیریهای امنیتی مرتب کشف میشوند.
جدول سرویسهای عمومی Container Registry در ایران
اگر محدودیت دسترسی کامل ندارید و فقط Docker Hub در ایران Filter شده، میتوانید از Registryهای عمومی داخلی استفاده کنید. این سرویسها با قطعیهای کمتر در دسترس هستند:
| سرویس | آدرس | محدودیت |
|---|---|---|
| آروان | docker.arvancloud.ir | رایگان، نیاز به حساب کاربری |
| ابر آروان (جدید) | registry.arvancloud.ir | رایگان، نیاز به حساب کاربری |
| اسنپباکس | registry.snapbox.ir | رایگان، نیاز به حساب کاربری |
| لیارا | registry.liara.ir | رایگان، نیاز به حساب کاربری |
استفاده از این سرویسها جایگزین مناسبی برای Docker Hub است، اما همچنان در محیطهای کاملاً Airgap راهاندازی Registry داخلی با روشهای بالا ضروری است.