Comment utiliser Docker avec un pare-feu UFW

0
47

Étonnamment, Docker ne fonctionne pas immédiatement avec le pare-feu universel de Linux ,” ou UFW. Ils modifient tous les deux la même configuration iptables, ce qui peut entraîner des erreurs de configuration exposant des conteneurs qui n'étaient pas censés être publics. Voici comment résoudre ce problème.

Pourquoi Docker ne fonctionne-t-il pas avec UFW ?

UFW est destiné être un pare-feu très simple. Le problème est que UFW et Docker tentent de modifier les mêmes règles de pare-feu sous-jacentes, et ce conflit nécessite une configuration supplémentaire pour déterminer si vous souhaitez exécuter UFW et Docker ensemble.

Si vous configurez un pare-feu UFW de base pour refuser par défaut et autoriser HTTP et SSH, cela semblera sécurisé, mais cela n'empêchera pas Docker de démarrer des conteneurs liés à d'autres ports. Ce problème peut être difficile à détecter, car UFW et Docker sont des systèmes distincts. UFW vous ment sans le savoir et n'affichera pas les ports ouverts des conteneurs Docker.

Cela peut être un problème majeur si vous ne l'attrapez pas. Par exemple, vous vouliez peut-être exécuter un panneau d'administration interne sur le port 8000 et le mettre sur liste blanche avec votre propre adresse IP. Bien que ce ne soit pas la configuration la plus sécurisée pour commencer, c'est généralement correct, surtout si le panneau dispose d'une authentification supplémentaire.

Cependant, UFW affichera la règle de pare-feu comme correctement sur liste blanche, et il vous sera bien sûr visible depuis votre emplacement sur liste blanche. Mais, s'il est exécuté via Docker, il sera visible sur le port 8000 de n'importe où par défaut.

Correction de la configuration de Docker

Il existe une solution fournie par Docker, en modifiant /etc/default/docker ou /etc/docker/daemon.json et en désactivant simplement la fonctionnalité iptables de Docker :

DOCKER_OPTS=”–iptables=false”

Cela fonctionne, cependant, ce n'est qu'une demi-solution. Cela désactive la capacité de Docker à gérer sa propre mise en réseau et peut empêcher les conteneurs d'accéder à Internet du tout hors de la boîte. Cela peut toujours fonctionner, mais vous devrez gérer manuellement les règles iptables pour les conteneurs Docker et les réseaux personnalisés, ce qui est compliqué, ennuyeux et va à l'encontre de l'objectif de simplicité d'UFW.

La vraie solution est compliquée, mais heureusement, elle est assez courante pour qu'il existe un référentiel Github utile détaillant le problème et les étapes pour le résoudre. Essentiellement, vous devez modifier la configuration d'UFW dans /etc/ufw/after.rules pour ajouter le bloc suivant à la fin :

# COMMENCEZ UFW ET DOCKER *filter :ufw-user-forward – [0:0] :ufw-docker-logging-deny – [0:0] :DOCKER-USER – [0:0] -A DOCKER-USER -j ufw-user-forward -A DOCKER-USER -j RETOUR -s 10.0.0.0/8 -A DOCKER-USER -j RETOUR -s 172.16.0.0/12 -A DOCKER-USER -j RETOUR -s 192.168.0.0/16 -A DOCKER-USER -p udp -m udp –sport 53 –dport 1024:65535 -j RETURN -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp –tcp-flags FIN ,SYN,RST,ACK SYN -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -d 10.0 .0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 -A DOCKER-USER – j ufw-docker-logging-deny -p udp -m udp –dport 0:32767 -d 192.168.0.0/16 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp –dport 0:32767 -d 10.0.0.0/8 -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp –dport 0:32767 -d 172.16.0.0/12 -A DOCKER-USER -j RETOUR -A ufw-docker-logging-deny -m limit –limit 3/min –limit- burst 10 -j LOG –log-prefix “[UFW DOCKER BLOCK]” -A ufw-docker-logging-deny -j DROP COMMIT # END UFW AND DOCKER

Vous pouvez le faire manuellement, mais il y a un utilitaire sympa également fourni dans ce référentiel qui l'automatisera et fournira quelques commandes utiles pour vérifier l'état réel du pare-feu. Vous pouvez le télécharger depuis ce référentiel :

sudo wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker sudo chmod + x /usr/local/bin/ufw-docker

Ensuite, installez la configuration et redémarrez UFW.

ufw-docker install sudo systemctl restart ufw

Une fois redémarré, les modifications doivent s'appliquer automatiquement, mais si ce n'est pas le cas, vous devrez peut-être redémarrer Docker ou votre machine en général. Une fois activé, les ports doivent tous être correctement bloqués.

Liste blanche des ports de conteneur Docker avec UFW

Cette solution vous oblige à configurer le port un peu différemment. L'utilitaire ufw-docker a une commande qui ajoutera sélectivement des ports à des conteneurs Docker spécifiques.

ufw-docker allow httpd 80

Cependant, si vous souhaitez utiliser une règle plus avancée, telle que la liste blanche basée sur l'IP, vous& #8217;il faudra utiliser ufw route allow

ufw route allow proto tcp de 1.2.3.4 vers n'importe quel port 9443 READ NEXT

  • › Jusqu'où peut aller une voiture électrique avec une seule charge ?
  • › Combien coûte la recharge d'une batterie ?
  • &rsaquo ; Ces gadgets bannissent les moustiques
  • &rsaquo ; Les 10 meilleurs films originaux de Netflix en 2022
  • › Acheter un Mac ? Une puce de base M1 ou M2 est probablement tout ce dont vous avez besoin
  • &rsaquo ; "Atari était très, très dur" Nolan Bushnell sur Atari, 50 ans plus tard