2 votes

Comment utiliser l'UFW pour bloquer les ports publiés de docker

La question peut sembler idiote mais j'essaie de faire fonctionner ce qui suit :

  • J'ai un UFW correctement configuré pour n'autoriser que certaines IP sources à accéder à mon service local.
  • après avoir migré ce service dans un conteneur docker avec un port publié le port est publiquement publié

Ainsi, chaque hôte peut désormais accéder au port publié depuis n'importe où.

Comment puis-je restreindre l'accès via UFW à ce port docker publié ?

Le port spécifique que ce service utilise est 3333 .

J'ai essayé de le faire fonctionner en utilisant -p 127.0.0.1:3333:3333 afin de lier le port à localhost. Mais alors j'aurais besoin d'un proxy pour passer du port public restreint par l'UFW au port localhost. localhost:3333 . J'ai également essayé d'utiliser iptables -j REDIRECT mais je n'ai pas réussi à le faire fonctionner.

Ce n'est donc pas le conteneur qui limite l'accès à l'extérieur, mais l'extérieur qui accède au conteneur.

J'aimerais conserver ma configuration UFW actuelle avec une liste blanche explicite pour les services Dockerized.

2voto

Gekkie Points 290

J'ai trouvé une meilleure solution plus cohérente avant la nouvelle solution docker iptables qui arrive dans la 1.5+.

En n'utilisant pas le FORWARD chaîne mais une autre les règles sont traitées avant docker modifie les chaînes iptable et donc survivra aux redémarrages des conteneurs docker. Si quelqu'un en a besoin : cela a résolu mon problème d'avoir des règles iptable personnalisées et docker sur un hôte :

iptables -I PREROUTING 1 -t mangle ! -s [SOURCEIP_TO_ALLOW] -p tcp --dport [PORT] -j ACCEPT
iptables -I PREROUTING 2 -t mangle -p tcp --dport [PORT] -j DROP

L'astuce est l'étape PREROUTING et mangle. De cette façon, je peux autoriser l'accès à partir de SOURCEIP_TO_ALLOW sur le PORT de l'hôte et interdire l'accès aux autres... !

0voto

jameshfisher Points 3033

Vous avez trois options pour publier/exposer les ports de docker :

  • Ni spécifier EXPOSE ni -p ne signifie que le service dans le conteneur sera accessible uniquement à l'intérieur du conteneur lui-même.
  • Spécifiez EXPOSE et -p le service dans le conteneur est accessible de n'importe où.
  • Spécifiez EXPOSE uniquement. Le service n'est pas accessible en dehors de Docker, mais uniquement entre les conteneurs Docker pour la communication entre conteneurs internes.

Si le pare-feu de l'hôte bloque toutes les connexions entrantes vers le port 3333, mais que vous souhaitez disposer d'un accès mondial, vous pouvez utiliser UFW pour ouvrir le port ou ouvrir le port pour des hôtes sources spécifiques comme ceci :

  • ufw allow 3333 - cela ouvrira le port 3333 pour les connexions TCP et UDP de toute source.
  • ufw allow from 1.2.3.4 to any port 3333 - ceci autorisera l'accès au port 3333 uniquement depuis l'IP source 1.2.3.4 vers toute IP de votre hôte.

Notez que vous pouvez également spécifier le protocole à utiliser avec proto, sinon ufw ouvrira à la fois pour tcp et udp.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X