IPTABLES: блокировка порта только для внешних пользователей

у меня сервер с двумя запущенными контейнерами docker. Одним из них является интерфейс небольшого приложения, подается с http-server. Это приложение используется Javascript fetch API для извлечения данных из действительно простой базы данных на основе узла.JS' json-server ' модуль, который работает в другом контейнере.

случается, что json-server делает порт 3000 доступным для внешнего пользователя, то есть, если кто-то указывает браузер http://example.com:3000 мои данные будут доступны без фильтрации и информация, представленная на сайте. Это не то, чего я хочу.

Я хотел бы заблокировать порт 3000 во внешнем мире, позволяя другому контейнеру docker получать данные, как обычно. Я думаю, что это может быть сделано на основе ИС, но я не знаю как это сделать.

это моя текущая конфигурация Iptables, в основном созданная самим Docker в качестве стандарта.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http-alt
ACCEPT     tcp  --  anywhere             172.17.0.3           tcp dpt:3000

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere 

в конфигурации выше, IP 172.17.0.2 - это мое приложение, в то время как 172.17.0.3 IP-адрес контейнера моей базы данных.

frontend контейнер запускается с

docker run -p 80:8080 --name=frontend -d mtr/frontend

и

docker run -p 3000:3000 --name=database -d mtr/database

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

любые предложения о том, как я могу это сделать?

5
задан Ed de Almeida
источник

1 ответов

Так вы "принять" "ПТС" подключения "везде" хозяина "172.17.0.3" на "TCP" порт "ДПТ:3000" и я думаю, что есть также ДНАТ правило, которое перенаправляет все входящие соединения на "ты-публичный IP-адреса:3000" на "172.17.0.3:3000" (см. iptables -t nat -L --line-numbers), что считается нормальным.

удалите правило DNAT из таблицы NAT.

iptables -t nat -D PREROUTING <the-dnat-rule-number>
1
отвечен bcs78 2018-09-27 14:55:59
источник

Другие вопросы docker iptables networking port