news

Zentralisiertes Backup von pfSense Konfigurationen

Artikel von Rolf Cremer

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.

More News

Nachhaltige Apps

Nachhaltige Apps

Eine Palette voller Apps Vor noch nicht einmal 10 Jahren gab es Smartphones in ihrer heutigen Form noch gar nicht, und heute ist ein Leben ohne sie für die meisten Menschen unvorstellbar. Hier ein paar nützliche Apps die in Sachen Nachhaltigkeit und Sparen aktuell...

iSCSI für die VMware Umgebung

iSCSI für die VMware Umgebung

-iSCSI Einbinden von einer Synology NAS in das VMware VCenter- Das iSCSI LUN einbinden in einer VMware Umgebung ist nicht schwierig aber gewisse Schritte müssen dafür durchgeführt werden. Es gibt viele Anleitungen im Internet, leider sind viele unvollständig und...

Module blinken Orange im Aruba 5400er Switche

Module blinken Orange im Aruba 5400er Switche

Viele verzweifeln an den HP Aruba 5400er Switche sobald ein Modul ausfällt oder ein neues Modul eingebaut werden muss. Da die meisten Module orange blinken und nicht erkannt werden. Der Switch zeigt dann in diesem Steckplatz einen Fehler Test an. Nach langer Recherche...

0 Comments

Submit a Comment

E-Mail

Contact

9 + 8 =

WordPress Cookie Plugin by Real Cookie Banner