Основы безопасности Docker для небольших команд

Контейнеры не безопасны автоматически. Опубликованные порты, root и старые образы — обычные проблемы, и вот как их исправить.

Docker упрощает развёртывание приложений, и именно поэтому небезопасные настройки по умолчанию распространяются так быстро. Контейнер, работающий от root, с портом, открытым всему интернету, и образом двухлетней давности — частая картина. Эти шаги исправляют самые распространённые проблемы.

Перед началом: примеры используют Docker Compose. Учтите, что порты, опубликованные Docker, обходят правила ufw в Linux, потому что Docker создаёт собственные правила firewall — не полагайтесь только на ufw для защиты контейнеров.

Шаг 1. Публикуйте только нужное, лучше на localhost

Привязывайте порты приложений к 127.0.0.1 и ставьте перед ними обратный прокси (nginx, Traefik) с HTTPS. Базы данных и инструменты администрирования вообще не публикуйте.

# docker-compose.yml – publish only on localhost, behind the reverse proxy
services:
  app:
    image: myapp:1.4.2
    ports:
      - "127.0.0.1:8080:80"

Шаг 2. Не запускайте от root

Используйте в образе пользователя без прав root. Многие официальные образы уже его содержат.

# Dockerfile
FROM node:22-slim
WORKDIR /app
COPY . .
RUN npm ci --omit=dev
USER node
CMD ["node", "server.js"]

Шаг 3. Ограничьте возможности контейнера

Файловая система только для чтения, отсутствие Linux capabilities и запрет повышения привилегий ограничивают ущерб при взломе приложения. Храните секреты в файлах .env или хранилищах секретов, а не в образе, и никогда не монтируйте Docker-сокет в контейнеры, которым не доверяете полностью.

services:
  app:
    image: myapp:1.4.2
    read_only: true
    cap_drop: [ALL]
    security_opt: ["no-new-privileges:true"]
    env_file: .env

Шаг 4. Регулярно обновляйте образы

Используйте конкретные теги версий, по расписанию пересобирайте и скачивайте обновлённые образы и удаляйте старые. Сканируйте образы на известные уязвимости при сборке.

docker compose pull
docker compose up -d
docker image prune -f

Контейнер — это коробка, а не сейф. Важно, что внутри и кто может её открыть.

Нужна помощь? Свяжитесь с CySec — первая консультация бесплатно.


Все статьи

Нужна помощь с этим?

Наши инженеры проанализируют вашу текущую инфраструктуру и предложат конкретные улучшения.