Docker может обходить UFW через port binding - проверьте у себя
Если вдруг в вашем docker-compose.yml порты объявлены так:
ports:
- "5432:5432"
…это привязка к 0.0.0.0 - то есть порт торчит наружу на всех интерфейсах. Проблема в том, что Docker прописывает свои правила прямо в iptables, в обход UFW. Ваш файрвол честно «закрыт», а порт на самом деле открыт всему интернету.
Проверить просто. Посмотрите, на каких интерфейсах реально слушается порт внутри ОС::
ss -tlnp | grep 5432
# или через docker: docker port <container_name>
Если в выводе 0.0.0.0:5432 вместо 127.0.0.1:5432 - порт открыт наружу.
Исправление - одна строка (явно укажите localhost, чтобы Docker слушал только loopback-интерфейс, и порт оставался доступным только внутри хоста):
ports:
- "127.0.0.1:5432:5432"
Docker будет слушать только на loopback, и порт останется доступным только с хоста.
Почему сканеры не помогут
Паттерн "5432:5432" без явного 127.0.0.1: - это слепое пятно для Trivy, Checkov, Semgrep и Snyk. Ни один из них не флагует такой биндинг как эксплойт, потому что это мисконфиг а не уязвимость. Рассчитывать на CI-сканеры в этом случае нельзя - проверять нужно глазами или кастомным правилом.
Лига Сисадминов
2.7K постов19.2K подписчиков
Правила сообщества
Мы здесь рады любым постам связанным с рабочими буднями специалистов нашей сферы деятельности.