• Seedbox
  • Securiser des containers dockers avec le script d'Ex-rat ?

Bonjour,

Étant quasi parvenu a mes fins sur ma SB, il est temps de m'occuper de la sécurité.
Je suis sur un Kimsufi Debian 9, avec le script d'Ex-rat, et sous docker j'utilise Portainer, Watcher, Plex, Jackett et Muximux

Je cherche donc a sécuriser tout ça, mon but étant d'interdire l’accès en passant par ipdemonserveur:portdel'appli mais en passant obligatoirement par Muximux (qui renvoi vers ipdemonserveur:portdel'appli, a moins que je ne passe par nginx pour avoir ipdemonserveur/nomdel'appli), est ce possible ou pas ?

De même, je cherche a intégrer ses appli dockerisées dans Nginx, mais après avoir lu pleins de tutos j'ai l'impression que ce n'est pas possible.
Ici je suis tombé sur le post de @xataz : mage docker de reverse proxy (nginx) mais le lien qu'il donne renvois vers une erreur 404

Je suis également tombé sur configurer-automatiquement-nginx-avec-docker-et-docker-gen pensez vous que ca puisse fonctionner, et surtout cohabiter avec le nginx déjà en place grâce au script ?

Ou alors carrement essayer avec le post de @lokiii
J'ai pas envie de mettre le oai.

Merci

  • kimu a répondu à ça.

    J'ai a quelque chose prêt la même configuration que toi Arck0s, j'ai mis en place traefik et je n'ai mis que les port 443 et 80 en EXPOSE.

      Perso j'ai préféré le duo jwilder/nginx-proxy & jrcs/letsencrypt-nginx-proxy-companion.

        kimu j’ai vu passer des posts sur Traefik, je vais aller voir ça si je comprends mieux.
        Aerya : J’ai vu le post sur ton blog, du coup que c’est un container, il peut se retrouver en // du nginx présent dans le script ?

        Normalement oui, il ne "gère" que tes Dockers donc au final tout va bien si aucun de tes containers n'utilise un port déjà utilisé par ton Nginx local.

          @Arck0s si tu as besoin je peux te poster mes docker-compose en exemple.

            Aerya : mon Nginx, enfin celui d’Ex_rat, ne gère que rTorrent/ruTorrent. Je ne lui ai rien « appris » d’autre. Et mes apps dockerisees utilisenet leur ports par défaut.

            kimu : ben à la rigueur si tu pouvais me montrer sur 1, histoire que je comprenne la chose.
            Là je lis des choses très intéressantes sur Traefik, tout comme sur Nginx-proxy, mais j’ai de grosses lacunes sur pas mal de termes, du coup c’est pas super évident.

            Merci à vous 2

            • kimu a répondu à ça.

              Arck0s Voila mon docker-compose:

              version: '2'
              services:
              portainer:
              image: portainer/portainer
              container_name: portainer
              hostname: portainer
              volumes:
              - /var/run/docker.sock:/var/run/docker.sock
              - /home/username/portainer/data:/data
              command: -H unix:///var/run/docker.sock
              labels:
              - traefik.enable=true
              - traefik.frontend.rule=Host:xxx.ndd.fr
              - traefik.docker.network=traefik_proxy
              - traefik.backend.port=9000
              networks:
              - traefik_proxy

              traefik:
              image: traefik
              container_name: traefik
              hostname: traefik
              labels:
              - traefik.enable=true
              - traefik.docker.network=traefik_proxy
              - traefik.frontend.rule=Host:yyy.ndd.fr
              - traefik.port=9001
              command:
              --defaultEntryPoints='http,https'
              --logLevel=DEBUG
              --web
              --web.address=:9001
              --entryPoints='Name:http Address::80 Redirect.EntryPoint:https'
              --entryPoints='Name:https Address::443 TLS'
              --acme
              --acme.email=moi@mail.com
              --acme.storage=/certs/acme.json
              --acme.entryPoint=https
              --acme.ondemand=false
              --acme.onhostrule=true
              --acme.httpChallenge.entryPoint=http
              --acme.domains="ndd.fr,xxx.ndd.fr,yyy.ndd.fr"
              --docker
              --docker.domain=traefik
              --docker.watch
              --docker.exposedbydefault=false
              volumes:
              - /var/run/docker.sock:/var/run/docker.sock:ro
              - /home/username/traefik/certs:/certs
              - /var/null:/traefik.toml
              ports:
              - "80:80"
              - "443:443"
              networks:
              - traefik_proxy

              Quelques explications:

              • 1 docker qui héberge portainer et qui n'a aucun port exposé.
              • 1 docker qui héberge traefik qui expose les ports 80 et 443.

              La discussion entre les 2 dockers se fait par les labels 'traefik.xxx=yyy'

              Au final, l'ensemble des requêtes est transmis a mon docker traefik et mon docker portainer n'est accessible que par l'adresse : xxx.ndd.fr. De plus, l'accès est automatiquement redirigé en HTTPS si la requête initiale est en HTTP.

              En espérant que cela t'aide 🙂

                kimu : Merci bien, donc si je comprends le principe, pour mon cas, seul muximux sera accessible par son adresse et ensuite quand j’appelerais L’une des applications en cliquant sur son lien c’est traefik qui s’occupera de tout, du coup pas possible pour quelqu’un qui n’accède pas à Muximux d’y avoir accès ?

                • kimu a répondu à ça.

                  Arck0s : C'est l'idée que je me fais. Après je n'utilise pas muximux donc a toi de faire les tests. Dans mon install, j'ai 3 containers chacun accessible via une adresse du type : cloud.ndd.fr, xxx.ndd.fr yyy.ndd.fr (se sont 3 services bien distinct les uns des autres). Il y a peut-être moyen dans Muximux d'utiliser ces adresses.

                    kimu oui c’est possible,
                    Mais n’ayant pas de domaine je passe par l’ipdemonserveur:portkivabien

                    • kimu a répondu à ça.

                      Arck0s Traefik ne fonctionne qu'avec des ndd il me semble.

                      Traefik fait des sous-domaines. Tout ce qu'il "traite" est donc accessible sauf à bloquer les accès via IP ou user:pwd. Traefik sert à faire beau/propre, pas à sécuriser. Enfin ne l'utilisant plus, je ne sais pas si ça a évolué en ce sens en tous cas.

                      Via le container nginx-proxy dont je te parlais plus haut tu peux ajouter (très simplement) des user:pwd aux containers liés : https://github.com/jwilder/nginx-proxy#basic-authentication-support

                        Dès que j’arrive à trouver du temps je test tout ça, l’avantage de docker, pouvoir tester sans rien casser 😬

                        Bonjour,

                        Si tu veux faire de l'authentification exactement comme nginx, voici la syntaxe a mettre dans ton docker-compose au niveau label :

                        labels:
                          - "traefik.enable=true"
                          - "traefik.port=8080"
                          - "traefik.frontend.rule=Host:test.domain.net"
                          - "traefik.frontend.auth.basic=tonuser:mot de passe crypté avec htpasswd"
                        

                        Si ton mot de passe crypté, avec htpasswd, comprend des $, il faudra le doubler.
                        Exemple : Os4D18Z$$d0iz2mBQbjTxAjtj

                        A plus

                          Yop,
                          Je viens de tester ta methode @Aerya , ca s'installe nickel ou presque, y'avait un conflit avec le port 443 du Nginx du script, j'ai du stopper le service est l'installation c,'est bien passé.
                          J'ai refait un container Plex et Radarr pour tester

                          docker run \
                          -d \
                          --name plex \
                          -p 32400:32400/tcp \
                          -p 33400:33400/tcp \
                          -p 33443:33443/tcp \
                          -p 3005:3005/tcp \
                          -p 8324:8324/tcp \
                          -p 32469:32469/tcp \
                          -p 1900:1900/udp \
                          -p 32410:32410/udp \
                          -p 32412:32412/udp \
                          -p 32413:32413/udp \
                          -p 32414:32414/udp \
                          -e TZ="Europe/Paris" \
                          -e PLEX_CLAIM="claim-xxxVVVccDDXC" \
                          -e ADVERTISE_IP="http://ipdemonserveur:32400/" \
                          -e PLEX_UID=1002 -e PLEX_GID=1002 \
                          -h *** \
                          -v /home/plex:/config \
                          -v /temp:/transcode \
                          -v /home/****/torrents:/data \
                          -e "VIRTUAL_PORT=32400" \
                          -e "VIRTUAL_HOST=plex.ipdemonserveur" \
                          -e "LETSENCRYPT_HOST=plex.ipdemonserveur" \
                          -e "LETSENCRYPT_EMAIL=******@outlook.fr" \
                          plexinc/pms-docker:plexpass
                          docker create \
                            --name=radarr \
                              -v /home/arck0s/docker/radarr:/config \
                              -v /home/****/torrents/radarr:/downloads \
                              -v /home/****/torrents/Films:/movies \
                              -v /etc/localtime:/etc/localtime:ro \
                              -e TZ=Europe/Paris \
                              -e PGID=1002 -e PUID=1002  \
                              -p 7878:7878 \
                            -e "VIRTUAL_PORT=7878" \
                          -e "VIRTUAL_HOST=radarr.ipdemonserveur" \
                          -e "LETSENCRYPT_HOST=radarr.ipdemonserveur" \
                          -e "LETSENCRYPT_EMAIL=*****@outlook.fr" \
                            linuxserver/radarr

                          Mais comment être sur que çà fonctionne, car la actuellement, j'ai toujours le symbole du cadenas barré sous FF

                          Faut vérifier dans Firefox mais normalement c'est un SSL Lets Encrypt.