Проброс портов на контейнеры Docker с помощью брандмауэров Linux

Проброс портов на контейнеры Docker с помощью брандмауэров Linux

Life-Hack [Жизнь-Взлом]/Хакинг

В современном мире контейнеров Docker стал популярным решением для развертывания и управления приложениями.

Одним из распространенных вариантов использования является перенаправление сетевого трафика с определенного порта на хост-машине на порт внутри контейнера Docker.

Это может быть особенно полезно, когда необходимо открыть внешний доступ к службе, работающей внутри контейнера, или настроить обратный прокси-сервер для балансировки нагрузки.

В этой статье мы рассмотрим шаги, необходимые для перенаправления порта в контейнер Docker с помощью iptables, мощной и гибкой утилиты межсетевого экрана, доступной в большинстве дистрибутивов Linux.

Шаг 1: Определите IP-адрес контейнера Docker

Выполните следующую команду, чтобы узнать IP-адрес контейнера Docker:

doc

Замените имя или ID вашего контейнера.

Запишите IP-адрес, отображаемый в выходных данных.


Шаг 2: Перенаправление портов на контейнеры Docker

Использование Iptables

Чтобы перенаправить порт в контейнер Docker с помощью iptables, выполните следующие действия:

Добавьте правила iptables для переадресации: Теперь настройте правила iptables для перенаправления нужного порта в контейнер Docker.

Замените <HOST_PORT> номером порта на хост-машине, <CONTAINER_IP> IP-адресом вашего контейнера, а <CONTAINER_PORT> – номером порта внутри контейнера.

  sudo iptables --t nat --A PREROUTING --p tcp ---dport <HOST_PORT> --j DNAT ---to--destination <CONTAINER_IP>:<CONTAINER_PORT>

sudo i

Например, если необходимо перенаправить порт 8080 с хост-машины на порт 80 контейнера Docker, имеющего IP-адрес 172.21.0.7, то необходимо выполнить указанные команды:


sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 172.21.0.7:80

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Сохраните правила iptables: Для того чтобы правила iptables сохранялись при перезагрузке, их можно сохранить с помощью команды iptables-save:

 sudo iptables-save > /etc/iptables/rules.v4
Обратите внимание, что путь к файлу правил может отличаться в зависимости от дистрибутива Linux.

Сделайте правила iptables постоянными: Если вы используете дистрибутив на базе Debian/Ubuntu, вы можете установить пакет iptables-persistent, чтобы правила сохранялись при перезагрузке:

 sudo apt-get install iptables-persistent

Использование firewall-cmd

Чтобы перенаправить порт в контейнер Docker с помощью firewall-cmd, входящего в состав утилиты firewalld в системах на базе RHEL/CentOS/Fedora, выполните следующие действия:

Добавьте правила firewall-cmd для переадресации: Теперь настройте правила firewall-cmd для перенаправления нужного порта в ваш Docker-контейнер.

Замените <HOST_PORT> номером порта на хост-машине, <CONTAINER_IP> – IP-адресом вашего контейнера, а <CONTAINER_PORT> – номером порта внутри контейнера.

Сначала включите маскарад в зоне active:


sudo firewall-cmd --zone=public --add-masquerade --permanent

Далее создайте правило переадресации портов:


  sudo firewall-cmd --zone=public --add-forward-port=port=<HOST_PORT>:proto=tcp:toaddr=<CONTAINER_IP>:toport=<CONTAINER_PORT> --permanent

Например, чтобы перенаправить порт 8080 на хост-машине на порт 80 контейнера Docker с IP-адресом 172.17.0.7, нужно выполнить следующую команду:


  sudo firewall-cmd --zone=public --add-forward-port=port=8080:prot

Перезагрузите правила межсетевого экрана:

После добавления правил необходимо перезагрузить конфигурацию firewalld, чтобы изменения вступили в силу:


  sudo firewall-cmd --reload

Теперь проброс портов должен работать, и любой трафик, приходящий на <HOST_PORT> на хост-машине, будет перенаправляться на <CONTAINER_PORT> в контейнере Docker.


Заключение

В заключение следует отметить, что перенаправление порта на контейнер Docker с помощью iptables – это простой процесс, который включает в себя определение IP-адреса контейнера, добавление необходимых правил iptables и обеспечение сохранения правил при перезагрузке.

Выполнив описанные в этой статье действия, можно добиться того, что трафик, отправляемый на определенный порт хост-машины, будет перенаправлен на соответствующий порт контейнера.

Такой подход позволяет открывать сервисы, работающие внутри контейнеров, устанавливать обратные прокси-серверы, реализовывать балансировку нагрузки и т.д., повышая гибкость и эффективность контейнерной инфраструктуры.


Источник


Report Page