Настройка брандмауэра Linux для Docker Swarm в Ubuntu 16.04

Docker Swarm – это функция кластеризации Docker, которая значительно упрощает запуск контейнеров и хостов Docker. Кластер Docker Swarm состоит из контейнеризированных хостов Docker, одна часть которых функционирует как ведущие ноды (менеджеры), а вторая – как ведомые ноды (рабочие ноды, или воркеры). Для поддержки такой системы нужно правильно настроить брандмауэр Linux.

Для корректной работы кластера Docker Swarm необходимы следующие порты:

  • TCP-порт 2376 – для безопасного взаимодействия клиентов Docker и работы Docker Machine (программы, которая обеспечивает оркестровку хостов Docker).
  • TCP-порт 2377 – для взаимодействия нод кластера Docker Swarm (нужно открыть только на нодах-менеджерах).
  • TCP- и UDP-порт 7946 – для связи между нодами (обнаружение сети контейнера).
  • UDP-порт 4789 – для трафика оверлейной сети.

Примечание: Помимо вышеперечисленных портов откройте порт 22 (трафик SSH) и любые другие порты, необходимые для поддержки конкретных сервисов кластера.

Данное руководство научит вас настраивать брандмауэр Linux на сервере Ubuntu 16.04 при помощи различных приложений для управления брандмауэром, доступных в дистрибутивах Linux: FirewallD, IPTables и UFW (Uncomplicated Firewall). Дистрибутив Ubuntu по умолчанию использует UFW. В руководстве показано, как при помощи разных методов достичь одного и того же результата; потому вы можете выбрать наиболее знакомый вам инструмент и выполнить предназначенный для него раздел.

Требования

Чтобы следовать руководству, вам понадобятся предварительно настроенные хосты для кластера (минимум один менеджер и один воркер). Советы по настройке можно найти в статье Управление удалёнными хостами Docker с помощью Docker Machine в Ubuntu 16.04.

Примечание: В руководстве предполагается, что вы подключились к серверу с помощью команды docker-machine ssh (после его оркестровки через Docker Machine). Потому все команды данного руководства выполняются без sudo.

Метод 1: Настройка UFW для поддержки Docker Swarm

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

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 16.04

Чтобы открыть необходимые порты, на одном из менеджеров Swarm запустите следующий набор команд:

ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp

Затем перезапустите UFW:

ufw reload

Если брандмауэр UFW не включен, введите команду:

ufw enable

После любых изменений настроек рекомендуется перезапустить демон Docker (это не всегда необходимо, но никогда не помешает).

systemctl restart docker

После этого нужно выполнить следующие команды на всех воркерах кластера:

ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp

Не забудьте после этого перезапустить на воркере UFW:

ufw reload

Опять же, если брандмауэр не включен, включите его:

ufw enable

Перезапустите демон Docker:

systemctl restart docker

Теперь брандмауэр UFW поддерживает Docker Swarm.

Метод 2: Настройка FirewallD для поддержки Docker Swarm

Приложение FirewallD по умолчанию используется в Fedora, CentOS и других дистрибутивах на их основе. Однако FirewallD можно использовать и в других дистрибутивах Linux, в том числе и в Ubuntu 16.04.

Чтобы использовать FirewallD вместо UFW, для начала удалите UFW.

apt-get purge ufw

Затем установите FirewallD:

apt-get install firewalld

Убедитесь, что приложение запущено:

systemctl status firewalld

Если приложение не запустилось автоматически, сделайте это вручную:

systemctl start firewalld

Чтобы приложение запускалось автоматически, введите:

systemctl enable firewalld

Перейдите на менеджер Swarm и используйте следующий набор команд, чтоб открыть требуемые порты:

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent

Примечание: Если вы допустили ошибку и хотите удалить запись, введите:

firewall-cmd --remove-port=port-number/tcp —permanent

Перезапустите брандмауэр:

firewall-cmd --reload

Перезапустите Docker:

systemctl restart docker

После этого нужно выполнить следующие команды на всех воркерах кластера Swarm:

firewall-cmd --add-port=22/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent

Не забудьте перезапустить брандмауэр:

firewall-cmd --reload

и Docker:

systemctl restart docker

Теперь брандмауэр FirewallD поддерживает Docker Swarm.

Метод 3: Настройка IPTables для поддержки Docker Swarm

Чтобы использовать IPtables в любом из дистрибутивов Linux, необходимо сначала удалить другие утилиты брандмауэров (например, FirewallD или UFW).

Затем нужно установить пакет iptables-persistent, который отвечает за автоматическую загрузку правил IPtables.

apt-get install iptables-persistent

После этого сбросьте все существующие правила, запустив следующую команду:

netfilter-persistent flush

Теперь можно использовать утилиту iptables. Запустите следующий набор команд на одном из менеджеров кластера Swarm:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 2377 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

Сохраните правила (иначе после перезагрузки сервера они будут утрачены):

netfilter-persistent save

Перезапустите Docker:

sudo systemctl restart docker

После этого нужно выполнить следующий набор команд на всех воркерах кластера:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 2376 -j ACCEPT
iptables -A INPUT -p tcp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 7946 -j ACCEPT
iptables -A INPUT -p udp --dport 4789 -j ACCEPT

Сохраните правила:

netfilter-persistent save

и перезапустите Docker:

sudo systemctl restart docker

Теперь брандмауэр IPTables поддерживает Docker Swarm.

Читайте также: Как работает IPTables

Если вы захотите вернуться к FirewallD или UFW, остановите брандмауэр:

sudo netfilter-persistent stop

Затем нужно сбросить правила:

sudo netfilter-persistent flush

и сохранить пустой набор:

sudo netfilter-persistent save

Теперь вы можете установить и настроить UFW или FirewallD.

Заключение

FirewallD, IPTables и UFW – основные инструменты для управления брандмауэром в Linux. Теперь вы знаете, как с их помощью открыть порты в брандмауэре для поддержки кластера Docker Swarm.

Tags: , , , , , ,

Добавить комментарий