[Tuto] Reverse proxy avec Caddy

Les tutoriaux rédigés par les membres
Répondre
Mikiya
Chevalier Jedi
Messages : 440
Enregistré le : 25 octobre 2016

[Tuto] Reverse proxy avec Caddy

Message par Mikiya » 03 mars 2018 20:04

Salut
Suite au récent ajout de Caddy par Qoolbox (merci encore à lui pour tous ces paquets !), je vais simplement écrire ici un petit récapitulatif de la marche à suivre pour s'en servir en reverse proxy. C'est grandement tiré de l'exemple donné par Celena donc merci aussi !
Déjà, un reverse proxy, c'est pour accéder à un serveur "interne" (pas directement ouvert sur le web) depuis l'extérieur. L'utilité ? Gérer du load-balancing, ouvrir en https des serveurs qui ne sont que en http, rajouter une couche d'authentification si on veut,... c'est pas inutile selon les cas ;)

Alors pour ça il vous faut déjà installer le paquet de Qoolbox depuis le store viewtopic.php?f=21&t=8864.
Je vous incite fortement à suivre mon tuto pour avoir un certificat LE : viewtopic.php?f=55&t=7078&p=47912#p47912 il sera commun pour l'ensemble du NAS ça aide.
Une fois fait, un simple fichier suffit, Caddy est bluffant de simplicité !
Vous pouvez écrire :

Code : Tout sélectionner

(sslconf) {
        tls CHEMIN_VERS_VOTRE_CERTIFICAT_COMPLET CHEMIN_VERS_VOTRE_KEY {
                ciphers ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-AES256-CBC-SHA ECDHE-RSA-AES128-CBC-SHA ECDHE-ECDSA-AES256-CBC-SHA ECDHE-ECDSA-AES128-CBC-SHA
                curves  X25519 p256 p384 p521
                protocols tls1.2
        }
}

(gzipconf) {
        gzip {
                level 5
                min_length 1
        }
}

(addheader) {
        header / {
                Strict-Transport-Security "max-age=31536000;"
                X-Frame-Options "DENY"
                X-Content-Type-Options "nosniff"
                x-xss-protection "1; mode=block"
                Referrer-Policy "strict-origin-when-cross-origin"
                -Server
        }
}

https://VOTRE_NOM_DE_DOMAINE:PORT_OUVERT {
        import sslconf
        import gzipconf
        import addheader
        proxy / http://IP_DU_SERVEUR_INTERNE:PORT_INTERNE {
                keepalive 32
                transparent
        }
}
Une fois ceci copié dans un fichier (par exemple /share/homes/admin/caddy.conf), vous pouvez lancer le serveur simplement en tapant :

Code : Tout sélectionner

caddy -conf /share/homes/admin/caddy.conf&
Normalement depuis internet vous accèderez au serveur interne c'est bon !
Vous devriez avoir un grade A+ sur SSLLabs en sécurité, et grade A sur SecurityHeaders.

Mais au reboot ce n'est pas persistant...

Donc je propose de mettre ça dans un script :

Code : Tout sélectionner

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/bin/X11:/usr/local/sbin:/usr/local/bin

# Attendre le démarrage de tous les services avant
sleep 600

# Couper l'ecoute de caddy de base qui ne sert pas
killall caddy
# Lancer notre serveur bien configuré
caddy -conf /share/homes/admin/caddy.conf&
Et appelez ce script en fond (avec &) par une des deux techniques comme dans le tuto pour le certificat LE : la technique du autorun (https://techlightup.blogspot.fr/2013/08 ... artup.html) ou avec BashIT (viewtopic.php?f=21&t=2020&p=16572&hilit=autorun#p16572)

Quelques remarques :
  • Vous pouvez personnaliser la partie proxy pour faire pointer autre chose que / (/contacts, ...) vers divers serveurs différents.
  • Vous pouvez monter encore la sécurité en rajoutant une directive Content-Security-Policy, par exemple Content-Security-Policy "", mais cela demandera peut être un ajustement du serveur interne, s'il va chercher des ressources sur d'autres sites il faudra les ajouter une à une dans cette directive.
  • Vous pouvez rajouter d'autres possibilités à ce proxy, comme du websocket, de l'authentification,... Les options sont ici : https://caddyserver.com/docs
  • Vous pouvez aussi renforcer la sécurité en ne faisant pas tourner Caddy en admin mais sur un user limité, il faut alors remplacer la fin du script par :

    Code : Tout sélectionner

    cd /share/homes/USER_LIMITE
    sudo -u USER_LIMITE caddy -conf /share/homes/USER_LIMITE/caddy.conf&
    Par contre veuillez à ce que les certificats et le script de conf lui soit bien accessibles en lecture seulement !
QNAP TS-251+ 4Go | RAID 1 Seagate IronWolf 3To | Onduleur Eaton 3S 550

Avatar du membre
Celena-007
Chevalier Jedi
Messages : 323
Enregistré le : 08 janvier 2016

Re: [Tuto] Reverse proxy avec Caddy

Message par Celena-007 » 04 mars 2018 09:18

Salut,

je vais apporter juste une info :

Caddy est capable de générer automatiquement les certificats LE, il s'occupera aussi de les renouveler.

Code : Tout sélectionner

(sslconf) {
	tls EMAIL {
		ciphers	ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-AES256-CBC-SHA ECDHE-RSA-AES128-CBC-SHA ECDHE-ECDSA-AES256-CBC-SHA ECDHE-ECDSA-AES128-CBC-SHA
		curves	X25519 p256 p384 p521
		key_type rsa4096
		protocols tls1.2
	}
}
Note Importante : cette configuration génère 1 certificat par site héberger, ce ne sera donc plus celui générer par le Tuto de Mikiya

Avatar du membre
FX Cachem
Site Admin
Messages : 9927
Enregistré le : 08 décembre 2013
Professionnel : Non
Localisation : Paris
Contact :

Re: [Tuto] Reverse proxy avec Caddy

Message par FX Cachem » 04 mars 2018 10:34

Vraiment très sympa... et utile.
Un grand MERCI :-D
Blogueur sur Cachem et administrateur du Forum des NAS
NAS : Synology DS918+ | QNAP TS-470 Pro | ASUSTOR AS-302T

Mikiya
Chevalier Jedi
Messages : 440
Enregistré le : 25 octobre 2016

Re: [Tuto] Reverse proxy avec Caddy

Message par Mikiya » 04 mars 2018 10:45

Oui je n'ai pas parlé de la génération par Caddy, tu as raison de le préciser :)
Par contre je pense pas que LE vive bien si on veut un certificat par Caddy et un autre pour le NAS en général sur le même domaine, à tester avant pour vérifier.
QNAP TS-251+ 4Go | RAID 1 Seagate IronWolf 3To | Onduleur Eaton 3S 550

aureladmin
Messages : 27
Enregistré le : 11 novembre 2017

Re: [Tuto] Reverse proxy avec Caddy

Message par aureladmin » 17 avr. 2019 23:34

Comme promis je met le fichier de conf que j'ai fais pour pouvoir utiliser caddy avec le certificat let'sencrypt générer via myqnapcloud.

Code : Tout sélectionner

(sslconf) {
        tls /mnt/HDA_ROOT/.config/QcloudSSLCertificate/cert/cert /mnt/HDA_ROOT/.config/QcloudSSLCertificate/cert/key {
                ciphers ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-WITH-CHACHA20-POLY1305 ECDHE-RSA-AES256-CBC-SHA ECDHE-RSA-AES128-CBC-SHA ECDHE-ECDSA-AES256-CBC-SHA ECDHE-ECDSA-AES128-CBC-SHA
                curves  X25519 p256 p384 p521
                protocols tls1.2
        }
}

(gzipconf) {
        gzip {
                level 5
                min_length 1
        }
}

(addheader) {
        header / {
                Strict-Transport-Security "max-age=31536000;"
                X-Frame-Options "DENY"
                X-Content-Type-Options "nosniff"
                x-xss-protection "1; mode=block"
                Referrer-Policy "strict-origin-when-cross-origin"
                -Server
        }
}

https://VOTRE_NOM_DE_DOMAINE.myqnapcloud.com:PORT_OUVERT {
        import sslconf
        import gzipconf
        import addheader
        proxy /radarr http://VOTRE_IP_RADARR:PORT_RADARR {
                keepalive 32
                transparent
        }
        proxy /sonarr http://VOTRE_IP_SONARR:PORT_SONARR {
                keepalive 32
                transparent
        }
         proxy /transmission http://VOTRE_IP_TRANSMISSION:PORT_TRANSMISSION {
                keepalive 32
                transparent
        }
}
Pour Radarr et Sonarr il faut aussi aller dans les paramètres "general" et compléter le champ "URLBASE" avec "/radarr", "/sonarr" ou autre (si vous le changez ne pas oublier de le modifier aussi dans le fichier de conf de caddy.
Pour Transmission c'est pareil mais via le fichier de config "settings.json" ("rpc-url": "/transmission/", )

Du coup tous est accessible via "https://VOTRE_NOM_DE_DOMAINE.myqnapcloud.com:PORT_OUVERT/VOTRE_APPLIS" et le tous via un seul port. :-o

On peut rajouter autant d'applis que l'on veut en utilisant le certificat fourni par let'sencrypt via qnap et aussi utiliser myqnapcloud normalement (filestation, ...)

Meme si le certificat est renouvelé cela ne pose pas de problème c'est totalement transparent. :-P :mrgreen:

Répondre

Retourner vers « Tutoriaux »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités