Как сделать так, чтобы перенаправленные порты Docker не были открыты для внешнего мира? - PullRequest
1 голос
/ 19 марта 2019

У меня есть несколько веб-сервисов в разных контейнерах, и я перенаправил 80 портов каждого сервера на другой порт на хост-сервере. (контейнер 1 80 -> 8003, контейнер 2 80 -> 8004, контейнер 3 80 -> 8005) Я хочу запретить доступ к этим портам, кроме предварительно настроенного списка ip

Я добавил правила iptables в цепочку «docker-user» следующим образом:

-A INPUT -s 212.154.74.194/32 -p tcp -j ACCEPT //accept all from this ip
-A INPUT -s 185.22.208.0/25 -p tcp -j ACCEPT //accept all from this ip
-A INPUT -p tcp -m tcp --dport 8003 -j DROP //block anyone except allowed ips 
-A INPUT -p tcp -m tcp --dport 8004 -j DROP //block anyone except allowed ips
-A INPUT -p tcp -m tcp --dport 8005 -j DROP //block anyone except allowed ips

Но это не работает. К маршрутизируемым портам все еще можно получить доступ снаружи. Я не знаю, что я сделал не так. Как я могу заблокировать доступ к маршрутизируемым портам?

1 Ответ

1 голос
/ 19 марта 2019

Похоже на Из докера Docker довольно исчерпывающе отвечает на ваш вопрос:

По умолчанию все внешние IP-адреса разрешено подключаться к демону Docker.Чтобы разрешить доступ к контейнерам только для определенного IP-адреса или сети, вставьте отрицательное правило вверху цепочки фильтров DOCKER.Например, следующее правило ограничивает внешний доступ ко всем IP-адресам, кроме 192.168.1.1:

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

Чтобы разрешить определенную подсеть:

iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP

Бонус: вы также можете ограничитьсоединения полностью с localhost: docker run -p 127.0.0.1:80:8003 должен автоматически ограничивать доступ к localhost.

В качестве альтернативы с docker compose:

webapp:
    image: image_name
    ports:
    - "127.0.0.1:80:8003"
...