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
}
}
Code : Tout sélectionner
caddy -conf /share/homes/admin/caddy.conf&
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&
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 :
Par contre veuillez à ce que les certificats et le script de conf lui soit bien accessibles en lecture seulement !
Code : Tout sélectionner
cd /share/homes/USER_LIMITE sudo -u USER_LIMITE caddy -conf /share/homes/USER_LIMITE/caddy.conf&