У нас есть мост докеров, содержащий несколько контейнеров докеров. Основной докер - это сервер nginx, который действует как веб-хост и перенаправляет все данные в другие контейнеры.
Теперь требуется, чтобы соединения были ограничены только указанным списком IP-адресов. Для этого я отредактировал файл сервера nginx:
server {
allow 127.0.0.0/8;
deny all;
...
Это должно позволить подключиться через loopback 127.0.0.1.
Однако это не удается, и просмотр журнала access.log показывает, почему: Все строки начинаются с:
172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET
172.25.0.1
это сетевой шлюз docker bridge; таким образом, докер «забывает» внешние IP-адреса, и я больше не могу фильтровать их.
Как я могу фильтровать по ips? Или перенаправить исходный IPS в докер?
Это ожидаемо, и именно так работает сеть докеров. По умолчанию вы получаете что-то вроде виртуальной сети на вашем хосте докеров. Перенаправляемые извне подключения будут приходить в каждый контейнер через docker0 и NAT.
Чтобы преодолеть это, простой ответ - использовать сеть хостов в контейнере nginx. т.е. --network host
возможность docker run
команда. Видеть: сеть хостов
Также прочтите документацию по сети докеров. Там это объясняется более подробно. https://docs.docker.com/network/