Présentation
Dans cet article nous allons mettre en place une sauvegarde automatique de la configuration de pfSense depuis un environnement Windows, pour ce faire nous passerons par l’utilisation d’un petit programme et un script en PowerShell. La sauvegarde aura un roulement sur 30 jours avec suppression automatique des fichiers plus anciens et notifications à la fin de traitement.
Ainsi si votre machine connait un problème ou si vous vous êtes trompé dans la nouvelle configuration que vous avez fait, vous pourrez facilement revenir en arrière.
Configuration
L’utilitaire est le suivant : pfSenseBackup
Une fois que vous l’avez récupéré, placez-le au même endroit que le script qui va suivre.
Très pratique, il suffit d’une ligne de commande pour pouvoir sauvegarder l’intégralité de la configuration de notre pfSense, par contre attention car le nom de compte et son mot de passe pour effectuer la connexion à l’interface de pfSense seront en clair dans le script. Je vous recommande tout d’abord de créer un utilisateur spécifique avec uniquement un droit d’accès à cette page, ainsi il n’y aura pas de risque si ce compte est compromis.
Et voici le script de mon cru:
# # Backup config PfSense # # Auteur : Nathan BOQUESTAL # Website : https://www.nboquestal.fr # Date : 15/06/2018 # Version : 1.2 (correction suppression fichiers) # 1.1 # ## VARIABLES ## $ComputerName = Get-content env:computername $To = "votre email" $From = "$computername@domaine.tld" $Subject = "Backup Config PfSense" $BodyNOK = "<p>Backup config PfSense: <strong><font color=red>[PAS OK]</strong><br><font color=black>Le serveur suivant n'est pas en ligne:<font color=red></p>" $SMTPServer = "votre serveur smtp" $EncodingMail = New-Object System.Text.utf8encoding $ToolPath = "emplacement_utilitaire\pfSenseBackupv2.4.3\pfSenseBackup.exe" $User = "compte pfsense backup" $Password = "mot de passe compte pfsense backup" $PfsenseIP = "adresse serveur pfSense" $FilePath = "dossier_destination_fichier_sauvegarde" ## Test connectivite if (Test-Connection -ComputerName "$PfSenseIP" -Count 1 -quiet) { Write-Host "$PfSenseIP en ligne" -ForegroundColor Green ## Backup config PfSense Write-Host "Sauvegarde de la configuration de PfSense" -ForegroundColor Green & $ToolPath -u $User -p $Password -s $PfsenseIP -norrd -o $FilePath ## Supprimer les fichiers superieur a 30 jours if ($OutdatedConfigs = Get-ChildItem -Path $FilePath -Recurse | Where-Object CreationTime -lt (Get-Date).AddDays(-30)) { $BodyOK = "<p>Backup config PfSense: <strong><font color=green>[OK]</strong><font color=black><br>Suppression config +30 jours: <strong><font color=green>[OK]</strong><font color=black><br>Fichier supprimé:<font color=red> $OutdatedConfigs</p>" Write-Host "Suppression des sauvegardes de plus de 30 jours" -ForegroundColor Green ForEach ($OutdatedConfig in $OutdatedConfigs) { Write-Host "Deleting: $($FilePath)\$($OutdatedConfig.Name)" -ForegroundColor Green Remove-Item "$($FilePath)\$($OutdatedConfig.Name)" } } else { Write-Host "Pas de fichiers à supprimer" -ForegroundColor Red $BodyOK = "<p>Backup config PfSense: <strong><font color=green>[OK]</strong><font color=black><br>Suppression config +30 jours: <strong><font color=red>[PAS DE FICHIERS]</strong></p>" } ## Notification Write-Host "Envoi email" -ForegroundColor Green Send-MailMessage -to $To -From $From -Subject $Subject -BodyAsHtml "$BodyOK" -SmtpServer $SMTPServer -Encoding $EncodingMail } else { Write-Host "$PfSenseIP pas en ligne" -ForegroundColor Red Send-MailMessage -to $To -From $From -Subject $Subject -BodyAsHtml "$BodyNOK $PfSenseIP" -SmtpServer $SMTPServer -Encoding $EncodingMail }
Quelques explications:
- Nous commençons par faire un test de connexion afin de vérifier si le serveur pfSense est bien en ligne
- Ensuite nous lançons l’utilitaire pour effectuer la sauvegarde
- Puis nous vérifions si des fichiers vieux de 30 jours et plus sont présents et nous les supprimons
- Enfin les notifications par email sont envoyées avec les résultats du déroulement du script
N’oubliez pas d’adapter les variables avec vos valeurs 😉
Vous pouvez maintenant créer une tâche planifiée qui s’exécutera une fois par jour, et qui lancera le script.
Si vous avez des questions ou besoin d’aide, n’hésitez pas à laisser un commentaire ou à me contacter.