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

Вступление

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 + для связи между узлами (обнаружение контейнерной сети).

  • UDP-порт + 4789 + для оверлейного сетевого трафика (входная сеть контейнера).

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

Предпосылки

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

Метод 1 - Откройте порты Docker Swarm с помощью FirewallD

FirewallD является приложением брандмауэра по умолчанию в CentOS 7, но на новом сервере CentOS 7 оно отключено «из коробки». Итак, давайте включим его и добавим сетевые порты, необходимые для работы Docker Swarm.

Перед началом проверьте его статус:

systemctl status firewalld

Он не должен быть запущен, поэтому запустите его:

systemctl start firewalld

Затем включите его, чтобы он запускался при загрузке:

systemctl enable firewalld

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

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 --reload

Затем перезапустите Docker.

systemctl restart docker

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

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.

Метод 2 - Откройте порты Docker Swarm с помощью IPTables

Чтобы использовать IPTables в любом дистрибутиве Linux, вам сначала нужно удалить любые другие утилиты брандмауэра. Чтобы переключиться на IPTables из FirewallD, сначала остановите FirewallD:

systemctl stop firewalld

Затем отключи

systemctl disable firewalld

Затем установите пакет + iptables-services, который управляет автоматической загрузкой правил IPTables:

yum install iptables-services

Далее запустите IPTables:

systemctl start iptables

Затем включите его, чтобы он автоматически запускался при загрузке:

systemctl enable iptables

Прежде чем вы начнете добавлять специфичные для Docker Swarm правила в цепочку INPUT, давайте взглянем на правила по умолчанию в этой цепочке:

iptables -L INPUT --line-numbers

Вывод должен выглядеть точно так:

OutputChain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

Взятые вместе, правила по умолчанию обеспечивают защиту сервера с сохранением состояния, запрещая весь входной трафик, кроме тех, которые уже установлены. SSH трафик разрешен в. Обратите внимание на правило № 5, выделенное выше, потому что это правило отказа от мошенничества. Для правильной работы Docker Swarm добавленные вами правила должны быть добавлены обыше этого правила. Это означает, что новые правила должны быть вставлены, а не добавлены в цепочку INPUT.

Теперь, когда вы знаете, что делать, вы можете добавить нужные вам правила, используя утилиту + iptables +. Этот первый набор команд должен выполняться на узлах, которые будут служить менеджерами Swarm.

iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 2377 -j ACCEPT
iptables -I INPUT 7 -p tcp --dport 7946 -j ACCEPT
iptables -I INPUT 8 -p udp --dport 7946 -j ACCEPT
iptables -I INPUT 9 -p udp --dport 4789 -j ACCEPT

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

/usr/libexec/iptables/iptables.init save

Правила теперь сохраняются в файле с именем + iptables + в каталоге + / etc / sysconfig +. И если вы просматриваете правила, используя + iptables -L --line-numbers +, вы увидите, что все правила были вставлены над правилом отклонения всеобъемлющего:

OutputChain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
2    ACCEPT     icmp --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere
4    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
5    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:2376
6    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:7946
7    ACCEPT     udp  --  anywhere             anywhere             udp dpt:7946
8    ACCEPT     udp  --  anywhere             anywhere             udp dpt:4789
9    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
10   REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Затем перезапустите Docker.

Outputsystemctl restart docker

На узлах, которые будут работать как рабочие Swarm, выполните эти команды:

iptables -I INPUT 5 -p tcp --dport 2376 -j ACCEPT
iptables -I INPUT 6 -p tcp --dport 7946 -j ACCEPT
iptables -I INPUT 7 -p udp --dport 7946 -j ACCEPT
iptables -I INPUT 8 -p udp --dport 4789 -j ACCEPT

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

/usr/libexec/iptables/iptables.init save

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

systemctl restart docker

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

Заключение

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

Related