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 14/01/2021, à 22:24

czam31

FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Bonjour à tous,
Tout nouveau ici, et (presque) nouveau sur Linux, je cherche désespérément de l'aide pour faire fonctionner ce bazar :-)
Ça fait 1 semaine que je tourne en rond et je n'arrive pas à trouver la solution malgré tous les forums… Bref !

Le pb : Le reverse proxy NGINX fonctionne bien pour le port 80 mais pas pour 443 (avec aucun container)

Ma config - un serveur avec 4 containers LXD dont 1 reverse proxy NGINX
Ubuntu 20.04
=>LXD 4.0.4
    => Container LXC01 - APACHE2
    => Container LXC02 -APACHE2
    => Container LXC03 - NGNIX
    => Container PROXY - NGNIX REVERSE PROXY
   
    Sur le HOST les ports 80 et 443 sont ouverts au PROXY (via LXC commande)
   
    Sur les containers APACHE
       

 # apt install -y apache2

       
        Ajout des deux lignes (adresse proxy) dans le fichier ci-dessous
         

#nano /etc/apache2/conf-available/remoteip.conf

            RemoteIPHeader X-Real-IP
            RemoteIPTrustedProxy 10.68.14.196 fd42:1052:cb6:c1b8:216:3eff:fed0:241d
         Puis
                             

  # a2enconf remoteip  

                Et
                             

   # a2enmod remoteip

   
    Sur le container PROXY
   

 # lxc exec proxy -- sudo apt install -y nginx

   
    Création du fichier de conf
   

# nano /etc/nginx/sites-available/lxc01.monsitepublic.fr

   

server {
		        listen 80 proxy_protocol;
		        listen [::]:80 proxy_protocol;
		    server_name lxc01.monsitepublic.fr
		
		        location / {
		                proxy_set_header Host $host;
		                proxy_set_header X-Real-IP $remote_addr;
		                proxy_pass [url]http://lxc01.lxd[/url];
		        }
		
		        real_ip_header proxy_protocol;
		        set_real_ip_from 127.0.0.1;
		}

   
    Publication du fichier
   

 # ln -s /etc/nginx/sites-available/lxc01.monsitepublic.fr /etc/nginx/sites-enabled/

    Test et Relance de NGINX - test http://lxc01.monsitepublic.fr ça fonctionne pour le port 80.
    Configuration 443
    Pas touché au fichier /etc/nginx/nginx.conf
   

# apt install certbot python3-certbot-nginx
    # sudo certbot --nginx

=> success
    Le fichier devient :
   

 # nano /etc/nginx/sites-available/lxc01.monsitepublic.fr

       

server {
                listen 80 proxy_protocol;
                listen [::]:80 proxy_protocol;
        
                server_name lxc01.monsitepublic.fr;
        
                location / {
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_pass [url]http://lxc01.lxd[/url];
                }
                real_ip_header proxy_protocol;
                set_real_ip_from 127.0.0.1;
        
            listen [::]:443 ssl; # managed by Certbot
            listen 443 ssl; # managed by Certbot
            ssl_certificate /etc/letsencrypt/live/lxc03.monsitepublic.fr/fullchain.pem; # managed by Certbot
            ssl_certificate_key /etc/letsencrypt/live/lxc03.monsitepublic.fr/privkey.pem; # managed by Certbot
            include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
            ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
        }

       
        Test et Relance de NGINX - TEST HTTPS://lxc01.monsitepublic.fr : impossible d’accéder à cette page !
        J'ai essayé en changeant proxy_pass  http://lxc01.lxd; par la réelle adresse IP - pareil
        Avec un certificat autosigné - pareil
        J'ai viré les autres  sites-enabled (default) = pareil
        Réinstallé, recommencé 20 fois, changer plein de choses..rien à faire ça marche po !
       
        Analyse :
       
        Apparemment la requête arrive au proxy mais rien ne se passe (par rapport aux lignes sur le port 80)
       

 # cat /var/log/nginx/access.log (dernière ligne) 
        [b]127.0.0.1 - - [14/Jan/2021:21:45:45 +0100] "PROXY TCP4 90.55.xxx.xxx 91.xxx.xxx.xxx 29102 443" 400 166 "-" "-"[/b]
        

        Depuis le proxy le ping LXC03 fonctionne
       
        Depuis le host on voit bien le proxy en écoute sur le 443
       

 #sudo ss -ltp '( sport = :http || sport = :https )'
            State     Recv-Q    Send-Q       Local Address:Port        Peer Address:Port   Process
            LISTEN    0   4096  *:http  *:*   users:(("lxd",pid=26665,fd=8),("lxd",pid=26665,fd=3))
            LISTEN    0   4096  *:https *:*  users:(("lxd",pid=26826,fd=8),("lxd",pid=26826,fd=3))
        

        Dans le proxy
           

 # netstat -nlp | grep nginx
                tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2840/nginx: master
                tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      2840/nginx: master
                tcp6       0      0 :::80                   :::*                    LISTEN      2840/nginx: master
                tcp6       0      0 :::443                  :::*                    LISTEN      2840/nginx: master
            # sudo ufw status : Status: inactive

         error_log /var/log/nginx/error.log==> RAS
       
        J'ai essayé différentes config de sites-available/lxc01.monsitepublic.fr => pas de résultat
        Avec la dernière version de CertBot pareil
       
        Y aurait-il un module Nginx à installer ? LXD ne serait-il pas capable d'assurer le transit ?
         Voilà je ne sais plus où regarder !
        Merci d'avance pour votre aide.

Dernière modification par czam31 (Le 15/01/2021, à 11:01)

Hors ligne

#2 Le 15/01/2021, à 09:31

airvb

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Vu la qualité de la question, je doute mais comme il n'y pas de q idiote...

J'imagine qu'internet arrive via une box , le port 443 est il bien ouvert ?

Hors ligne

#3 Le 15/01/2021, à 09:35

czam31

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

L'install est faite sur un serveur Kimsufi. Et il ne semble pas y avoir de soucis de connexion 443 puisque une ligne log est bien créé dans le proxy

 # cat /var/log/nginx/access.log (dernière ligne)
        127.0.0.1 - - [14/Jan/2021:21:45:45 +0100] "PROXY TCP4 90.55.xxx.xxx 91.xxx.xxx.xxx 29102 443" 400 166 "-" "-"

Mais bon... sait on jamais ;-)

Dernière modification par czam31 (Le 15/01/2021, à 11:01)

Hors ligne

#4 Le 15/01/2021, à 10:51

bruno

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Bonjour,

Tu as une erreur 400, c.-à-d. une requête erronée. C'est typiquement une erreur du client qui n'envoie pas la requête correctement.

Donne les retours depuis l’extérieur de :

curl -I http://lxc01.monsitepublic.fr
curl -I https://lxc01.monsitepublic.fr

Dernière modification par bruno (Le 15/01/2021, à 11:08)

#5 Le 15/01/2021, à 11:14

czam31

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Merci pour cette réponse. Erreur 400... mauvaise requête client ? J'avoue je ne sais pas trop comment résoudre ça.
Je tape l'adresse sur mon pc dans le navigateur : https://lxc01.monserveurpublic.fr
Le routage se fait par OVH qui pointe sur l'ip du serveur avec une entrée Zone DNS A
La requête arrive sur l'HOTE qui retransmet au container LXD via les commandes suivantes

Pour le port 443

# lxc config device add proxy myport443 proxy listen=tcp:0.0.0.0:443 connect=tcp:127.0.0.1:443 proxy_protocol=true

rappel pour le port 80 qui fonctionne bien

# lxc config device add proxy myport80 proxy listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80 proxy_protocol=true

Après c'est le trou noir !
(NB le cache du navigateur est bien vidé et  même essayé avec d'autres navigateur)

Hors ligne

#6 Le 15/01/2021, à 11:40

bruno

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Donne les retours demandés en #4 STP.
et aussi le contenu /etc/letsencrypt/options-ssl-nginx.conf

#7 Le 15/01/2021, à 13:19

czam31

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Les voici depuis un pc windows :

# curl -I http://lxc01.monsitepublic.fr
	HTTP/1.1 200 OK
	Server: nginx/1.18.0 (Ubuntu)
	Date: Fri, 15 Jan 2021 12:14:24 GMT
	Content-Type: text/html
	Content-Length: 10924
	Connection: keep-alive
	Last-Modified: Fri, 15 Jan 2021 12:04:26 GMT
	ETag: "2aac-5b8ef2c788105"
	Accept-Ranges: bytes
	Vary: Accept-Encoding
curl -I https://lxc01.monsitepublic.fr
curl: (35) schannel: next InitializeSecurityContext failed: SEC_E_INVALID_TOKEN (0x80090308) - Le jeton fourni à la fonction n’est pas valide

La même commande depuis le serveur HOST

root@kimsufi:~# curl -I https://lxc01.k1.yanova.fr
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number

Dernière modification par czam31 (Le 15/01/2021, à 13:23)

Hors ligne

#8 Le 15/01/2021, à 13:43

bruno

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Je pense que c'est dû au fait que nginx sert du HTTP alors que le client attend du HTTPS.
Je suggère dans u premier temps de supprimer les directives d'écoute sur le port 80 :

  listen 80 proxy_protocol;
  listen [::]:80 proxy_protocol;

Ou encore mieux de force la redirection en HTTPS :

server {
  listen 80;
  listen [::]:80;
  server_name lxc01.monsitepublic.fr;
  return 301 https://$server_name$request_uri;
}
server {
  listen [::]:443 ssl; # managed by Certbot
  listen 443 ssl; # managed by Certbot
  server_name lxc01.monsitepublic.fr;

  location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass [url]http://lxc01.lxd[/url];
  }
  real_ip_header proxy_protocol;
  set_real_ip_from 127.0.0.1;

  ssl_certificate /etc/letsencrypt/live/lxc03.monsitepublic.fr/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/lxc03.monsitepublic.fr/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Sinon c'est un problème de configuration TLS. Il faudra regarder le contenu du fichier déjà demandé et voir la version installée d'OpenSSL.

#9 Le 15/01/2021, à 14:33

czam31

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Détail du fichier :

cat /etc/letsencrypt/options-ssl-nginx.conf
# This file contains important security parameters. If you modify this file
# manually, Certbot will be unable to automatically provide future security
# updates. Instead, Certbot will print and log an error message with a path to
# the up-to-date file that you will need to refer to when manually updating
# this file.

ssl_session_cache shared:le_nginx_SSL:10m;
ssl_session_timeout 1440m;
ssl_session_tickets off;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;

ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";

Le test sans la consigne 80 ne donne rien.

openssl version
OpenSSL 1.1.1f  31 Mar 2020

Dernière modification par czam31 (Le 15/01/2021, à 14:42)

Hors ligne

#10 Le 15/01/2021, à 15:37

bruno

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

Alors c'est un problème de certificat. Comme ton architecture est inutilement alambiquée, (Pourquoi diable tous ces conteneurs LXC ?), cela ne simplifie pas le débogage.
Vérifie bien quel le serveur Nginx qui sert de mandataire inverse (proxy) et qui héberge les certificats est le frontal (directement acessible depuis l'Internet). Que les certificats générés par certbot sont bien présents et accessibles en lecture et que tu as bien relancé nginx après chaque changement de configuration.

Une commande pour tester de l'extérieur la présence du certificat (en remplaçant par le vrai nom de domaine ou l'adresse IP) :

openssl s_client -connect lxc01.monsitepublic.fr:443

Dernière modification par bruno (Le 15/01/2021, à 15:47)

#11 Le 15/01/2021, à 16:45

czam31

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

big_smile Mais pourquoi diable ont-ils créé LXD ? !! big_smile:D Et j'ai bien sur relancé Ngnix à chaque modif...

J'ai aussi essayé avec le Nginx sur le Host et le pb est le même. J'ai vu que peut-être la version LXD 4.10 règlerait certains problèmes, mais apt install ou snap install ne propose que la 4.0.4.

J'ai testé l'adresse en 443 avec https://www.cdn77.com/tls-test et effectivement il semble qu'il n'y ait pas de retour d'infos, pourtant le log affiche bien quelque chose dans le proxy ??:/
Bref, je vais retenter avec Nginx sur le HOST pour "simplifier le debug"  - Merci pour votre aide smile

Hors ligne

#12 Le 15/01/2021, à 20:27

czam31

Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible

PB qui semble résolu... big_smile
Alors j'ai "simplifié" l'installation en repartant de ZERO. 
1- Le HOST avec LXD + NGNIX
(J'ai copié et modifié la config default nginx pour faire le premier bloc serveur du host et désactivé le default  )
==> test Host HTTP OK
2 - Install de Certbot et python3-certbot-nginx et chargement des certificats
==> Test Host HTTPS OK
3 - Install de deux containers LXD (xc01 et lxc02) avec apache et la même config que plus haut
4 - Sur le Host, configuration des bloc serveurs sur la base du bloc host - redémarrage de nginx ;-)
==> Test lxc01.xxxxxxx.fr et lxc02.xxxxxxx.fr/  HTTP et HTTPS OK
Conclusion, je suppose que quelque chose perturbait le trafic 443 entre le Host et le Proxy. Mais quoi ???

Ci dessous le fichier du Host Nginx pour le routage du container LXC01,
avec Proxy pass qui pointe sur l'IP (le lien Lxc01.LXD ne fonctionne pas)

 server {
	server_name lxc01.xxxxxxxxx.fr;
	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
  proxy_pass http://10.118.158.210;

	}

    listen [::]:443 ssl; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/lxc01.xxxxxxx.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/lxc01.xxxxxxx.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = lxc01.xxxxxxx.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

	listen 80 ;
	listen [::]:80;
	server_name lxc01.xxxxxx.fr;
    return 404; # managed by Certbot
}

Maintenant je vais tester proxmox tongue 
Merci encore pour votre aide :-)

Dernière modification par czam31 (Le 15/01/2021, à 20:28)

Hors ligne