Synology Débloquer le pare-feu pour le renouvellement du certificat SSL

cricribibi

Nouveau membre
12 Octobre 2022
4
0
1
bonjour,
je viens de rencontrer un problème de renouvellement de certificat let's encrypt. en effet, mon port 80 est autorisé que pour la france pour éviter les spams. j'ai dû autoriser tous les pays pour le renouvellement se fasse.
Comment dois-je faire pour ne pas être bloqué par le renouvellement ?
 
Dans une tâche à planifier (un "cronjob") :

1) Méthode simple :
  1. Désactivation du firewall
    Code:
    /usr/syno/bin/synofirewall --disable
  2. Renouvellement des certificats
    Code:
    /usr/syno/sbin/syno-letsencrypt renew-all
  3. Activation du firewall
    Code:
    /usr/syno/bin/synofirewall --enable

2) Méthode plus restrictive :
  1. Création d'un nouveau profil du firewall avec ouverture des ports TCP/80 et TCP/443 accessibles à tout le monde depuis DSM (Panneau de configuration > Sécurité > Pare-feu)
  2. Activation d'un profil contenant une règle activant temporairement l'ouverture des ports TCP/80 et TCP/443 avec
    Code:
    /usr/syno/bin/synofirewall --profile-set letsencrypt-renew && synofirewall --reload
  3. Renouvellement des certificats
    Code:
    /usr/syno/sbin/syno-letsencrypt renew-all
  4. Changement du profil du firewall à celui par défaut :
    Code:
    /usr/syno/bin/synofirewall --profile-set <profil_par_défaut> && synofirewall --reload
 
merci @cooper
si j'ai bien compris dès que le renouvellement du certificat va se produire, je dois réactiver le port http et le fermer ensuite.
ou est-ce que je peux le laisser ouvert à tous les pays. Actuellement le pare feu laisse passer les connexions France.
 
si j'ai bien compris dès que le renouvellement du certificat va se produire, je dois réactiver le port http et le fermer ensuite.
ou est-ce que je peux le laisser ouvert à tous les pays. Actuellement le pare feu laisse passer les connexions France.
C'est préférable de désactiver ensuite.

Tu peux créer une règle que tu désactive après renouvellement.

Et tu l'active à chaque fois que tu en as besoin.
 
  • J'aime
Réactions: cricribibi
si j'ai bien compris dès que le renouvellement du certificat va se produire, je dois réactiver le port http et le fermer ensuite.
Tu mets les trois lignes données par @cooper dans un script via le planificateur de taches et ça se fait tout seul.
Tu nommes tes deux profils de ton parefeu pour qu'ils correspondent aux noms utilisés dans ton script bien sur.
Message automatiquement fusionné :

C'est préférable de désactiver ensuite.
Tu peux créer une règle que tu désactive après renouvellement.
Et tu l'active à chaque fois que tu en as besoin.
Un script le fera tout seul
 
  • J'aime
Réactions: cooper
merci @cooper
si j'ai bien compris dès que le renouvellement du certificat va se produire, je dois réactiver le port http et le fermer ensuite.
ou est-ce que je peux le laisser ouvert à tous les pays. Actuellement le pare feu laisse passer les connexions France.

Comme l'a dit @jeu2, les commandes données en 2e § se chargent de :
  1. Charger un profil du pare-feu spécifique pour laisser les connexions TCP/80 et TCP/443 nécessaires au client de LetsEncrypt (cerbot) pour lancer une instance d'un serveur httpd pour l'échange ACME
  2. Renouveller tous les certificats présents dans le Nas
  3. Recharger le profil par défaut du pare-feu n'autorisant que les connexions TCP/80 et TCP/443 provenant de France
 
hello
donc sur votre routeur vous redirigez tous le temps le port 80 sur votre NAS? Ce n'est pas problématique?
Merci
Edit: je viens de vérifier ce n'est pas necessaire, ca marche avec 443 uniquement
 
Oui car je fais tourner un apache24. Pourquoi serait-ce problèmatique ?
Concernant le port TCP/80 il est requis par le standard ACME (pour l'échange de clef pour la négociation; ensuite tout se fait via TCP/443).
 
non je pensais juste que c'etait necessaire, du coup j'ai essayé de creer une task avec un script qui va switcher mon profil filrewall pour faire la maj des certificats, puis reswitcher sur le profil par défaut.
j'ai cette erreur:
GenerateCertificates.sh: line 1: /usr/syno/bin/synofirewall: Permission denied

/usr/syno/bin/synofirewall --profile-set LetsEncrypt-renew && synofirewall --reload /usr/syno/sbin/syno-letsencrypt renew-all /usr/syno/bin/synofirewall --profile-set Default && synofirewall --reload
 
GenerateCertificates.sh: line 1: /usr/syno/bin/synofirewall: Permission denied

Seul root peut manipuler synofirewall (désolé ce n'était pas précisé dans les précédents posts).
Aussi il faut bien veiller à ce que le script soit exécutable.
 
Merci, j'ai passé en root pour l'execution de la task, je n'ai plus l'erreur directement mais le script ne semble pas faire le job, voici les logs que j'obtiens, on dirait qu'il n'aime pas les argument de la commande syno-letsencrypt
1682408779575.png
 
@DMAX
Passe en sudo -i pour tester les commandes une à une.
Avec le && il faut remettre le chemin complet après pour être sûr que le bilan it e utilisé soit le bon.
Ps : utiliser la balise de code , pas celle du code en ligne. Tu pourras spécifier le langage et avoir la coloration syntaxique.
 
  • J'aime
Réactions: cooper et DMAX
@DMAX Autre chose, il te faut un shebang au début de ton script :
Bash:
#!/usr/bin/env bash
# ====================================================================================== #
# ===================== Script renew_cert_with_firewall_actions.sh ===================== #
# ====================================================================================== #
/usr/syno/bin/synofirewall --profile-set LetsEncrypt-renew && /usr/syno/bin/synofirewall --reload
/usr/syno/sbin/syno-letsencrypt renew-all
/usr/syno/bin/synofirewall --profile-set Default && /usr/syno/bin/synofirewall --reload


La commande du renouvellement du certificat ne renvoie pas d'erreur chez moi (ni de message quelconque...) :
Bash:
root@Syno-DS920Plus:~# /usr/syno/sbin/syno-letsencrypt renew-all
root@Syno-DS920Plus:~#
Tu peux ajouter un -v à la commande pour avoir quelques messages de suivi.


Même chose pour le changement de profile du pare-feu :
Bash:
root@Syno-DS920Plus:~# /usr/syno/bin/synofirewall --profile-set default && /usr/syno/bin/synofirewall --reload
root@Syno-DS920Plus:~#
 
Dernière édition:
  • J'aime
Réactions: cooper et DMAX
premier point: avec sudo -i le changement de profil fonctionne
sans le sudo -i j'ai une erreur
1682453113070.png
second point: le renouvellement renvoie une erreur meme en etant root:
1682452993261.png

On ne peut pas renouveler si le certificat n'est pas expiré?
Merci
 
Dernière édition:
Le ou les certificats se renouvellent au besoin.
L'erreur affichée est explicite : le certificat n'est pas arrivé à expiration donc n'a pas eu besoin d'être renouvelé.

Cela permet de rester dans les clous et évite les abus définis dans les conditions d'utilisation des services offerts gratuitement par Let's Encrypt ;)
 
Le ou les certificats se renouvellent au besoin.
L'erreur affichée est explicite : le certificat n'est pas arrivé à expiration donc n'a pas eu besoin d'être renouvelé.

Cela permet de rester dans les clous et évite les abus définis dans les conditions d'utilisation des services offerts gratuitement par Let's Encrypt ;)
Dans mon cas le certificats ne se renouvellera pas automatiquement à cause de règles restrictives dans le firewall
D'où l'idée d'avoir un script exécuté tous les 3 mois avant l'expiration, il va:
1) changer le profil du firewall vers un moins restrictif
2) mettre à jour les certificats
3) restaurer le profil restrictif du firewall

Par ailleurs si je mets à jour les certificats manuellement depuis l'interface DSM je n'ai pas cette erreur

...il y a peut-être un délai pendant lequel l'API est bloquée, je vais laisser le script mensuel et voir ce qu'il se passe dans un, deux ou trois mois.
 
Dernière édition:
@DMAX
Tu peux planifier une tâche hebdomadaire, tout en continuant de respecter les conditions d'utilisation de Let's Encrypt.
Cela permettra de ne pas avoir un service utilisant un certificat ayant expiré.

Le client certbot se chargera de vérifier si un ou des certificats sont à renouveler et procédera aux renouvellements si nécessaire ;)
 
hello
désolé je n'ai pas compris ce que tu proposes, en tout cas ce que j'observe
- en manuel le renouvèlement fonctionne
- en script la commande "syno-letsencrypt renew-all" ne passe pas
 
@DMAX
Toutes les commandes indiquées ne peuvent être utilisées que par root (avec l'option -v si tu veux savoir ce syno-letsencrypt fait).
Si tu utilises un script, il faut également que ce soit root qui le lance, rien de bien sorcier.