Doc configuration avec reverse proxy

Suite du sujet Manque de places WS2P sur le réseau Ğ1! :

Je propose qu’on en discute ici car on a dérivé hors sujet sur le thread initial.

2 J'aime

Je prépare une ébauche sur apache en Fr. ca fera déjà une base

Voici les points a traiter auxquels je pense :

  • De l’intérêt d’utiliser un reverse proxy
  • Conf avec plusieurs sous-domaines
  • Conf avec un seul sous-domaine
  • Protection de l’interface d’admin

Pour chacun de ces points il faudrait pouvoir fournir des exemples Apache et nginx.

1 J'aime

Cette configuration est utilisée dans le paquet YunoHost.

1 J'aime

Qu’est ce que tu entends par là ? Un sous domaine par protocole ? Style bma.domain.tld et ws2p.domain.tld ?

Reste à traiter dans ce que j’ai prévu et ce que tu indiques :

  • GVA que je ne maitrise pas encore
  • Multi sous domaine
  • Les tests de vérification de la configuration
  • Interface d’admin avec mdp
  • Autres distributions que Debian
  • Les certificats, à simplifier peut-être et intégrer l’auto renouvellement
  • Test de la doc en réel car j’ai modifié la conf apache par rapport à chez moi

Voila ou j’en suis :

Résumé

Installation d’un reverse proxy Apache

Principe

Un reverse proxy apache permet la gestion du SSL pour les différents protocoles réseau de Duniter. Le serveur Apache recevra les connexions distantes en SSL et les transfèrera à Duniter.

Les directives de configuration si dessous partent du principe que Duniter est configuré pour annoncer ses différents protocoles réseau sur le port 443 et que ceux-ci écoute en localhost sur les ports suivants :

  • BASIC_MERKLE_API : 10901
  • WS2P : 20901 (avec comme endpoint /ws2p)
  • GVA : 30901

Prérequis

  • Un nom de domaine. Nous utiliserons le domaine duniter.mydomain.com dans ce document, il faudra donc le remplacer par le votre.
  • Port 443 du serveur hébergeant Duniter accessible depuis internet.

Installation des paquets nécessaires

Debian :

Les commandes ci-dessous sont à exécuter en tant que root.

Installation du serveur Apache :

apt-get install apache2

Installation de CertBot pour la génération des certificats SSL gratuit par LetsEncrypt :

apt-get install certbot

Activation des modules Apache nécessaires

a2enmod ssl proxy proxy_http rewrite headers

ssl : obligatoire pour la gestion du SSL.

proxy : transfert des requêtes reçu à Duniter

proxy_http : proxy pour requête http

rewrite : réécriture des urls à la volée.

headers : personnalisation des en-têtes des requêtes (utilisé pour la connexion aux websockets)

Configuration d’Apache

Debian

Les fichiers de configuration sont situés dans le répertoire /etc/apache2

Les fichiers de configuration des différents sites sont situés dans le répertoire /etc/apache2/site-available

Création de notre fichier de configuration : copiez le texte ci-dessous dans le fichier /etc/apache2/site-available/duniter.mydomain.com.conf

# redirect non ssl requests to ssl port
<VirtualHost *:80>
	ServerName duniter.mydomain.com
	<IfModule mod_rewrite.c>
		RewriteEngine on
		RewriteCond %{SERVER_PORT} !^443$
		RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
	</IfModule>
</VirtualHost>

# ssl requests port
<VirtualHost *:443>
	ServerName duniter.mydomain.com
	<IfModule mod_rewrite.c>
		RewriteEngine On
		RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
		RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
		RewriteCond %{REQUEST_URI}  ^/ws2p            [NC]
		RewriteRule .* ws://127.0.0.1:20901%{REQUEST_URI} [P,QSA,L]
	</IfModule>
	
	# activate ssl proxy
	SSLProxyEngine on
	
	# proxy SSL ws2p request to Duniter ws2p
	ProxyPass /ws2p http://127.0.0.1:20901
	ProxyPassReverse /ws2p http://127.0.0.1:20901
	
	# proxy BMAS request to Duniter BMA port
	ProxyPass / http://127.0.0.1:10901/
	ProxyPassReverse / http://127.0.0.1:10901/
	
	# deactivate direct proxy request 
	ProxyRequests Off
	# pass the incoming request host to the proxied host via Header
	ProxyPreservehost On
	
	RequestHeader set X-Forwarded-Proto "https"
	RequestHeader unset If-Modified-Since
	RequestHeader unset If-None-Match
	Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"
	
	# Activate ssl
	SSLEngine On
	
	# Strong SSL
	SSLProtocol -all +TLSv1.3 +TLSv1.2
	SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

	# Certificat
	SSLHonorCipherOrder on
	SSLCertificateFile "/etc/letsencrypt/live/duniter.mydomain.com/cert.pem"
	SSLCertificateKeyFile "/etc/letsencrypt/live/duniter.mydomain.com/privkey.pem"
	SSLCertificateChainFile "/etc/letsencrypt/live/duniter.mydomain.com/chain.pem"
</VirtualHost>

Notre fichier de configuration gérant le port 80, nous pouvons supprimer la configuration par défaut d’Apache et activer notre configuration.

a2dissite 000-default
a2ensite duniter.mydomain.com

Si vous avez déjà vos certificats SSL, rechargez la configuration d’Apache et passez aux tests.

systemctl reload apache2

Générer ses certificats SSL

Si vous avez déjà vos certificats, vous pouvez passer cette étape. Assurez-vous juste de les avoir correctement renseigné dans la configuration d’Apache.

Attention : les certificats de LetsEncrypt ne sont valables que trois mois.

Méthode par validation DNS

certbot certonly --manual --preferred-challenges dns -d duniter.mydomain.com

Renseignez les différentes informations demandées et vous devriez avoir un message comme celui-ci :

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.duniter.mydomain.com with the following value:

T8zuEq7iBMm5_zrPVBY5sc0sZ4yiLWvYJsCh_pnMCEU

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Vous devez rajouter l’enregistrement TXT spécifié dans la configuration de votre domaine, une fois fait, continuez.

Vos certificats sont maintenant générés.

Rechargez la configuration d’Apache.

systemctl reload apache2

Renouvellement automatique des certificats

Voir tuto

Tests

BMAS

WS2P

GVA

Oui, tout à fait.

Pas trop pour rajouter cela, je pense que ca va compliquer et que c’est réservé à des cas peu commun mais il y a peut-être un cas d’usage que je ne vois pas.
En plus va falloir gérer des certificats supplémentaires ou un certificat wildcard. :fearful:

Typiquement c’est le cas d’usage dont on discutait au tout début de la conversation, pour l’accès à l’interface web. Effectivement, la multiplication des certificats est un des inconvénients, mais il existe plein d’outils pour automatiser ça de nos jours. Pour ma part j’utilise un certificat wildcard.

1 J'aime

On part sur une configuration hybride alors. Même sous domaine pour BMA, GVA, WS2P, … et un autre sous domaine style duniter-admin.mydomain.tld pour l’iface d’administration ?

Ca reste quand même plus simple de gérer ça par le path :sweat_smile: mais ok pour rajouter les deux.

C’est celui qui fait qui décide, hein ? Et comme pour l’instant c’est toi qui fait… :slight_smile:
Si tu ne le sens pas je proposerai une modif quand j’aurai pris le temps de me poser.

Mon idée c’était de dire « il n’y a pas qu’une seule solution ».

2 J'aime

Haha, oui si tu veux. C’est juste qu’a la base je ne voyais pas directement l’utilité mais tu m’as convaincu avec l’iface d’admin. Et en réfléchissant, un virtual host de plus n’est pas si compliqué vu que c’est un copier/coller du reste.

Je ne suis pas familier de discourse. J’ai cru comprendre qu’il existait un mode wiki pour des posts comme celui-ci. Comment ça s’active ?

Il faut cliquer sur la clef à molette en bas à droite du message. Puis sélectionner le menu « Passer en mode wiki ». Mais ce n’est peut-être que pour les admins…

Je ne vois pas de clef à molette.

Elle apparaît en cliquant sur ().

Mais seulement pour les utilisateurs ayant obtenu un certain niveau de confiance sur le forum, ou uniquement les modérateurs ou admins.

1 J'aime

Je me sens petit scarabée, d’un coup :slight_smile:

Perso je n’ai pas droit à cette molette non plus.
Soit les admins augmentent artificiellement ton niveau de confiance, soit ils mettent en mode wiki le post en question.

1 J'aime

Pas grave, je vais passer par git. Je maîtrise mieux.
@lciviero j’ai créé un projet sur git.duniter.org où je t’ai invité en tant que dev. Comme ça on pourra travailler sur le même document.

1 J'aime

Oui il faut être au moins niveau 3 pour créer un wiki et tu es niveau 2, je viens d’abaisser le niveau requis à 2 du coup :slight_smile:

1 J'aime