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 Comments