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

Вступление

Docker Swarm - это функция Docker, которая упрощает запуск хостов и контейнеров Docker в любом масштабе. Docker Swarm или кластер Docker состоит из одного или нескольких Dockerized хостов, которые функционируют как узлыmanager, и любого количества узловworker. Настройка такой системы требует осторожного манипулирования брандмауэром Linux.

Сетевые порты, необходимые для корректной работы Docker Swarm:

  • TCP-порт2376 для безопасного взаимодействия с клиентом Docker. Этот порт необходим для работы Docker Machine. Docker Machine используется для организации хостов Docker.

  • TCP-порт2377. Этот порт используется для связи между узлами Docker Swarm или кластера. Его нужно открыть только на узлах менеджера.

  • TCP и UDP-порт7946 для связи между узлами (обнаружение контейнерной сети).

  • Порт UDP4789 для оверлейного сетевого трафика (входящая сеть контейнера).

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

В этой статье вы узнаете, как настроить брандмауэр Linux в Ubuntu 16.04, используя различные приложения для управления брандмауэром, доступные во всех дистрибутивах Linux. Этими приложениями управления брандмауэром являются FirewallD, IPTables Tools и UFW, несложный брандмауэр. UFW - это приложение брандмауэра по умолчанию в дистрибутивах Ubuntu, включая Ubuntu 16.04. Хотя это руководство охватывает три метода, каждый из них дает один и тот же результат, поэтому вы можете выбрать тот, который вам наиболее знаком.

Предпосылки

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

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

[[method-1 -—- open-docker-swarm-ports-using-ufw]] == Метод 1 - открытие портов Docker Swarm с помощью UFW

Если вы просто настроили свои хосты Docker, UFW уже установлен. Вам просто нужно включить и настроить его. Следуйтеthis guide, чтобы узнать больше об использовании 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 не включен, включите его:

ufw enable

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

systemctl restart docker

Это все, что вам нужно сделать, чтобы открыть необходимые порты для Docker Swarm с помощью UFW.

[[метод-2 -—- open-docker-swarm-ports-using-firewalld]] == Метод 2 - открытие портов Docker Swarm с помощью FirewallD

FirewallD - это приложение брандмауэра по умолчанию в Fedora, CentOS и других дистрибутивах Linux, основанных на них. Но 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

[.note] #Note: Если вы допустили ошибку и вам нужно удалить запись, введите:
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.

[[method-3 -—- open-docker-swarm-ports-using-iptables]] == Метод 3 - открытие портов Docker Swarm с помощью IPTables

Чтобы использовать 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

На узлах, которые будут работать как рабочие 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 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

Это все, что нужно, чтобы открыть необходимые порты для Docker Swarm с помощью IPTables. Вы можете узнать больше о том, как работают эти правила, в руководствеHow the Iptables Firewall Works.

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

sudo netfilter-persistent stop

Затем очистите правила:

sudo netfilter-persistent flush

Наконец, сохраните пустые таблицы на диск:

sudo netfilter-persistent save

Затем вы можете переключиться на UFW или FirewallD.

Заключение

FirewallD, IPTables Tools и UFW - три приложения для управления брандмауэрами в мире Linux. Вы только что узнали, как использовать каждый из них для открытия сетевых портов, необходимых для настройки Docker Swarm. Какой метод вы используете, это вопрос личных предпочтений, так как все они одинаково способны.

Related