[Tuto] Reverse proxy avec Caddy

Les tutoriaux rédigés par les membres
Répondre
Mikiya
Chevalier Jedi
Messages : 416
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 : 9259
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 DS412+ | QNAP TS-470 Pro | ASUSTOR AS-302T

Mikiya
Chevalier Jedi
Messages : 416
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

Répondre

Retourner vers « Tutoriaux »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité