News

Zentralisiertes Backup von pfSense Konfigurationen

Artikel von Heinz Stolz

9. November 2021

1      Einleitung

Hat man, wie wir von PHI, mehrere pfSense Firewalls im Einsatz und möchte regelmäßig die Konfigurationen sichert, kann man dies über einen kleinen Linux-Server gewährleisten.

Dafür muss der SSH-Zugriff auf der pfSense erlaubt werden. Wir empfehlen jedoch den Port für den SSH-Zugriff abzuändern von Port 22 auf zum Beispiel 7222 (siehe Punkt 3).

2      Installation und Scripte

In unserem Fall haben wir ein Ubuntu 20.04 aufgesetzt.

Nun muss man noch zwei Dinge nachinstallieren:

  1. Einen Mailserver, der als Mailrelay Mails versendet (z.B. Postfix)
    Auf die Installation und Konfiguration des Mailserver gehe ich hier nicht ein.
  2. Das Packet expect, ein Werkzeug, das interaktive Programme mit Hilfe eines Skriptes automatisieren kann.
    Installation mit
    sudo apt-get install -y expect

Dann werden noch zwei Ordner erstellt:

  • \backup-pfsense : Für die temporäre Ablage der Konigurationsfiles
  • \BackupConfigs: Als Mountpunkt für eine SMB-Freigabe
    Hier wird noch eine leere Datei namens chkfile angelegt.

Nun werden 3 Dateien benötigt.

2.1   Bash-Script

Dieses Script wird für die zentrale Steuerung benötigt und lautet in unserm Fall backup.sh

#!/bin/bash
#Read Date
datum=`date +%d-%m-%Y`
date +"Startzeit: %d.%m.%Y %H:%M"  > mail.txt
echo " " >> mail.txt
echo " " >> mail.txt
echo "Zugriff auf folgende pfSense Firewalls:" >> mail.txt
#Read each line in pfsense.list
while read line
do
	case "$line" in
		"#"*) ;;
		*) zeile=$line;;
	esac
    #Split each line into IP, Name, Password
    IFS=","
	set - $zeile
	if [ -n "$zeile" ]; then
		#Open pfsense-backup.sh with Parameters (File to establish connection to each pfSense and transfer Running Config to tftproot folder on local host)
		#1. IP-Address of the pfSense,2. Name of the pfSense, 3. Password, 4. Date
		date +"$2: %d.%m.%Y %H:%M"  >> mail.txt
		/Path-To-Scripts/pfsense-backup.sh $1 $2 $3 $datum
		sleep 1
	fi
done < /Path-To-Scripts/pfsense.list
echo " " >> mail.txt
echo " " >> mail.txt
echo "Folgende Dateien wurden erstellt:" >> mail.txt
echo " " >> mail.txt
#List files in tftproot folder on local host and write it to mail.txt file
ls -ltr /backup-pfsense/ >> mail.txt
echo " " >> mail.txt
#Mount Backup Folder
mount -t cifs -o [SMB-Freigabe\ /BackupConfigs
#Check, if the mount point exist
file="/BackupConfigs/chkfile"
if [ -f "$file" ]
then
     #Delete all Configs older than 60 days (2 months)
     echo "Folgende Dateien älter als 2 Monate wurden gelöscht:" >> mail.txt
     find /BackupConfigs/*.xml -mtime +60 -print -exec rm {} \; >> mail.txt
     #Move Configs
     mv /backup-pfsense/*.xml /BackupConfigs
     sleep 5
     umount /BackupConfigs
else
     figlet "ERROR" >> mail.txt
     echo "***** MOUNT-PUNKT NICHT ERREICHBAR - DATEIEN NICHT VERSCHOBEN ****" >> mail.txt
fi
date +"Endzeit: %d.%m.%Y %H:%M"  >> mail.txt
#Send Email
mail -s "Backup pfSense Firewalls" "[mail@server.com]" < mail.txt

2.1   Expect-Script

Dieses Script wird benötigt, um einen SCP Befehl an die entsprechende pfSense zu senden namens pfsense-backup.sh.

#!/usr/bin/expect
set timeout 20
#Set Variables
#set var_IP [lindex $argv 0]
set var_Name [lindex $argv 1]
set var_Pass [lindex $argv 2]
set var_Datum [lindex $argv 3]
spawn scp -P [Port für SSH] [lindex $argv 0]:/cf/conf/config.xml /backup-pfsense/config-$var_Datum-$var_Name.xml
expect {
  -re ".*es.*o.*" {
    exp_send "yes\r"
    exp_continue
  }
  -re ".*sword.*" {
    exp_send "$var_Pass\r"
  }
}
expect eod
exit

2.1   Eine Liste der zu sichernden pfSense-Systeme

Diese Datei wird vom ersten Script Zeile für Zeile ausgelesen.

#IP-Adress,Name,Password
[IP-Adresse pfSense 1],[Name pfSense 1],[Passwort pfSense1]
[IP-Adresse pfSense 2],[Name pfSense 2],[Passwort pfSense2]

3      Konfiguration pfSense

Zuerst muss man den SSH-Zugriff auf die pfSense erlauben.

Dazu geht man zu System -> Advanced

Dort geht man zum Abschnitt Secure Shell und klickt auf ‚Enable Secure Shell‘ und stellt den SSH Port ein (Standard: 22)

Nun muss man nur noch in den Regeln diesen Port öffnen auf die Firewall

4      SSH-Zugriff testen

Man gebe an dem in Punkt 2 erstellten Server folgenden Befehl ein

sudo ssh [IP der pfSense] -p [SSH-Port aus Punkt 3] -l admin

Eventuell muss man mit ‚Yes‘ den SSH-Key einmalig bestätigen.

Dann geht man in das Verzeichnis, in dem die Scripte liegen und führt das backup.sh Script aus. Hat man den Mail-Relay konfiguriert, dann bekommt man auch eine Mail.

5      Cronjob

Wenn man möchte, kann man dann noch einen Cronjob für das automatische Backup einpflegen.

Weitere News

Neues Windows Betriebssystem

Am 04. Oktober 2021 veröffentlichte Windows das neue Windows 11 Betriebssystem. Ein Upgrade von Windows 10 ist kostenlos und kann durchgeführt werden, so fern die Mindestvoraussetzungen gegeben sind. Was ändert sich?Nicht nur das neue Design, das Apple OS sehr ähnlich...

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Beitragsarchiv

Email

Kontakt

13 + 3 =