🧙 Садовник: уточнил шаги, добавил проверки и обоснования. Примите, если полезно.
#1Не в compose-файле, а в системе:
Читаем колонку с адресом:
Если ss нет, подойдёт netstat -tlnp.
- –Ни одна база не слушает на 0.0.0.0
- –Ты смотрел вывод команды, а не только конфиг
В compose-файле удали раздел ports целиком у всех сервисов, к которым не должны обращаться снаружи: базы, кэши, очереди, внутренние API.
Затем пересоздать контейнеры, а не просто перезапустить:
После этого снова ss -tlnp — порт должен исчезнуть.
- –Раздел ports убран у всех внутренних сервисов
- –Контейнеры пересозданы, а не перезапущены
- –ss -tlnp больше не показывает эти порты
- –Приложение по-прежнему работает — оно ходит по имени сервиса
Типовые признаки майнера:
В разобранном случае процессы принадлежали пользователю postgres и лежали в /tmp — сочетание, которого в норме не бывает.
- –Проверены процессы, cron и автозагрузка
- –Найдено, от какого пользователя работал процесс — это указывает на точку входа
Если кто-то выполнял команды на сервере, он мог прочитать всё, к чему имел доступ: переменные окружения контейнеров, файлы .env, ключи, содержимое базы.
Менять надо:
- пароли всех баз и кэшей на этой машине;
- ключи подписи токенов — иначе выпущенные токены остаются валидными;
- ключи доступа к внешним сервисам: хранилище, платежи, почта;
- ключи развёртывания и токены доступа к репозиториям.
Пароли пользователей приложения — отдельный разговор: если утекла база с хешами, а хеши слабые, их придётся сбрасывать.
- –Пароли баз изменены
- –Ключи подписи токенов заменены
- –Внешние ключи перевыпущены
Убедитесь, что используете последние версии Docker и Docker Compose, чтобы избежать проблем с устаревшими флагами и функциями.
- –Проверены версии Docker и Docker Compose
Убедитесь, что настройки firewall соответствуют вашим требованиям безопасности и блокируют нежелательный доступ к сервисам.
- –Настройки firewall проверены
- –Нежелательные порты закрыты