Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/11/2018, à 13:37

Byggvir

[R] Restreindre l'accès à certains conteneurs à l’extérieur du serveur

Bonjour à tous,

Alors je m'explique, j'auto héberge sur mon propre serveur sous Ubuntu Server 18.04, une version du logiciel Libre ShareLaTeX (pour ceux qui ne connaissent pas : https://fr.wikipedia.org/wiki/ShareLaTeX), il m'est très très utile au quotidien. C'est du docker, mais c'est la tout le problème, je suis très loin d'être expert sur docker (mais je cherche à m'améliorer).

Je vous montre rapidement comment je l'installe :

   PORT=7000

    apt install \
        apt-transport-https \
        ca-certificates \
        curl \
        software-properties-common -y

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

    add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

    apt update -y
    apt install docker.io -y

    # Steps to allow running docker without sudo
    groupadd docker

    gpasswd -a ${USER} docker

    service docker restart

    newgrp docker &

    docker pull sharelatex/sharelatex

     # Starting sharelatex docker container

    docker run -d --name sharemongo -e AUTH=no tutum/mongodb

    docker run -d --name shareredis -v /var/redis:/var/lib/redis redis

    docker run -d -P -p $PORT:80 -v /var/sharelatex_data:/var/lib/sharelatex --env SHARELATEX_MONGO_URL=mongodb://mongo/sharelatex --env SHARELATEX_REDIS_HOST=redis --env SHARELATEX_ADMIN_EMAIL=$email --link sharemongo:mongo --link shareredis:redis --name sharelatex sharelatex/sharelatex

    docker exec sharelatex /bin/bash -c "cd /var/www/sharelatex/; grunt user:create-admin --email $email" &&  echo "Installed sharelatex" || echo "Failed to install the sharelatex container"

    #install some extra packages (float, etc..)
    docker exec sharelatex /bin/bash -c "sudo apt update -y"
    docker exec sharelatex /bin/bash -c "sudo apt install texlive-generic-extra -y"
    docker exec sharelatex /bin/bash -c "sudo apt install texlive-full -y"

   
   
    Configuration Apache pour sharelatex.conf :
   

<VirtualHost *:80>
  ServerName sharelatex.$domainName
  ServerSignature Off

  ProxyPreserveHost On

  # Ensure that encoded slashes are not decoded but left in their encoded state.
  AllowEncodedSlashes NoDecode

  <Location />
    Require all granted
    ProxyPassReverse http://127.0.0.1:7000
    ProxyPassReverse http://sharelatex.$domainName/
  </Location>

  RewriteEngine on

  RewriteRule .* http://127.0.0.1:7000%{REQUEST_URI} [P,QSA,NE]

  RequestHeader set X_FORWARDED_PROTO 'https'
  RequestHeader set X-Forwarded-Ssl on

  #Set up apache error documents, if back end goes down (i.e. 503 error) then a maintenance/deploy page is thrown up.
  ErrorDocument 404 /404.html
  ErrorDocument 422 /422.html
  ErrorDocument 500 /500.html
  ErrorDocument 502 /502.html
  ErrorDocument 503 /503.html

  LogFormat \"%{X-Forwarded-For}i %l %u %t \\\"%r\\\" %>s %b\" common_forwarded
  ErrorLog /var/log/apache2/logs/sharelatex.$domainName""_error.log
  CustomLog /var/log/apache2/logs/sharelatex.$domainName""_forwarded.log common_forwarded
  CustomLog /var/log/apache2/logs/sharelatex.$domainName""_access.log combined env=!dontlog
  CustomLog /var/log/apache2/logs/sharelatex.$domainName.log combined

</VirtualHost>
    mkdir -p /var/log/apache2/logs/

    a2ensite sharelatex.conf
    systemctl restart apache2
    
    # HTTPS on Sharelatex
    letsencrypt --apache --email $email -d sharelatex.$domainName

    systemctl restart apache2

Donc grâce à ça j'ai accès à mon instance directement depuis l'url : https://sharelatex.MonDomain.eu

Mes questions maintenant :
- Sharelatex est toujours directement accessible depuis le port 7000, donc toutes les mesures que je mets en place depuis Apache son un peu inutile. D'où ma question comment rendre le port 7000 uniquement accessible par apache ou uniquement en interne du serveur ? Je pensais passer par UFW pour limiter l'accès du port à Apache uniquement, vous en pensez quoi ?

- Pour ce qui est de mongodb, shareLaTeX se connecte sans authentification au conteneur, pouvez-vous me confirmer que le conteneur de mongodb est seulement accessible via le conteneur de ShareLaTeX et pas via l'extérieur ? 


Merci d'avance de vos conseils !

Bonne journée,

Dernière modification par Byggvir (Le 13/12/2018, à 14:20)

Hors ligne

#2 Le 08/11/2018, à 07:31

bruno

Re : [R] Restreindre l'accès à certains conteneurs à l’extérieur du serveur

Bonjour,

Pour la première question il suffit de modifier le ligne qui lance le conteneur sharelatex:

 docker run -d -P -p 127.0.0.1:$PORT:80 …

ainsi le service qui est en écoute sur le port 80 dans le conteneur sera disponible uniquement sur l'interface de bouclage port 7000 de l'hôte

Pour mongodb je ne sais pas, il faudrait voir le retour de :

docker ps

et peut être préciser les ports de manière analogue afin que mongodb ne soit pas exposé à l'extérieur.

Hors ligne

#3 Le 09/11/2018, à 19:23

Byggvir

Re : [R] Restreindre l'accès à certains conteneurs à l’extérieur du serveur

Oh ! Merci beaucoup c'est une très bonne idée, je ne sais pas pourquoi je n'y ai pas pensé. Ça marche nickel.


Alors voilà pour le retour de :

docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
cda51b0d1ad8        sharelatex/sharelatex   "/sbin/my_init"          2 minutes ago       Up About a minute   127.0.0.1:7000->80/tcp   sharelatex
9b73b486f056        redis                   "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        6379/tcp                 shareredis
88d23e35ae4c        tutum/mongodb           "/run.sh"                2 minutes ago       Up 2 minutes        27017/tcp, 28017/tcp     sharemongo

Donc je suppose, que mongodb est accessible depuis l’extérieur, via les ports 27017 et 28017, non ?

Hors ligne

#4 Le 09/11/2018, à 20:18

bruno

Re : [R] Restreindre l'accès à certains conteneurs à l’extérieur du serveur

Dans la mesure où les autres conteneurs ne sont pas lancés avec l'option -p (--publish) je ne pense pas.
Tu peux vérifier avec :

sudo netstat -tlnp

et

docker ports sharemongo

La référence pour docker : https://docs.docker.com/engine/referenc … ne/docker/

Hors ligne

#5 Le 13/12/2018, à 14:18

Byggvir

Re : [R] Restreindre l'accès à certains conteneurs à l’extérieur du serveur

Merci pour la réponse, je confirme que c'est tout bon. Je passe le topic en résolu

Hors ligne