# Backup do pfSense

### Introdução 

Este documento destina-se a demonstração dos procedimentos de implementaçao do backup das configurações de um servidor pfSense. A efetivação destes procedimentos permite rápida restauração de um servidor pfSense com problemas ou implantação de um servidor baseado nas configurações de um anterior.

[![esquema_Backup_gateway_SUAP.png](https://wiki.ifpe.edu.br/uploads/images/gallery/2018-09-Sep/scaled-840-0/esquema_Backup_gateway_SUAP.png)](https://wiki.ifpe.edu.br/uploads/images/gallery/2018-09-Sep/esquema_Backup_gateway_SUAP.png)

O backup é realizado conforme a figura acima. Este método de backup é utilizado quando não é possível instalar um cliente diretamente no **host** que sofrerá o backup dos dados. Neste caso, um host intermediário (**Backup-gateway**), este com capacidade de sofrer backup dos dados, realiza a cópia do pfSense para o seu disco local. Em seguida, de acordo com o agendamento, o **servidor de backup** realiza o backup dos dados copiados no host intermediário.

Este método é baseado em uma ferramenta open source que realiza a cópia dos dados do pfSense de forma otimizada via comunicação HTTPS. A ferramenta conecta-se ao pfSense com as credenciais e em seguida realiza o download das configurações do pfSense.

### Backup do pfSense

A máquina **Backup-gateway** tem um S.O do tipo centOs versão 7.3.1611. A partir desta máquina e com um usuário com permissões de administrador:

```updates
$ sudo yum check-updates
$ sudo yum install epel-release
$ sudo yum install python-pip
$ sudo pip install BeautifulSoup4
```

Agora realize o download do código python a ser utilizado. Coloque este código em **/root**, por exemplo.:

```baixar
 $ sudo wget -c https://raw.githubusercontent.com/edgauthier/pfsense-backup/master/pfsense-backup.py
 $ sudo cp pfsense-backup.py /root/pfsense-backup.py
```

A utilização do código é da seguinte forma:

```
Usage: pfsense-backup.py OPTIONS

OPTIONS:

    -h | --help

    -s <server url> | --server <server url>
        The base URL for the pfSense installation.
        Example: https://pfsense.example.com
        
    -t <seconds> | --timeout <seconds>
        Timeout for network requests.

    -u <username> | --username <username>
    
    -p <password> | --password <password>

    -d | --directory <directory>
        Defaults to current directory.

    -r | --rrd
        Includes RRD data with the backup.

    -f | --file <file>
        Defaults to 'pfsense-backup.xml'
```

Um exemplo de uso é o seguinte::

`$ ./pfsense-backup.py -s https://172.20.254.100:443 -t 5 -u admin -p senha123 -r -f arquivo_backup_pfSense.xml`

Para uso em rotinas, fica a sugestão do seguinte script:

```script
#!/bin/bash

data=$(/bin/date +%Y-%m-%d)
hora=$(/bin/date +%X)

DIR=/backup/pfsense/

host1="PFsense"
user1=admin
passwd1=senha123
server1=172.20.254.100
FILE1=backup_"$host1"-$data.xml

method=https
port=443
timeout=5

logFile=/var/log/backup-pfSense.log

# Funcao
writeLog(){
   echo -e "$data $hora - $1\n" >> $logFile
}

backup(){
/root/pfsense-backup.py -s $method://$1:$port -t $timeout -u $2 -p "$3" -r -f "$4"
}

check(){
if [ -e $1 ]; then
        writeLog "Cópia de $2 realizada com sucesso!"
else
        writeLog "Cópia de $2 não realizada, verificar log."
fi
}

writeLog "Iniciando rotina de cópia dos dados"

mkdir -p $DIR
cd $DIR

backup $server1 $user1 $passwd1 $FILE1
writeLog "Realizando a cópia remota dos dados do host: $host1"
check $FILE1 $host1

writeLog "Encerrando rotina..."
```

###  Referências

[https://github.com/edgauthier/pfsense-backup](https://github.com/edgauthier/pfsense-backup)