La sécurisation de l’accès à votre instance Jeedom est cruciale, surtout si vous la rendez accessible depuis l’extérieur. Cloudflare est une solution populaire qui peut non seulement protéger votre Jeedom contre les attaques, mais également offrir un certificat SSL gratuit pour sécuriser les communications.
Prérequis
- Une instance Jeedom installée et fonctionnelle.
- Un nom de domaine ou un sous-domaine que vous possédez.
- Un fournisseur de nom de domaine qui permet de changer les serveurs de noms (nameservers).
- Un compte Cloudflare (gratuit ou payant).
Fournisseurs de nom de domaine recommandés
Si vous n’avez pas encore de nom de domaine ou que vous cherchez un fournisseur qui permet de modifier les serveurs de noms, voici trois options populaires, classées par coût :
- Namecheap : Un des registraires les moins chers, offrant une interface conviviale et une gestion DNS complète, y compris la possibilité de changer les serveurs de noms.
- OVHcloud : Une solution européenne abordable et fiable, idéale pour les utilisateurs en France.
- GoDaddy : Bien qu’un peu plus cher, il est réputé pour sa simplicité d’utilisation et son support technique étendu
Bien entendu, Cloud Flare vend également se type de service.
Étape 1 : Configurer Cloudflare
Ajouter votre domaine à Cloudflare
- Connectez vous à votre compte Cloudflare.
- Accédez à l’onglet Website et cliquez sur Add a Domain.
- Saisissez votre nom de domaine.
- Une fois ajouté, accédez au tableau de bord de votre domaine et explorez le menu DNS. Créez un enregistrement de type
A
qui pointe vers l’adresse IP WAN de votre box internet. - Si votre connexion utilise IPv6, ajoutez également une entrée
AAAA
. - Assurez-vous que l’option Proxy (nuage orange) est activée pour bénéficier des fonctionnalités de Cloudflare, y compris le chiffrement.
Réduisez votre surface d’exposition en choisissant un nom de sous domaine difficile a deviner.
Configurer les règles SSL/TLS
- Accédez à l’onglet SSL/TLS.
- Sélectionnez l’option Full (Strict) pour un chiffrement de bout en bout.
Étape 2 : Générer un certificat SSL Cloudflare pour Apache
Pour sécuriser les communications entre Cloudflare et votre serveur Jeedom, vous devez générer un certificat SSL. Voici les étapes :
Générer un certificat SSL Cloudflare
- Dans le tableau de bord Cloudflare, accédez à SSL/TLS > Origin Server.
- Cliquez sur Create Certificate.
- Choisissez l’option Generate private key and CSR with Cloudflare.
- Ajoutez votre le sous-domaine relatif à l’accès Jeedom.
- Configurez la durée de validité du certificat (par défaut 15 ans).
- Cliquez sur Create.
- Choisissez le format de la clé (Key Format): PEM (Base64-encoded ASCII).
- Copiez la clé privé et la clé publique dans des fichiers séparés. Pour des raisons de sécurité vous ne pourrez plus récupérer la clé privée après avoir fermé la fenêtre.
- Cliques sur OK.
Installer le certificat sur Apache
Étape 1 : Copier les certificats sur le serveur
Sur votre machine locale, placez le certificat et la clé privée dans un répertoire temporaire, par exemple
mkdir ~/certificats mv origin.pem origin.key ~/certificats/
mv origin.* $Home/certificats/
Transférez les fichiers vers le serveur Jeedom avec scp (remplacez <user>
et <ip-server>
par vos informations)
scp $Home/certificats/origin.pem <user>@<ip-server>:/tmp/
scp $home/certificats/origin.key <user>@<ip-server>:/tmp/
Connectez-vous à votre serveur Jeedom
ssh <user>@<ip-server>
Déplacez les fichiers dans le répertoire sécurisé d’Apache (par exemple /etc/ssl/certs
pour le certificat et /etc/ssl/private
pour la clé)
sudo mv /tmp/origin.pem /etc/ssl/certs/jeedom-cert.pem
sudo mv /tmp/origin.key /etc/ssl/private/jeedom-key.key
Ajustez les permissions pour sécuriser la clé privée
sudo chmod 600 /etc/ssl/private/jeedom-key.key
sudo chmod 644 /etc/ssl/certs/jeedom-cert.pem
Étape 2 : Configurer Apache pour utiliser les certificats
Ouvrez le fichier de configuration SSL d’Apache. Sur un serveur standard Debian, le fichier est généralement
sudo nano /etc/apache2/sites-available/default-ssl.conf
Modifiez les directives pour pointer vers votre certificat et votre clé privée
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName sousdomain.domain.org # Entrez l'adresse exterieur complete de votre jeedom
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/jeedom-cert.pem # entrez le chemin vers votre certificat
SSLCertificateKeyFile /etc/ssl/private/jeedom-key.key # entrez le chemin vers votre clé privée
# (Optionnel) Inclure le certificat CA si nécessaire
# SSLCertificateChainFile /etc/ssl/certs/ca.pem
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Enregistrez et quittez l’éditeur (Ctrl+O
, Enter
, puis Ctrl+X
).
Étape 3 : Activer le site SSL
Activez le module SSL d’Apache (si ce n’est pas encore fait)
sudo a2enmod ssl
Activez le site SSL
sudo a2ensite default-ssl
Redémarrez Apache pour appliquer les changements
sudo systemctl restart apache2
Changez le port de communication pour réduire encore un peu la surface d’exposition
Étapes pour configurer un NAT :
Accéder à l’interface de gestion de la box :
Connectez-vous à l’interface web de votre box en entrant son adresse IP dans un navigateur (souvent 192.168.1.1
ou similaire). Vérifiez dans le manuel ou sous la box si vous ne connaissez pas l’adresse.
Identifiez-vous avec vos identifiants administrateur (fournis par votre FAI).
Localiser les paramètres NAT/Port Forwarding :
Dans le menu de votre box, cherchez une section appelée NAT, Redirection de ports, ou Port Forwarding (souvent dans les paramètres avancés ou réseau).
Créer une nouvelle règle de redirection :
Port externe : Entrez le port utilisé pour l’accès depuis l’extérieur (par exemple, 8443 pour HTTPS).
Adresse IP interne : Indiquez l’adresse IP locale de votre serveur Jeedom (par exemple, 192.168.1.100
).
Port interne : Spécifiez le port utilisé par le service sur votre serveur (généralement ici 443).
Protocole : Choisissez entre TCP, UDP, ou TCP/UDP (HTTPS utilise TCP).
Sauvegarder la règle et redémarrer la box si nécessaire :
Après avoir ajouté la règle, sauvegardez les modifications.

Étape 5 : Tester la configuration
Ouvrez votre navigateur et accédez à votre site
Bonus: Automatiser la mise à jour DNS
Si comme moi, votre IP publique est dynamique, je vous livre de quoi rafraichir l’adresse votre entrée DNS Cloud flare.
Prérequis
Tel qu’écrit ici, vous devez générer un Jeton API: Mon Profil > Jeton API > Créer un Jeton. Utilisez le modèle Modifier le DNS zone
Ensuite, il est écrit ici comment obtenir le ZoneId. Oui, décidément tout est bien documenté chez CloudFlare.
L’Id se trouve en bas à droite de la page d’accueil, copiez le.
# Fonction pour récupérer l'ID de l'enregistrement DNS
function Get-DnsRecordID {
[CmdletBinding()]
param (
[String]$apiUrl = "https://api.cloudflare.com/client/v4",
[String]$apiToken,
[String]$Email,
[String]$zoneID,
[String]$recordName,
[String]$recordType = "A"
)
$dnsRecordUrl = "$apiUrl/zones/$zoneID/dns_records?type=$recordType&name=$recordName"
$headers = @{
"Authorization" = "Bearer $apiToken"
'X-Auth-Email' = $Email
}
# Requête pour obtenir l'ID de l'enregistrement
$response = Invoke-RestMethod -Uri $dnsRecordUrl -Method Get -Headers $headers -ContentType application/json
If ($response.success) {
return $response.result[0].id
}
eElse {
Write-Host "Erreur : impossible de récupérer l'ID de l'enregistrement DNS."
return $null
}
}
# Fonction pour mettre à jour l'enregistrement DNS
function Update-DnsRecord {
[CmdletBinding()]
param(
[String]$apiUrl = "https://api.cloudflare.com/client/v4",
[String]$apiToken,
[String]$Email,
[String]$zoneID,
[String]$dnsRecordID,
[String]$PublicIP
)
# URL de l'API pour mettre à jour l'enregistrement DNS
$updateUrl = "$apiUrl/zones/$zoneID/dns_records/$dnsRecordID"
Write-Verbose $updateUrl
$headers = @{
"Authorization" = "Bearer $apiToken"
'X-Auth-Email' = $Email
}
# Données de la requête pour la mise à jour
$body = @{
"content" = $PublicIP
} | ConvertTo-Json -Depth 10
Write-Verbose $body
# Exécution de la mise à jour
$response = Invoke-RestMethod -Uri $updateUrl -Method Patch -Headers $headers -Body $body -ContentType application/json
If ($response.success) {
$response.result
} Else {
Write-Host "Erreur lors de la mise à jour de l'enregistrement DNS : $($response.errors)"
}
}
$Parameters = @{
zoneID = "$Zone_ID" # ID de la zone Cloudflare (nom de domaine)
recordName = "$DNS_RECORD_NAME" # Nom de l'enregistrement DNS
recordType = "A" # type d'enregistrement A ou AAAA
apiToken = "$Env:CLOUDFLARE_API_KEY" # Token API Cloudflare
Email = "$Env:CLOUDFLARE_EMAIL" # Vore identifiant CloudFlare
}
$dnsRecordID = Get-DnsRecordID @Parameters
$Parameters.Add("PublicIP", $PublicIP)
$Parameters.Add("dnsRecordID", $dnsRecordID)
$Parameters.Remove("recordName")
$Parameters.Remove("recordType")
# Appel de la fonction pour mettre à jour l'enregistrement DNS
Update-DnsRecord @Parameters -Verbose
Vous noterez qu’il vous manque de quoi obtenir l’adresse IP automatiquement. J’ai un code pour interroger ma Livebox. Il existe également des api publique pour vous aider dans le démarche. Pour ma part, je m’arrête là ce soir.
Sources
- Network ports · Cloudflare Fundamentals docs
- Origin CA certificates · Cloudflare SSL/TLS docs
- My Canaletto | Jeedom : SSL avec Cloudflare
- Documentation CloudFlare API
- Virtualiser et installer Jeedom