Provya

Expertise pfSense

Sommaire des articles  -  Liens & Actualités  -  Firewall pour pfSense

[pfSense] Sauvegarder automatiquement son firewall avec un script

icon 29/06/2021

English version: [pfSense] Making automatic backups with a script

Dans cet article, nous présentons une solution pour sauvegarder automatiquement son pfSense avec un script shell.

Nous nous appuyons sur le script shell bm-backup-pfsense proposé par le site Blogmotion.



Principe de fonctionnement


Le script va se connecter sur l'interface web du pfSense à sauvegarder et va "naviguer" dans les menus afin de déclencher le téléchargement du fichier de configuration (config.xml).

L'intérêt de ce script est qu'il passe par l'interface web de pfSense pour effectuer la sauvegarde. Ainsi, il n'y a pas besoin d'activer un accès SSH sur le serveur pfSense que l'on souhaite sauvegarder et l'on peut créer un compte utilisateur avec les droits strictement nécessaires pour effectuer la sauvegarde.

D'une façon générale, nous recommandons de se méfier des scripts ou applications qui nécessitent un accès SSH "root" sur les firewall pfSense ; cela représente un risque trop important en terme de sécurité.

Le script bm-backup-pfsense fonctionne très bien sous pfSense 2.4.x, 2.5.x et 2.6.x.



Création d'un compte utilisateur


Pour commencer, nous allons créer un compte utilisateur dédié à la sauvegarde.
Se rendre dans le menu System > User Manager :

Menu System > User Manager - pfSense - Provya


Depuis l'onglet "Users" (onglet par défaut), cliquer sur le bouton "+ Add".

Nous créons un nouvel utilisateur en précisant simplement un nom d'utilisateur (username) et un mot de passe (password). Les autres champs peuvent être laissés vides.

Exemple de résultat obtenu :

Création d'un utilisateur pour la sauvegarde - pfSense - Provya

Création d'un utilisateur dédié pour la sauvegarde


Pour en savoir plus sur la gestion des utilisateurs sous pfSense, consultez notre article dédié : [pfSense] La gestion des utilisateurs.


Nous pouvons maintenant modifier cet utilisateur afin de lui assigner les bons droits d'accès.
Pour cela, cliquer sur l'icône en forme de crayon se situant sur la ligne de l'utilisateur que nous venons de créer :

Modification d'un utilisateur pour la sauvegarde - pfSense - Provya



Descendre au niveau de la rubrique "Effective Privileges" et cliquer sur le bouton "+ Add" :

Ajout de droits à un utilisateur pour la sauvegarde - pfSense - Provya



Nous ajoutons le droit d'accès à la page de Sauvegarde / Restauration en sélectionnant la ligne "WebCfg - Diagnostics: Backup & Restore" :

Choix des droits pour un utilisateur pour la sauvegarde - pfSense - Provya



Nous validons notre choix en cliquant sur le bouton "Save", puis nous sauvegardons la modification de l'utilisateur en cliquant de nouveau sur le bouton "Save".

Ainsi, notre utilisateur "sauvegarde-auto" peut se connecter sur l'interface web de pfSense mais n'aura accès qu'à la page Backup & Restore :

Menu limité à la sauvegarde - pfSense - Provya

L'utilisateur sauvegarde-auto n'a accès qu'à une seule page de notre pfSense




Configuration du script


Le script bm-backup-pfsense doit pouvoir s'exécuter sur n'importe quelle distribution GNU/Linux ou serveur FreeBSD/pfSense.

Dans notre cas, nous exécuterons ce script depuis un serveur de sauvegarde Linux hébergé sur notre réseau local (LAN).

Nous téléchargerons le script pfmotion_curl.sh.

Il existe deux autres versions de bm-backup-pfsense : une version utilisant le programme wget et une version permettant de sauvegarder plusieurs pfSense (à condition que le nom d'utilisateur et le mot de passe soient identiques sur tous les pfSense à sauvegarder).

Le fichier pfmotion_curl.sh est très simple à paramétrer ; il suffit de compléter les variables suivantes :

  • PFSENSE_HOST (ligne 14) : l'adresse IP du serveur pfSense à sauvegarder
  • PFSENSE_USER (ligne 17) : le compte utilisateur pour se connecter à pfSense. Dans notre cas : sauvegarde-auto
  • PFSENSE_PASS (ligne 18) : le mot de passe associé au compte utilisateur
  • BACKUP_DIR (ligne 21) : le dossier de sauvegarde (par défaut, les sauvegardes seront enregistrées dans le dossier conf_backup du répertoire où est exécuté le script)

Exemple de résultat obtenu :

Configuration du script pfMotion-backup - pfSense - Provya


Il ne nous reste plus qu'à lancer le script :

Lancement du script pfMotion-backup - pfSense - Provya

Le script s'est déroulé avec succès. Sauvegarde effectuée


Nous pouvons automatiser le lancement de ce script, toutes les nuits par exemple, via une tâche cron.

Enfin, et pour être complet, nous proposons d'ajouter deux fonctionnalités complémentaires au script :

  • Une alerte par e-mail si la sauvegarde ne s'effectue pas correctement
  • La suppression des sauvegardes de plus de 30 jours


Alerte par e-mail si la sauvegarde ne s'effectue pas correctement


Il suffit d'ajouter le code suivant aux lignes 71 et 78 :

echo "Erreur lors de la sauvegarde de pfSense" | mail -s "Sauvegarde auto pfSense - ERREUR" mon@adresse.tld

Ce qui donnera quelque chose comme ceci :

Alerte par e-mail en cas de problème avec pfMotion-backup - pfSense - Provya


Il faut, bien-sûr, remplacer mon@adresse.tld par l'adresse e-mail destinée à recevoir les notifications.

Il faut également avoir préalablement configuré sur son serveur un programme d'envoi d'email tel que Postfix ou Sendmail.
Nous proposons un article succinct sur l'installation et la configuration de Postfix sur un serveur Ubuntu ou Debian : [Postfix] Installer et configurer Postfix pour envoyer ses e-mails depuis un serveur dédié


Suppression des sauvegardes de plus de 30 jours


Nous proposons d'ajouter le code suivant qui va s'occuper de rechercher et supprimer les fichier de plus de 30 jours se trouvant dans le dossier de sauvegarde.

# Suppression au dela de 30 jours
find "$BACKUP_DIR/" -type f -mtime +30 -exec rm {} \;

Ce code est à placer en fin de script, juste avant les deux dernières lignes :

echo
exit 0

Voilà, nous disposons d'une solution simple, pratique et efficace pour sauvegarder automatiquement notre serveur pfSense.
Merci à Mr Xhark du site Blogmotion pour sa réalisation et son partage.



Pour aller plus loin


[pfSense] Sauvegarder automatiquement sa configuration avec AutoConfigBackup
[Postfix] Installer et configurer Postfix pour envoyer ses e-mails depuis un serveur dédié
Tous nos articles classés par thème
Voir un article au hasard


Vous avez aimé cet article ? Vous cherchez du matériel de qualité ? Alors visitez notre boutique en ligne.


Retrouvez nos services et firewall pour pfSense & OPNsense



Formation pfSense     Formation OPNsense     Liste de filtrage des IP malveillantes     Firewall pro-Soho pour pfSense et OPNsense         Firewall pro-Maxi pour pfSense et OPNsense    

store.provya.fr

icon Tags de l'article :

5 commentaires

Thibault - 01/06/2022 à 15:56:36

Bonjour,

Script testé mais malheureusement, la configuration n'est pas récupéré ; l'utilisateur ne semble pas connecté (les identifiants sont bons).

Le script bloque à l'étape "# xml file contains doctype when the URL is wrong".
Le fichier obtenu à partir de "diag_backup.php" correspond au formulaire de connexion (l'hôte est donc bien accessible).

Je passe par https mais le certificat n'est pas valide ; est-ce que cela peut jouer ?

Merci d'avance pour votre aide.

Thibault

@répondre #lien

Guillaume - 02/06/2022 à 20:18:31

@Thibault :
Bonjour Thibault,

Vous utilisez quelle version de pfSense ?

La validité du certificat n'est pas vérifiée, il ne devrait donc pas y avoir de soucis de ce côté.

Utilisez-vous des espaces ou caractères spéciaux dans le mot de passe ? Si oui, il faudrait le mettre entre guillemets ou l'échapper.

Cordialement,

Guillaume
--
Provya

@répondre #lien

Thibault - 02/06/2022 à 21:25:00

@Guillaume :
Bonjour Guillaume,

J'utilise la version 2.6.0 de pfSense.
Mon mot de passe contient des minuscules, majuscules, et les caractères & et !

J'utilisais déjà les doubles quote mais je n'avais pas pensé à échapper le caractère '&' par '%26' étant donné que le caractère est transmis en paramètre.

Le backup est désormais fonctionnel, merci pour votre aide !

Thibault

@répondre #lien

icon Flux RSS des commentaires de cet article