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:
- Einen Mailserver, der als Mailrelay Mails versendet (z.B. Postfix)
Auf die Installation und Konfiguration des Mailserver gehe ich hier nicht ein. - Das Packet expect, ein Werkzeug, das interaktive Programme mit Hilfe eines Skriptes automatisieren kann.
Installation mitsudo 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.




0 Kommentare