IPTABLES: блокировка порта только для внешних пользователей
449
Ed de Almeida
У меня есть сервер с двумя работающими док-контейнерами. Одним из них является интерфейс небольшого приложения, которое подается вместе с http-server. Это приложение использовало API выборки Javascript для извлечения данных из очень простой базы данных, основанной на модуле json-server Node.js, который работает в другом контейнере.
Бывает, что json-serverпорт 3000 становится доступным для внешнего пользователя, т. Е. Если кто-то указывает на браузер http://example.com:3000, мои данные будут доступны без фильтрации и представления, предоставляемых внешним интерфейсом. Это не то, что я хочу.
Я хотел бы заблокировать порт 3000 во внешнем мире, в то же время позволяя другому контейнеру докера получать данные, как обычно. Я думаю, что это может быть сделано на основе ИС, но я не знаю, как это сделать.
Это моя текущая конфигурация Iptables, в основном созданная самим Docker в качестве стандарта.
В приведенной выше конфигурации IP 172.17.0.2 - это мое приложение, а 172.17.0.3 - это IP-адрес контейнера моей базы данных.
Контейнер внешнего интерфейса запускается с
docker run -p 80:8080 --name=frontend -d mtr/frontend
а второй с
docker run -p 3000:3000 --name=database -d mtr/database
Я также рассмотрел возможность использования Docker для ограничения доступа, но после многих исследований я ничего не смог найти.
Любые предложения о том, как я могу это сделать?
1 ответ на вопрос
1
bcs78
Так как вы «ПРИНИМАЕТЕ» «tcp» соединения из «где угодно» с хостом «172.17.0.3» на «tcp» порту «dpt: 3000», и я предполагаю, что есть также правило DNAT, которое перенаправляет все входящие соединения в «you-public» -ip-адрес: от 3000 "до" 172.17.0.3:3000 "(см. iptables -t nat -L --line-numbers), который считается нормальным.