Comment configurer le pare-feu Linux pour Docker Swarm sur CentOS 7

introduction

Docker Swarm est une fonctionnalité de Docker qui facilite l’exécution des hôtes et des conteneurs Docker à grande échelle. Un groupe Docker Swarm, ou Docker, est composé d’un ou plusieurs hôtes dockérisés fonctionnant en tant que nœuds manager et d’un nombre quelconque de nœuds worker. 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 TCP + 2376 + 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 TCP + 2377 +. 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 UDP + 7946 + pour la communication entre les nœuds (découverte du réseau de conteneurs).

  • Port UDP + 4789 + pour le trafic réseau en superposition (mise en réseau des conteneurs).

Dans cet article, vous allez configurer le pare-feu Linux sur CentOS 7 à l’aide de FirewallD et IPTables. FirewallD est l’application de pare-feu par défaut sur CentOS 7, mais IPTables est également disponible. Bien que ce tutoriel couvre les deux méthodes, chacune d’elles aboutit au même résultat, vous pouvez donc choisir celle avec laquelle vous êtes le plus familier.

Conditions préalables

Avant de continuer avec cet article, vous devriez:

Méthode 1 - Ouvrez les ports Swarm Docker à l’aide de FirewallD

FirewallD est l’application de pare-feu par défaut sur CentOS 7, mais sur un nouveau serveur CentOS 7, elle est désactivée. Activez-le et ajoutez les ports réseau nécessaires au fonctionnement de Docker Swarm.

Avant de commencer, vérifiez son statut:

systemctl status firewalld

Il ne devrait pas fonctionner, alors 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=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

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=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.

Méthode 2 - Ouvrez les ports Swarm Docker à 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. Pour basculer vers IPTables depuis FirewallD, arrêtez d’abord FirewallD:

systemctl stop firewalld

Puis le désactiver

systemctl disable firewalld

Puis installez le paquet + iptables-services, qui gère le chargement automatique des règles IPTables:

yum install iptables-services

Ensuite, démarrez IPTables:

systemctl start iptables

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

systemctl enable iptables

Avant de commencer à ajouter des règles spécifiques à Docker Swarm à la chaîne INPUT, examinons les règles par défaut de cette chaîne:

iptables -L INPUT --line-numbers

La sortie devrait ressembler à ceci:

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

Prises ensemble, les règles par défaut fournissent une protection dynamique au serveur, interdisant tout le trafic d’entrée, à l’exception de celui déjà établi. Le trafic SSH est autorisé dans. Faites attention à la règle numéro 5, soulignée ci-dessus, car il s’agit d’une règle de rejet de fourre-tout. Pour que votre Docker Swarm fonctionne correctement, les règles que vous ajoutez doivent être ajoutées above cette règle. Cela signifie que les nouvelles règles doivent être insérées au lieu d’être ajoutées à la chaîne INPUT.

Maintenant que vous savez quoi faire, vous pouvez ajouter les règles dont vous avez besoin en utilisant l’utilitaire + iptables +. Ce premier ensemble de commandes doit être exécuté sur les nœuds qui serviront de gestionnaires 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

Ces règles sont des règles d’exécution et seront perdues si le système est redémarré. Pour enregistrer les règles d’exécution actuelles dans un fichier afin qu’elles persistent après un redémarrage, tapez:

/usr/libexec/iptables/iptables.init save

Les règles sont maintenant enregistrées dans un fichier nommé + iptables + dans le répertoire + / etc / sysconfig +. Et si vous affichez les règles en utilisant + iptables -L - line-numbers +, vous verrez que toutes les règles ont été insérées au-dessus de la règle de rejet général:

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

Puis redémarrez Docker.

Outputsystemctl restart docker

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

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

Enregistrez les règles sur le disque:

/usr/libexec/iptables/iptables.init save

Puis redémarrez Docker:

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 apprendre plus sur le fonctionnement de ces règles dans le didacticiel Comment fonctionne le pare-feu IPTables.

Conclusion

FirewallD et IPTables sont deux des applications de gestion de pare-feu les plus populaires dans le monde Linux. Vous venez de lire comment les utiliser 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.