Выбор ответа Senior Сети и тома обновлено

Docker и ufw

Вопрос

На сервере ufw разрешает только 22, 80, 443. Контейнер PostgreSQL запущен с -p 5432:5432. Доступна ли база из интернета?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Да: правила iptables Docker (DNAT, FORWARD) обходят правила ufw в цепочке INPUT. Публикация порта реализуется правилами nat и FORWARD, которые Docker вставляет сам. ufw управляет INPUT, и трафик к контейнеру его не проходит.

Варианты ответа

  1. Нет: ufw блокирует в INPUT всё, что не разрешено, включая опубликованные порты
  2. Нет: Docker по умолчанию публикует порты только на 127.0.0.1, не на внешний интерфейс
  3. Только если в образе есть EXPOSE 5432, иначе Docker не создаёт правило проброса
  4. Да: правила iptables Docker (DNAT, FORWARD) обходят правила ufw в цепочке INPUTправильный ответ

Разбор

Публикация порта реализуется правилами nat и FORWARD, которые Docker вставляет сам. ufw управляет INPUT, и трафик к контейнеру его не проходит. Поэтому порт открыт миру. Решения: не публиковать порт базы вовсе (приложение ходит по внутренней сети), привязать к 127.0.0.1:5432:5432 или фильтровать в цепочке DOCKER-USER. По умолчанию Docker слушает 0.0.0.0, а EXPOSE на публикацию не влияет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.