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

Как сделать белый список IP-адресов для порта, доступного с помощью docker-compose

Я пытаюсь сделать порт (который предоставляется docker-compose) на общедоступном IP-адресе доступным только для некоторых других моих IP-адресов. Мне все еще нужны другие порты для приема подключений с любых IP-адресов.

Я пробовал использовать ufw для этого, но, по-видимому, сам докер вносит некоторые изменения в iptables, которые я не смогу сделать обычным способом.

Одним из вариантов может быть использование обратного прокси (контейнер nginx \ traefik \ haproxy?) Для приложения, которое выполняет фильтрацию за вас.

Не уверен, насколько хорошо это переводится в UFW, но правила iptables для выполнения этих шагов включают что-то вроде:

iptables -I DOCKER-USER -i eth0 -s 10.0.0.0/24 -p tcp \
  -m conntrack --ctorigdstport 8080 -j ACCEPT
iptables -I DOCKER-USER -i eth0 ! -s 10.0.0.0/24 -p tcp \
  -m conntrack --ctorigdstport 8080 -j DROP

Вот подробности о частях этих команд:

  • Стол должен быть DOCKER-USER который докер будет предоставлять, выполнять все запросы и не изменять эту таблицу, как другие таблицы.
  • Вы хотите вставить в DOCKER-USER вместо добавления, потому что правило по умолчанию в конце этой таблицы - принимать все. Добавление правила после этого будет проигнорировано.
  • Интерфейс, eth0, это внешний сетевой интерфейс. Часто вы не хотите блокировать запросы внутренне, с помощью обратной связи или между контейнерами.
  • Исходный IP CIDR указывает, какой диапазон адресов вы хотите разрешить, в данном случае 10.0.0.0/24, или сеть класса C 10.0.0.*. Все остальное к целевому порту блокируется вторым правилом.
  • В conntrack и ctorigdstport необходим для указания исходного порта назначения, также известного как опубликованный порт, а не порта контейнера. После того, как правила mangle изменили пакеты для связи с контейнером, порт, видимый iptables, будет портом контейнера, и несколько контейнеров могут прослушивать один и тот же порт внутри и публиковать на разных портах на хосте.