IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Docker Discussion :

Bloquer les ports de Docker depuis le net


Sujet :

Docker

  1. #1
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut Bloquer les ports de Docker depuis le net
    Bonjour,

    Je commence à devenir un peu marteau sur un problème.

    J'ai un ubuntu 17 avec un docker 18.
    J'ai Nginx installé directement sur ubuntu qui est censé être le point d'entrée dans l'ensemble des requêtes sur le site.
    À noter que le docker ne me sert qu'à faire des tests, et les "vrais" services qui tournent ne sont pas sur docker.

    Je souhaiterai que les ports exposés publiquement sur docker ne soit accessible qu'au niveau du serveur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    root@server:/etc/docker# docker container ls | grep 8080
    a8dbd243a1b9        rancher/server                       "/usr/bin/entry /usr…"   8 days ago          Up 41 minutes       3306/tcp, 0.0.0.0:8080->8080/tcp              suspicious_pare
    Typiquement, ici, a priori, c'est open bar et on peut accéder au port 8080 du net.

    Je n'arrive pas à empêcher que le port (ici 8080) soit accessible via le net. Avez-vous déjà eu le soucis ?

    Evidemment, car sinon, cela serait trop simple. Un firewall comme ufw a des soucis avec docker (car docker prend la priorité au niveau des iptables, pour je ne sais quelle raison)

    merci,
    millie
    Je ne répondrai à aucune question technique en privé

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Tu peux mettre iptables à false dans le fichier de config /etc/docker/daemon.json

    https://docs.docker.com/network/ipta...-docker-daemon

    Ca devrait être par défaut...
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    C'était inactif par défaut, je l'avais rajouté (il y a deux semaines peut être).
    Et cela reste malheureusement open bar

    Cependant, je constate que j'ai l'iptables qui est rempli avec des règles DOCKER quand docker est arrêté.
    Je me demande s'il faudrait pas nettoyer un bazar... Peut être que des règles traînent suite à un démarrage en mode iptables=true

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    root@ns300:/etc/docker# service docker stop
    root@ns300:/etc/docker# iptables -L
    
    CATTLE_NETWORK_POLICY  all  --  10.42.0.0/16         10.42.0.0/16
    CATTLE_FORWARD  all  --  anywhere             anywhere
    DOCKER-USER  all  --  anywhere             anywhere
    DOCKER-ISOLATION  all  --  anywhere             anywhere
    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
    DOCKER     all  --  anywhere             anywhere
    ACCEPT     all  --  anywhere             anywhere
    ACCEPT     all  --  anywhere             anywhere
    
    
    Chain CATTLE_FORWARD (1 references)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere             mark match 0x1068
    ACCEPT     all  --  anywhere             anywhere             mark match 0x4000
    ACCEPT     all  --  anywhere             10.42.0.0/16
    
    Chain CATTLE_NETWORK_POLICY (1 references)
    target     prot opt source               destination
    
    Chain DOCKER (1 references)
    target     prot opt source               destination
    
    Chain DOCKER-ISOLATION (1 references)
    target     prot opt source               destination
    RETURN     all  --  anywhere             anywhere
    
    Chain DOCKER-USER (1 references)
    target     prot opt source               destination
    RETURN     all  --  anywhere             anywhere
    
    
    root@ns300:/etc/docker# grep DOCKER_OPTS /etc/default/docker | grep -v "#"
    DOCKER_OPTS="--iptables=false"
    
    root@ns300:/etc/docker# service docker start
    Je ne répondrai à aucune question technique en privé

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Au prix d'un défonçage massif de l'iptable qui m'a obligé à passer en mode rescue sur le serveur vu que j'ai perdus l'accès SSH. Je confirme que l'option n'est pas suffisante
    Je ne répondrai à aucune question technique en privé

  5. #5
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Avec compose, il me semble que les accès inter images se font au sein du vlan mais faut que je vérifie
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Plusieurs personnes conseillent l'option : DEFAULT_FORWARD_POLICY="ACCEPT"

    Sauf que... Je n'arrive pas trop à comprendre les implications de cette option
    Je ne répondrai à aucune question technique en privé

  7. #7
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    En lisant cette documentation : https://docs.docker.com/network/ipta...-dockers-rules

    Il semblerait qu'il faille que j'exécute une commande de ce type pour n'autoriser à accèder au port qu'en interne sur la machine.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ iptables -I DOCKER-USER -i ext_if ! -s 127.0.0.1 -j DROP
    J'essayerai ce soir.
    Je ne répondrai à aucune question technique en privé

  8. #8
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Mais ça va retirer toutes les règles d'accès extérieur, aucun port ne doit être ouvert vers l'extérieur?
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  9. #9
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Si je comprends bien (bon, ce coup ci, je ferai la manipulation sur une VM histoire de pas tout claquer comme hier ), cela ne change la règle que pour la chain "DOCKER-USER".

    Toutes les requêtes qui viennent de l'extérieur passeront par le reverse proxy nginx qui est installé en dehors de docker (à la base, c'était ça que je voulais). J'ai une configuration centralisée pour les sous domaines, le support TLS, etc. dessus
    Le nginx redirige donc un sous domaine (qui écoute sur le port 443) vers des applications docker (qui écoutent un peu sur plein de port)
    Je ne répondrai à aucune question technique en privé

  10. #10
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Oui c'est bien ça, j'ai fait un rapprochement automatique avec ma config qui n'utilise que docker et donc qui fermerait tout (enfin sauf SSH)

    Par curiosité, pourquoi tu laisses le nginx en dehors?
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  11. #11
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    La configuration actuelle est telle que Docker ne me sert qu'à faire des tests (je sais provisionner des choses très rapidement). Les vrais applications tournent directement sur la machine.

    Mais, pourquoi cela ?

    La raison est assez simple. J'ai une trop faible maîtrise de Docker pour laisser tourner des "vrais" trucs dessus. Docker est un peu trop "magique" par rapport à mon niveau.
    Rien que les problèmatiques de backup/restore, je n'arrive pas à comprendre comment faire ça proprement. Au niveau réseau interne, je comprends pas bien etc. En cas de sérieux problèmes, je pense ne pas réussir à remettre les trucs d'équerre en peu de temps.
    Je ne répondrai à aucune question technique en privé

  12. #12
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    J'ai réussi... Ma méconnaissance d'iptables m'aura fait perdre du temps.

    Du coup... Il y a deux types de règles :

    La chaîne d'entrée, parmi : FORWARD/INPUT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Chain FORWARD (policy DROP)
    num  target     prot opt source               destination
    1    DOCKER-USER  all  --  anywhere             anywhere
    2    DOCKER-ISOLATION  all  --  anywhere             anywhere
    4    DOCKER     all  --  anywhere             anywhere
    Qui redirige vers des "sous-chaînes" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Chain DOCKER (1 references)
    target     prot opt source               destination
    ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:http
    Il faut soit droper la règle DOCKER au niveau de la chaîne FOWARD/INPUT, et recréer une règle en autorisant uniquement d'arriver en localhost (truc que j'ai pas réussi à faire)

    Soit aller changer la chaîne docker, mais obliger de se taper port par port :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    root@ubuntupoc:/# iptables -D DOCKER 1
    root@ubuntupoc:/# iptables -I DOCKER -i ext_if ! -s localhost -j DROP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chain DOCKER (2 references)
    num  target     prot opt source               destination
    1    DROP       all  -- !localhost            anywhere
    Mais je trouve ça franchement moisi...
    Je ne répondrai à aucune question technique en privé

  13. #13
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    J'ai vérifié, en utilisant docker-compose, tout le réseau virtuel est entièrement accessible par les autres conteneurs du service, et rien n'est exposé à l'extérieur, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
      broker: 
        image: moussavdb/activemq
        restart: always 
        volumes: 
          - /home/moussa/yildiz/activemq/data:/opt/activemq/data 
          - /home/moussa/yildiz/activemq/conf:/opt/activemq/conf
    
      authentication: 
        image: moussavdb/authentication-server:develop
        restart: always
        depends_on: 
          - broker 
          - database 
        volumes: 
          - /home/moussa/yildiz/authentication:/yildiz
    
      database: 
        image: postgres
        restart: always
        environment:
          - POSTGRES_PASSWORD=**************
        volumes: 
          - /home/moussa/yildiz/databases/postgres:/var/lib/postgresql/data
          - /home/moussa/yildiz/databases/init:/docker-entrypoint-initdb.d
    Aucun port ouvert vers l'extérieur, par contre, tous les conteneurs peuvent communiquer ensemble.

    Mais bien sur, c'est juste dans le compose, pour communiquer avec des éléments externes, faut ouvrir.
    A vérifier mais je pense que des solutions de type openshift peuvent solutionner cette problématique
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  14. #14
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Après des lustres...

    J'ai du ajouter iptables:false dans le fichier daemon.json

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    root@server:/etc# cat /etc/docker/daemon.json
    {
                    "dns": ["213.186.33.99"],
                    "iptables":false
    }
    Pour régler le soucis.

    + Mettre les ports interne dans Rancher (petite subtilité non précisée précédemment dans mes posts)

    Nom : lb.png
Affichages : 555
Taille : 18,2 Ko
    + Envoyer sur l'IP interne dans nginx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    root@ns:/etc/nginx/sites-enabled# cat xxxx
    server {
    ......
     location / {
            proxy_pass http://10.42.141.173:8083;
         .....
    }
    Je ne répondrai à aucune question technique en privé

  15. #15
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 563
    Points
    4 563
    Par défaut
    Le livre gratuit du jour sur paktpub est docker network, ça peut être instructif:

    https://www.packtpub.com/packt/offers/free-learning
    PXL le retro-gaming facile: Essayez-le

    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Au final, je me suis rendu compte qu'avoir mis iptables à false empêche les nouveaux conteneurs d’accéder au Net...

    Car il remet des configurations de ce type dans l'iptables...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CATTLE_HOSTPORTS_POSTROUTING  all  --  anywhere             anywhere
    MASQUERADE  all  --  172.18.0.0/16        anywhere
    Au final, j'ai mis 127.0.0.1 au niveau des ports exposés.

    Soit à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docker run -d --restart=always --name=portainer -p 127.0.0.1:8088:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
    Soit dans docker compose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      wordpress:
         depends_on:
           - mariadb
         image: wordpress:latest
         volumes:
           - ./www_data:/var/www/html/
         ports:
           - "127.0.0.1:8083:80"
    Avec iptables à true.
    Je ne répondrai à aucune question technique en privé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bloquer les ports usb de son pc
    Par kaselander dans le forum FAQs Windows
    Réponses: 10
    Dernier message: 05/02/2021, 14h28
  2. [WS 2008] bloquer les ports inutilisés
    Par geroma dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 07/12/2013, 08h56
  3. Réponses: 4
    Dernier message: 30/11/2012, 08h44
  4. Routeur bloquer les ports p2p
    Par liquideshark dans le forum Réseau
    Réponses: 2
    Dernier message: 21/05/2007, 00h12
  5. Bloquer tous les ports sauf 80,21,22,844
    Par biglittlekiss dans le forum Sécurité
    Réponses: 7
    Dernier message: 12/12/2006, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo