Passer au contenu principal

Configuration Caddy avec certificat wildcard, reverse-proxy et DDNS

Oui je sais c'est un service Américain
Nous utiliserons CloudFlare comme les plugins utilisés ne sont compatible que avec CloudFlare

Configuration des entrée DNS sur CloudFlare

image-1639913068053.png

Créer plusieurs enregistrement dans votre DNS.

Comment nommer ses entrées DNS
- Nommer l'entrée A avec par exemple le nom de code d'emplacement du serveur ( SXB pour Strasbourg MLH pour Mulhouse etc...)

  • Un enregistrement A (IPv4) mlh pointant sur une IPv4 publique
  • Si IPv6 est disponible un enregistrement AAAA (Ipv6) mlh pointant sur une IPv6 publique
  • Une enregistrement CNAME (Alias) * pointant sur mlh.lgarre.fr


Création du jeton sur cloudflare

Sur son compte cloudflare créer le jeton avec les autorisations suivantes: 

  • Lecture de la Zone DNS
  • Modification de la DNS

image-1620758616443.png

Ce qui va se passer
Ce qui donne en résumé !

image-1620758506752.png

N'allez pas trop vite !
à la fin le jeton est crée, il faut précieusement copier le jeton, ensuite il ne sera plus affiché !

image-1620758653222.png

Compiler Caddy avec les modules supplémentaire

Télécharger et installer Go

https://go.dev/dl/go1.19.2.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.19.2.linux-amd64.tar.gz

Ajouter go dans les variables d'environnement système

Ou ça ?
Emplacement du fichier:  /etc/profile

Ajouter à la fin du fichier ceci: 

export PATH=$PATH:/usr/local/go/bin

Téléchargez et installer xCaddy

# Installation de xCaddy depuis une source externe à Debian ( pas forcément conseillé de faire en Prod !!!)
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-xcaddy.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list
apt update && apt install xcaddy
xcaddy build --with github.com/caddy-dns/cloudflare --with github.com/mholt/caddy-dynamicdns

Compiler caddy avec les extensions suivantes: 

xcaddy build --with github.com/caddy-dns/cloudflare --with github.com/mholt/caddy-dynamicdns

Placer le binaire produit dans /usr/bin

# Arrêt du service caddy
service caddy stop
# Déplacement du nouveau binaire vers le répertoire des binaires
mv ./caddy /usr/bin
# Attribution des droits
chmod +x /usr/bin/caddy
# Lancement du service avec le nouveau binaire à jour
service caddy start

Voici ci dessous la configuration de caddy actuellement utilisé par votre serviteur

# Bloc configuration globale
{
        # Desactivation de l'api de configuration
        admin off
        # Endpoint ACME
        acme_ca https://acme.zerossl.com/v2/DV90
        # Option TLS
        email lucas.garre@gmail.com
        # Config globale ACME via DNS
        acme_dns cloudflare <Acme_Cloudflare_TokenToken CloudFlare>
        # Configuration DDNS via CloudFlare
        dynamic_dns {
                provider cloudflare <Acme_Cloudflare_TokenToken CloudFlare>
                domains {
                        lgarre.fr mlh
                }
        }
}

# Utilisation d'un domaine Wildcard
*.lgarre.fr {
        # Activation des logs pour 1 an conforément à la loi Française
        log {
                output file /var/log/caddy/access.json {
                        roll_size 1gib
                        roll_keep 5
                        roll_keep_for 365d
                }
        }

        # Compression des données
        ( cause des problemes pour le moment)
        #encode zstd gzip

        # Configuration sites web

        # Unraid
        @hyperviseur host hyperviseur.lgarre.fr
        handle @hyperviseur {
                reverse_proxy 192.168.1.X:68.50:80
        }

        # Gitea
        @gitea host git.lgarre.fr
        handle @gitea {
                reverse_proxy 192.168.1.X:8068.50:3000
        }
        # S3
        @s3 host s3.lgarre.fr
        handle @s3 {
                reverse_proxy 192.168.1.X:8068.50:9000
        }

        # Minio
        @minio host minio.lgarre.fr
        handle @minio {
                reverse_proxy 192.168.1.X:8068.50:9001
        }

        # NextCloud
        @nextcloud host cloud.lgarre.fr
        handle @nextcloud {
                reverse_proxy 192.168.1.X:68.160:80
                redir /.well-known/carddav /remote.php/dav 301
                redir /.well-known/caldav /remote.php/dav 301
        }

        # Bookstack
        @bookstack host wiki.lgarre.fr
        handle @bookstack {
                reverse_proxy 192.168.1.X:68.170:80
        }

        # Serveur de fichiers
        @fileserver host data.lgarre.fr
        handle @fileserver {
                root * /caddy-temp/
                file_server browse
        }

        # Si l'hôte ne correspond pas on envoie un 404
        handle {
                respond "Erreur 404" 404 {
                        close
                }
        }
}