web-dev-qa-db-fra.com

Utiliser Docker avec pare-feu

TL; DR essayant de se masquer tout de Docker avec firewalld manuellement.

Je viens de commencer à utiliser firewalld sur ma machine debian 10 depuis que je veux apprendre comment cela fonctionne.

J'ai Docker installé sur l'hôte et je souhaite gérer le pare-feu par moi-même pour en savoir plus sur ce que Docker fait, quelles règles, etc. il s'applique lorsque des conteneurs sont créés et la manière dont le pare-feu fonctionne.

Étant donné que Debian 10 utilise nftables par défaut et utilisez une sorte de iptables wrapper pour pouvoir utiliser les commandes iptables pour créer des règles de pare-feu. Docker _ fonctionne juste bien quand --iptables est autorisé.

Cependant, je veux utiliser firewalld avec nftables backend et ignorer tout ce qui concerne iptables car il est juste déroutant. Donc, dans /etc/systemd/system/multi-user.target.wants/docker.service J'ai ajouté --iptables=false Do Docker ne plaisante pas avec le pare-feu. J'ai rougé toutes les règles d'IPtables, etc. Et tout va bien jusqu'à présent.

Maintenant à mon problème.

Tous les conteneurs peuvent accéder à l'hôte et à l'autre, mais pas à Internet. Comme ils fonctionnent tous le 172.17.0.0.0/16 et mon hôte se trouve le 192.168.9.0/24, j'ai besoin de masquer le trafic des conteneurs.

Je ne trouve pas beaucoup d'informations sur la gestion manuelle du pare-feu lors de l'utilisation de Docker et, depuis que je suis nouveau au pare-feu, je devine simplement.

Mes interfaces sont les suivantes:

eno1 (main interface)
docker0 (docker bridge)
veth******* (one for each container)

toutes les interfaces veth sont dans le docker0 pont.

Donc, j'ai pensé pouvoir créer une nouvelle zone appelée docker et tout monquera tout de la docker0 pont.

~# firewall-cmd --permanent --new-zone=docker
~# firewall-cmd --permanent --zone=docker --change-interface=docker0
~# firewall-cmd --permanent --zone=docker --add-rich-rule='rule family="ipv4" source address=172.17.0.0/16 masquerade'
~# firewall-cmd --reload

La liste des zones actives me donne ceci:

~# firewall-cmd --get-active-zones
docker
  interfaces: docker0
public
  interfaces: eno1

Je ne peux toujours pas accéder à Internet depuis les conteneurs. Je ne sais pas si c'est la bonne façon d'aller ou de ce qui me manque. Toute aide est appréciée.

1
PatricF

Dans Firewalld, la masquage doit être placée sur la zone qui mène à Internet. Dans votre cas, cela semble être la zone public.

2
Michael Hampton