Pages : 1
#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
Mais pourquoi diable ont-ils créé LXD ? !! :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
Hors ligne
#12 Le 15/01/2021, à 20:27
- czam31
Re : FOCAL-LXD-NGINX REVERSE PROXY - Https impossible
PB qui semble résolu...
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
Merci encore pour votre aide :-)
Dernière modification par czam31 (Le 15/01/2021, à 20:28)
Hors ligne
Pages : 1