Knowledge Base
Docker Daemon API открыт публично (порт 2375 / 2376)
Docker Daemon API открыт публично
Категория: Server Hardening · Риск: critical
Docker Daemon API открыт публично
Это хуже root-доступа к серверу
Docker Daemon без TLS (порт 2375) даёт **полный контроль над хостом**:
# Атакующий видит все контейнеры
curl http://<IP>:2375/v1.41/containers/json
# Запускает контейнер с монтированием хостовой файловой системы
curl -X POST http://<IP>:2375/v1.41/containers/create \
-H "Content-Type: application/json" \
-d '{
"Image": "alpine",
"Cmd": ["sh", "-c", "cat /host/etc/shadow"],
"Binds": ["/:/host"]
}'
# Результат: читает /etc/shadow хоста → пароли всех пользователей
# Или: записывает backdoor в /host/etc/cron.d/
Это полный RCE (Remote Code Execution) и container escape в одном шаге.
Как проверить
curl -s http://<IP>:2375/v1.41/info | jq .ServerVersion
# Если вернул данные — критическая уязвимость
Немедленное исправление
Полностью отключить TCP-сокет Docker
# Проверить текущую конфигурацию
cat /etc/docker/daemon.json
# или
systemctl cat docker | grep ExecStart
// /etc/docker/daemon.json — убрать tcp-listener
{
"hosts": ["unix:///var/run/docker.sock"]
// НЕТ "tcp://0.0.0.0:2375"
}
# /etc/systemd/system/docker.service.d/override.conf
# Убрать -H tcp://0.0.0.0:2375 из ExecStart
systemctl daemon-reload && systemctl restart docker
Закрыть файрволом
ufw deny 2375
ufw deny 2376
Если нужен удалённый доступ — только через TLS (порт 2376)
# Генерация TLS-сертификатов для Docker daemon
# Официальная документация: https://docs.docker.com/engine/security/protect-access/
# daemon.json с TLS
{
"hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"],
"tls": true,
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"tlscacert": "/etc/docker/ca.pem",
"tlsverify": true
}
Альтернатива — SSH туннель
# Безопасный удалённый доступ через SSH (не открывает порт)
export DOCKER_HOST="ssh://user@remote-host"
docker ps # подключается через SSH, не через открытый порт
Docker socket (/var/run/docker.sock)
Unix socket `/var/run/docker.sock` **не менее опасен**, если смонтирован в контейнер:
# ОПАСНО:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Если нужно — ограничьте правами (только чтение, docker proxy)
Связанные проверки
- [Container public ports](/kb/server_hardening/container-public-ports-inventory)
- [Production secrets](/kb/server_hardening/production-secrets-baseline)