Назад | Перейти на главную страницу

Как использовать UFW, блокирующий опубликованные порты из докера

Может показаться глупым вопросом, но я пытаюсь заставить работать следующее:

Таким образом, теперь каждый хост может получить доступ к опубликованному порту из любого места.

Как я могу ограничить доступ через UFW к этому опубликованному порту докеров?

Конкретный порт, который использует эта служба: 3333.

Я пытался заставить его работать, используя -p 127.0.0.1:3333:3333 чтобы привязать порт к localhost. Но тогда мне понадобится прокси, чтобы перейти от общедоступного порта с ограничением UFW к localhost:3333. Я тоже пробовал использовать iptables -j REDIRECT, но я не мог заставить его работать.

Таким образом, проблема не в том, что контейнер ограничивает доступ извне, это проблема в том, что он попадает в контейнер.

Я хотел бы сохранить текущую настройку UFW с явным внесением в белый список для обслуживания Dockerized.

Я нашел лучшее, более последовательное решение до появления нового решения docker iptables версии 1.5+.

Не используя FORWARD цепочка, но другая, правила обрабатываются перед docker изменяет цепочки iptable и, таким образом, переживет перезапуски контейнера докеров. Если кому-то это понадобится: это решило мою проблему с настраиваемыми правилами iptable и докером на хосте:

iptables -I PREROUTING 1 -t mangle ! -s [SOURCEIP_TO_ALLOW] -p tcp --dport [PORT] -j ACCEPT
iptables -I PREROUTING 2 -t mangle -p tcp --dport [PORT] -j DROP

Хитрость заключается в том, чтобы выполнить ПРЕРЯДКУ и вырубку. Таким образом, я могу разрешить SOURCEIP_TO_ALLOW на PORT на хосте и запретить вход другим ...!

У вас есть три варианта публикации / открытия портов из докера:

  • Ни указание EXPOSE, ни -p не означает, что служба в контейнере будет доступна только внутри самого контейнера.
  • Укажите EXPOSE и -p, чтобы служба в контейнере была доступна из любого места.
  • Укажите только EXPOSE. Служба недоступна за пределами докера, а только между контейнерами докеров для внутренней связи контейнера.

Если у вас есть брандмауэр на хосте, который блокирует все входящие подключения к порту 3333, но вы хотите иметь доступ по всему миру, вы можете использовать UFW, чтобы открыть порт или открыть порт для указанных исходных хостов, например:

  • ufw allow 3333 - это откроет порт 3333 для TCP и UDP соединений из любого источника.
  • ufw allow from 1.2.3.4 to any port 3333 - это разрешит доступ только с исходного IP 1.2.3.4 к любому IP на вашем хосте на порт 3333.

Обратите внимание, что вы также можете указать протокол, который будет использоваться с proto, иначе ufw откроется и для tcp, и для udp.