Comment configurer le pare-feu Linux pour Docker Swarm sur Ubuntu 16.04

introduction

Docker Swarm est une fonctionnalité de Docker qui facilite l'exécution des hôtes et des conteneurs Docker à grande échelle. Un Docker Swarm, ou cluster Docker, est composé d'un ou plusieurs hôtes Dockerized qui fonctionnent comme des nœudsmanager, et un nombre quelconque de nœudsworker. La configuration d’un tel système nécessite une manipulation minutieuse du pare-feu Linux.

Les ports réseau nécessaires au bon fonctionnement de Docker Swarm sont les suivants:

  • Port TCP2376 pour la communication sécurisée du client Docker. Ce port est requis pour que Docker Machine fonctionne. Docker Machine est utilisé pour orchestrer des hôtes Docker.

  • Port TCP2377. Ce port est utilisé pour la communication entre les nœuds d’un groupe d’armement ou d’un groupe Docker Swarm. Il ne doit être ouvert que sur les nœuds du gestionnaire.

  • Port TCP et UDP7946 pour la communication entre les nœuds (découverte de réseau de conteneur).

  • Port UDP4789 pour le trafic réseau de superposition (réseau d'entrée de conteneur).

Note: Outre ces ports, le port22 (pour le trafic SSH) et tous les autres ports nécessaires à l'exécution de services spécifiques sur le cluster doivent être ouverts.

Dans cet article, vous apprendrez à configurer le pare-feu Linux sur Ubuntu 16.04 à l’aide des différentes applications de gestion de pare-feu disponibles sur toutes les distributions Linux. Ces applications de gestion de pare-feu sont FirewallD, IPTables Tools et UFW, le pare-feu simple. UFW est l'application de pare-feu par défaut sur les distributions Ubuntu, y compris Ubuntu 16.04. Bien que ce tutoriel couvre trois méthodes, chacune d’elles aboutit au même résultat, vous pouvez donc choisir celle que vous connaissez le mieux.

Conditions préalables

Avant de continuer avec cet article, vous devriez:

Note: Vous remarquerez que les commandes (et toutes les commandes de cet article) ne sont pas précédées desudo. En effet, il est supposé que vous êtes connecté au serveur à l'aide de la commandedocker-machine ssh après l'avoir provisionné à l'aide de Docker Machine.

[[method-1 -—- opening-docker-swarm-ports-using-ufw]] == Méthode 1 - Ouverture de ports Docker Swarm à l'aide de UFW

Si vous venez de configurer vos hôtes Docker, UFW est déjà installé. Vous devez juste l'activer et le configurer. Suivezthis guide pour en savoir plus sur l'utilisation d'UFW sur Ubuntu 16.04.

Exécutez les commandes suivantes sur les nœuds qui fonctionneront en tant que gestionnaires 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

Ensuite, rechargez UFW:

ufw reload

Si UFW n’est pas activé, utilisez la commande suivante:

ufw enable

Cela peut ne pas être nécessaire, mais il n'est jamais inutile de redémarrer le démon Docker chaque fois que vous modifiez et redémarrez le pare-feu:

systemctl restart docker

Ensuite, sur chaque nœud qui fonctionnera en tant que travailleur, exécutez les commandes suivantes:

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

Ensuite, rechargez UFW:

ufw reload

Si UFW n’est pas activé, activez-le:

ufw enable

Puis redémarrez le démon Docker:

systemctl restart docker

C’est tout ce dont vous avez besoin pour ouvrir les ports nécessaires à Docker Swarm en utilisant UFW.

[[method-2 -—- opening-docker-swarm-ports-using-firewalld]] == Méthode 2 - Ouverture des ports Docker Swarm à l'aide de FirewallD

FirewallD est l'application de pare-feu par défaut sur Fedora, CentOS et les autres distributions Linux qui en sont basées. Mais FirewallD est également disponible sur d'autres distributions Linux, y compris Ubuntu 16.04.

Si vous choisissez d'utiliser FirewallD au lieu de UFW, commencez par désinstaller UFW:

apt-get purge ufw

Puis installez FirewallD:

apt-get install firewalld

Vérifiez qu’il est en cours d’exécution:

systemctl status firewalld

S'il ne fonctionne pas, lancez-le:

systemctl start firewalld

Puis activez-le pour qu'il démarre au démarrage:

systemctl enable firewalld

Sur le nœud qui sera un gestionnaire Swarm, utilisez les commandes suivantes pour ouvrir les ports nécessaires:

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: Si vous faites une erreur et devez supprimer une entrée, tapez:
firewall-cmd --remove-port=port-number/tcp —permanent.
#

Ensuite, rechargez le pare-feu:

firewall-cmd --reload

Puis redémarrez Docker.

systemctl restart docker

Ensuite, sur chaque nœud qui fonctionnera en tant que travailleur Swarm, exécutez les commandes suivantes:

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

Ensuite, rechargez le pare-feu:

firewall-cmd --reload

Puis redémarrez Docker.

systemctl restart docker

Vous avez utilisé avec succès FirewallD pour ouvrir les ports nécessaires à Docker Swarm.

[[method-3 -—- opening-docker-swarm-ports-using-iptables]] == Méthode 3 - Ouverture de ports Docker Swarm à l'aide d'IPTables

Pour utiliser IPtables sur n’importe quelle distribution Linux, vous devez d’abord désinstaller tout autre utilitaire de pare-feu. Si vous passez de FirewallD ou UFW, commencez par les désinstaller.

Ensuite, installez le packageiptables-persistent, qui gère le chargement automatique des règles IPtables:

apt-get install iptables-persistent

Ensuite, supprimez les règles existantes à l’aide de cette commande:

netfilter-persistent flush

Vous pouvez maintenant ajouter des règles à l'aide de l'utilitaireiptables. Ce premier ensemble de commandes doit être exécuté sur les nœuds qui serviront de gestionnaires 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

Après avoir entré toutes les commandes, enregistrez les règles sur le disque:

netfilter-persistent save

Puis redémarrez Docker.

sudo systemctl restart docker

Sur les nœuds qui fonctionneront en tant que travailleurs Swarm, exécutez ces commandes:

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

Enregistrez ces nouvelles règles sur le disque:

netfilter-persistent save

Puis redémarrez Docker:

sudo systemctl restart docker

C’est tout ce qui est nécessaire pour ouvrir les ports nécessaires à Docker Swarm à l’aide de IPTables. Vous pouvez en savoir plus sur le fonctionnement de ces règles dans le didacticielHow the Iptables Firewall Works.

Si vous souhaitez passer à FirewallD ou UFW après avoir utilisé cette méthode, la méthode appropriée consiste à arrêter le pare-feu en premier:

sudo netfilter-persistent stop

Puis éliminez les règles:

sudo netfilter-persistent flush

Enfin, sauvegardez les tables maintenant vides sur le disque:

sudo netfilter-persistent save

Ensuite, vous pouvez passer à UFW ou FirewallD.

Conclusion

FirewallD, IPTables Tools et UFW sont les trois applications de gestion de pare-feu dans le monde Linux. Vous venez d'apprendre à utiliser chacun d'eux pour ouvrir les ports réseau nécessaires à la configuration de Docker Swarm. La méthode que vous utilisez est juste une question de préférence personnelle, car ils sont tous également capables.