Skip to content

J0hnMatrix/debian-haproxy-certbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

HAProxy & Certbot

Ce tuto a pour but d'installer HAProxy et Certbot sur Linux (PC, serveur, VM, Raspberry,...) et ainsi avoir un Reverse Proxy avec renouvellement automatique des certificats SSL Letsencrypt.

Prérequis :

Pour la partie renouvellement du certificat, une tâche Crontab sera créée pour être exécutée tous les jours à 4h00, le résultat sera sauvegardé dans un fichier log et envoyé par mail.

Par défaut la commande certbot renew ne sera exécutée qu'à 2 jours de l'expiration du certificat (peut être modifié)

Une fois le renouvellement terminé, le nouveau certificat sera automatiquement mis en place pour HAProxy et ce dernier sera automatiquement relancé.

Egalement une copie des fichiers du certificat (cert.pem ; chain.pem ; fullchain.epm ; privkey.pem) sera copié dans ~/certbot/

Le rôle d'Incrontab sera de :

  • Valider le fichier de configuration de HAProxy (~/haproxy/haproxy.cfg) à chaque fois qu'il sera modifié (condition IN_CLOSE_WRITE) et il :

    • Sauvegardera la configuration actuelle dans le répertoire ~/haproxy/bkp
    • Copiera le nouveau fichier de configuration dans /etc/haproxy/
    • Relancera le service HAProxy
  • Dans le cas ou il ne sera pas valide, HAProxy ne sera pas relancé et l'utilisateur devra corriger les erreurs (log présent dans ~/haproxy/logs)

Variables du tuto :

  • linux-local-account doit être remplacée par le compte utilisateur présent sur le serveur
  • your.domain.fr doit être remplacée par votre nom de domaine.

Mise en place de l'environnement Linux

(Depuis le serveur Linux avec le compte utilisateur)

  • Installer bc, incrontab et samba
sudo apt install bc incrontab samba samba-common-bin
  • Créer le répertoire ~/.secrets/certbot/
mkdir ~/.secrets/certbot/
  • Créer les shares Samba suivants :
sudo nano /etc/samba/smb.conf
  • Changer le nom du Workgroup dans la section Global
  • A la fin du fichier rajouter :

[home-linux-local-account]
comment = Share for home folder
path = /home/linux-local-account
   writeable = yes
   browsable = yes
   public = yes
   create mask = 0644
   directory mask = 0755
   force user = linux-local-account

[certbot-dns-ovh]
comment = Share for the certbot-dns-ovh plugin
path = /home/linux-local-account/.secrets/certbot/
   writeable = yes
   browsable = yes
   public = yes
   create mask = 0600
   directory mask = 0755
   force user = linux-local-account

  • Redémarrer le service Samba:
sudo service smbd restart
  • Lancer un explorateur de fichiers Windows et se connecter au serveur Linux et vérifier que chaque partage est accessible.

  • Créer/Copier/Renommer le fichier ovh.ini contenant le token fourni par le bureau d'enregistrement et le copier dans ~/.secrets/certbot/

  • Lui donner des permissions en lecture seule :

chmod 600 ~/.secrets/certbot/ovh.ini
  • Copier le répertoire scripts dans ~/

  • Changer la variable user correspondante à votre nom d'utilisateur dans tous les scripts :

find ~/scripts/ -type f -iname "*.sh" -exec sed -i "s/your-username/"$USER"/g" {} \;
  • Changer l'adresse mail par votre adresse (remplacer $your-new-mail dans la commande) :
find ~/scripts/ -type f -iname "*.sh" -exec sed -i 's/your@mail.com/$your-new-mail/g' {} \;
  • Attribuer les permissions d'exécution sur tous les fichiers .sh :
find ~/scripts/ -type f -iname "*.sh" -exec chmod +x {} \;

Installation et configuration de Certbot

sudo certbot certonly \
  --dns-ovh \
  --dns-ovh-credentials ~/.secrets/certbot/ovh.ini \
  --dns-ovh-propagation-seconds 60 \
  -d your.domain.fr \
  -d *.your.domain.fr
  • Vérifier si certbot a mis en place un timer Systemd pour renouveller automatiquement les certificats de son côté :
systemctl list-timers
  • Si oui (une ligne contenant snap.certbot.renew.timer devrait être affichée), le désactiver sinon le script ne se lancera jamais :
sudo systemctl disable snap.certbot.renew.timer
sudo systemctl stop snap.certbot.renew.timer
  • Vérifier en tapant la commande :
systemctl list-timers

Installation et configuration de HAProxy

sudo cat /etc/letsencrypt/live/your.domain.fr/fullchain.pem /etc/letsencrypt/live/your.domain.fr/privkey.pem > /etc/haproxy/certs/your.domain.fr.pem
  • Créer le répertoire pour HAProxy dans ~/
mkdir ~/haproxy
  • Copier le fichier de configuration dans ~/haproxy/ et le renommer en haproxy.cfg si nécessaire

  • Vérifier la validité du fichier de configuration avec la commande :

sudo haproxy -c -V -f ~/haproxy/haproxy.cfg

Il devrait y avoir la ligne Configuration file is valid pour indiquer que le fichier de configuration est valide, sinon corriger les erreurs.

Installation et configuration de MSMTP

  • Installer MSMTP pour récupérer le résultat du script via mail
sudo apt install msmtp-mta
  • Créer un fichier /etc/msmtprc selon le modèle suivant

# Set default values for all following accounts.
defaults
port 587
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

account gmail
host smtp.gmail.com
from <your-technical-mail>@gmail.com
auth on
user <your-technical-mail>
password <the-password-of-your-technical-mail>

# Set a default account
account default : gmail

  • Si vous utilisez un compte GMail, il faudra désactiver l'option de sécurité "Accès moins sécurisé des applications" (Google va gueuler)

  • Tester avec la commande :

echo -e "Subject: [Your-domain] Certbot renewal status" | msmtp <your-mail>@gmail.com
  • Avec le compte root, mettre en place un cron qui lancera ce script tous les jours à 4h00 du matin :
sudo crontab -e
  • Ajouter la ligne :
00 04 * * * /home/linux-local-account/scripts/certbot-haproxy-renew/launch-renew.sh

Configuration d'Incrontab

  • Spécifier l'utilisateur root comme étant le seul à pouvoir lancer des tâches Incrontab
echo root | sudo tee -a /etc/incron.allow
  • Créer la tâche Incrontab
sudo incrontab -e
/home/linux-local-account/haproxy/haproxy.cfg	IN_CLOSE_WRITE	/home/linux-local-account/scripts/incron/launch-haproxy-incron.sh
  • Redémarrer le service Incron
sudo service incron restart

Tester en buvant une bonne bière (ou un bon café) ! :)

About

HAProxy & Certbot on Debian

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published