Comment utiliser UFW bloquant les ports publiés du docker

Cela pourrait sembler une question stupide, mais j'essaie d'get ce qui suit:

  • J'ai un UFW correctement configuré pour permettre uniquement à certains IP source d'accéder à mon service local
  • après avoir migré ce service vers un conteneur docker avec un port publié, le port est publié publiquement

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

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

Le port spécifique utilisé par ce service 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 aller du port public restreint UFW à localhost:3333 . J'ai également essayé d'utiliser iptables -j REDIRECT , mais je ne pouvais pas le faire fonctionner.

Donc, ce n'est pas un problème pour le conteneur qui restreint l'access à l'extérieur, en dehors de l'access au conteneur.

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

J'ai découvert une meilleure solution plus cohérente avant que la nouvelle solution iptable docker n'arrive dans 1.5+.

En n'utilisant pas la string FORWARD mais une autre, les règles sont traitées avant que le docker modifie les strings iptable et survit ainsi aux redémarrages du conteneur docker. Si quelqu'un en a besoin: cela a résolu mon problème d'avoir des règles iptable personnalisées et un 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 

Le tour est le PREROUTING et le mangle step. De cette façon, je peux autoriser de SOURCEIP_TO_ALLOW sur PORT sur l'hôte et interdire d'autres entrant …!

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

  • Ni spécifier EXPOSE ni -p signifie que le service dans le conteneur ne sera accessible que dans le conteneur lui-même.
  • Indiquez EXPOSE et -p le service dans le conteneur est accessible depuis n'importe quel endroit.
  • Indiquez EXPOSE uniquement. Le service n'est pas accessible à l'extérieur du docker, mais uniquement entre les conteneurs docker pour la communication interne du conteneur.

Dans le cas où vous avez un pare-feu dans l'hôte qui bloque toutes les connections entrantes au port 3333, mais vous souhaitez avoir un access mondial, vous pouvez utiliser UFW pour ouvrir le port ou ouvrir le port pour les hôtes sources spécifiés comme ceci:

  • ufw permet 3333 – cela ouvrira le port 3333 pour les connections TCP et UDP à partir de n'importe quelle source.
  • ufw permettre de 1.2.3.4 à n'importe quel port 3333 – cela permettra l'access uniquement de la source IP 1.2.3.4 à n'importe quelle IP de votre hôte vers le port 3333.

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