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 d'hôtes et de conteneurs Docker à grande échelle. Un Docker Swarm, ou cluster Docker, est composé d'un ou plusieurs hôtes Dockerisés qui fonctionnent comme des nœuds manager et un nombre quelconque de nœuds worker. La mise en place d'un tel système nécessite une manipulation minutieuse du pare-feu Linux.
Les ports réseau requis pour qu'un Docker Swarm fonctionne correctement sont :
- Port TCP
2376
pour une communication client Docker sécurisée. Ce port est requis pour que Docker Machine fonctionne. Docker Machine est utilisé pour orchestrer les hôtes Docker. - Port TCP
2377
. Ce port est utilisé pour la communication entre les nœuds d'un Docker Swarm ou d'un cluster. Il ne doit être ouvert que sur les nœuds de gestionnaire. - Port TCP et UDP
7946
pour la communication entre les nœuds (découverte du réseau de conteneurs). - Port UDP
4789
pour le trafic réseau superposé (réseau d'entrée de conteneur).
Remarque : Outre ces ports, le port 22
(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 didacticiel couvre trois méthodes, chacune donne le même résultat, vous pouvez donc choisir celle que vous connaissez le mieux.
Conditions préalables
Avant de poursuivre cet article, vous devez :
- Configurez les hôtes qui composent votre cluster, y compris au moins un swarm manager et un swarm worker. Vous pouvez suivre le tutoriel Comment provisionner et gérer des hôtes Docker distants avec Docker Machine sur Ubuntu 16.04 pour les configurer.
Remarque : Vous remarquerez que les commandes (et toutes les commandes de cet article) ne sont pas précédées de sudo
. En effet, il est supposé que vous êtes connecté au serveur à l'aide de la commande docker-machine ssh
après l'avoir provisionné à l'aide de Docker Machine.
Méthode 1 - Ouverture des ports Docker Swarm à l'aide d'UFW
Si vous venez de configurer vos hôtes Docker, UFW est déjà installé. Il vous suffit de l'activer et de le configurer. Suivez ce 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é, faites-le avec la commande suivante :
ufw enable
Cela n'est peut-être pas nécessaire, mais cela ne fait jamais de mal 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 comme un nœud de calcul, 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
Redémarrez ensuite le démon Docker :
systemctl restart docker
C'est tout ce que vous devez faire pour ouvrir les ports nécessaires pour Docker Swarm en utilisant UFW.
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 d'autres distributions Linux basées sur eux. Mais FirewallD est également disponible sur d'autres distributions Linux, y compris Ubuntu 16.04.
Si vous choisissez d'utiliser FirewallD au lieu d'UFW, désinstallez d'abord UFW :
apt-get purge ufw
Installez ensuite FirewallD :
apt-get install firewalld
Vérifiez qu'il est en cours d'exécution :
systemctl status firewalld
S'il ne fonctionne pas, démarrez-le :
systemctl start firewalld
Activez-le ensuite 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
Remarque : Si vous faites une erreur et devez supprimer une entrée, saisissez : firewall-cmd --remove-port=port-number/tcp —permanent
.
Ensuite, rechargez le pare-feu :
firewall-cmd --reload
Redémarrez ensuite Docker.
systemctl restart docker
Ensuite, sur chaque nœud qui fonctionnera en tant que worker 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
Redémarrez ensuite Docker.
systemctl restart docker
Vous avez utilisé avec succès FirewallD pour ouvrir les ports nécessaires pour Docker Swarm.
Méthode 3 - Ouverture des ports Docker Swarm à l'aide d'IPTables
Pour utiliser IPtables sur n'importe quelle distribution Linux, vous devez d'abord désinstaller tous les autres utilitaires de pare-feu. Si vous passez de FirewallD ou UFW, commencez par les désinstaller.
Installez ensuite le package iptables-persistent
qui gère le chargement automatique des règles IPtables :
apt-get install iptables-persistent
Ensuite, videz toutes les règles existantes à l'aide de cette commande :
netfilter-persistent flush
Vous pouvez maintenant ajouter des règles à l'aide de l'utilitaire iptables
. 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 saisi toutes les commandes, enregistrez les règles sur le disque :
netfilter-persistent save
Redémarrez ensuite Docker.
sudo systemctl restart docker
Sur les nœuds qui fonctionneront en tant que nœuds de calcul 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
Redémarrez ensuite Docker :
sudo systemctl restart docker
C'est tout ce qu'il faut pour ouvrir les ports nécessaires pour Docker Swarm en utilisant IPTables. Vous pouvez en savoir plus sur le fonctionnement de ces règles dans le tutoriel Comment fonctionne le pare-feu Iptables.
Si vous souhaitez passer à FirewallD ou UFW après avoir utilisé cette méthode, la bonne façon de procéder est d'abord d'arrêter le pare-feu :
sudo netfilter-persistent stop
Videz ensuite les règles :
sudo netfilter-persistent flush
Enfin, enregistrez les tables désormais 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 du monde Linux. Vous venez d'apprendre à les utiliser pour ouvrir les ports réseau nécessaires à la configuration de Docker Swarm. La méthode que vous utilisez n'est qu'une question de préférence personnelle, car ils sont tous également capables.