Безопасное развертывание с Docker Compose + Ubuntu
В стартапах Кремниевой долины Docker Compose является одним из предпо чтительных инструментов для быстрого развертывания и управления контейнерными приложениями. Однако удобство часто сопряжено с рисками безопасности. Как инженер по надежности сайта (SRE), я прекрасно осознаю, что уязвимости безопасности могут привести к катастрофическим последствиям. В этой статье я поделюсь лучшими практиками безопасности, которые я обобщил в своей реальной работе, сочетая Docker Compose с системами Ubuntu, помогая вам наслаждаться удобством Docker Compose, обеспечивая при этом безопасность системы.
I. Укрепление безопасности системы Ubuntu
Перед развертыванием контейнеров крайне важно обеспечить безопасность самой хост-системы Ubuntu. Вот несколько ключевых шагов:
1. Регулярное обновление Ubuntu и Docker
Убедитесь, что как система, так и Docker постоянно обновляются для исправления известных уязвимостей:
sudo apt update && sudo apt upgrade -y
sudo apt install docker-ce docker-compose-plugin
2. Ограничение прав управления Docker
Строго контролируйте права управления Docker, чтобы предотвратить атаки с повышением привилегий:
sudo usermod -aG docker deployuser
# Предотвратить легкое получение обычными пользователями прав управления Docker
3. Настройка брандмауэра Ubuntu (UFW)
Разумно ограничьте сетевой доступ, чтобы предотвратить несанкционированный доступ:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
4. Правильная настройка взаимодействия Docker и UFW
По умолчанию Docker обходит UFW для настройки iptables, поэтому рекомендуется ручное управление:
Измените файл конфигурации Docker:
sudo nano /etc/docker/daemon.json
Добавьте следующее содержимое:
{
"iptables": false,
"ip-forward": true,
"userland-proxy": false
}
Перезапустите службу Docker:
sudo systemctl restart docker
Явно привяжите адреса в Docker Compose:
services:
webapp:
ports:
- "127.0.0.1:8080:8080"
II. Лучшие практики безопасности Docker Compose
Следующие конфигурации применимы к Docker Compose v2.4 и выше. Обратите внимание на различия между режимами без Swarm и Swarm.
1. Ограничение прав контейнера
Контейнеры, работающие от имени root по умолчанию, представляют высокие риски; переключитесь на пользователей без прав root:
services:
app:
image: your-app:v1.2.3
user: "1000:1000" # Пользователь без прав root
read_only: true # Файловая система только для чтения
volumes:
- /tmp/app:/tmp # Монтируйте определенные каталоги, если требуется доступ для записи
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
Пояснение:
- Файловая система только для чтения предотвращает несанкционированное изменение внутри контейнера.
- Убедитесь, что монтируемые тома ограничены необходимыми каталогами.
2. Сетевая изоляция и управление портами
Точно разделите внутренние и внешние сети, чтобы избежать exposing чувствительных сервисов общественности:
networks:
frontend:
internal: false
backend:
internal: true
services:
nginx:
networks: [frontend, backend]
database:
networks:
- backend
- Сеть Frontend: Может быть открыта для публичного доступа.
- Сеть Backend: Строго ограничена, только для внутренней связи.