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.
Dans Firewalld, la masquage doit être placée sur la zone qui mène à Internet. Dans votre cas, cela semble être la zone public
.