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.17.5.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.17.5.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
        # Option TLS
        email lucas.garre@gmail.com
        # Config globale ACME via DNS
        acme_dns cloudflare <Acme_Cloudflare_Token>
        # Config HTTP3
        servers {
                protocol {
                        experimental_http3
                }
        }
        # Configuration DDNS via CloudFlare
        dynamic_dns {
                provider cloudflare <Acme_Cloudflare_Token>
                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:80
	}

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

	# Minio
        @minio host minio.lgarre.fr
        handle @minio {
                reverse_proxy 192.168.1.X:80
        }
   
	# Remotely
	@remotely host remote.lgarre.fr
	handle @remotely {
		reverse_proxy 192.168.1.X:80
	}

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

	# Wordpress
        @wordpress host dev-wp.lgarre.fr
        handle @wordpress {
		reverse_proxy 192.168.1.X:80
	}

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

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