Automatizando Backup PFSense


No tutorial de hoje veremos como fazer o backup automático do seu firewall pfsense. Quem trabalha com o sistema sabe que existe uma ferramenta para isso, porém ela é paga. Aqui apresentarei uma solução alternativa utilizando o comando SCP e o pacote Cron.

 



 

Vamos ao cenário.

 

Digamos que você tenha vários servidores PFSense espalhados geograficamente e precise concentrar um backup de cada máquina em sua matriz ou escritório principal. Nessa matriz nós teremos um servidor linux que receberá esses arquivos, dessa forma nós não precisamos ter um Ip público em cada unidade, apenas na matriz. Sendo assim, todos os dias cada servidor firewall de cada unidade enviará seu arquivo de configuração para a matriz onde ficarão a sua disposição. A partir dai, você pode incluir esse diretório em sua rotina de backup sem problemas. Para enviarmos o backup de uma unidade para outra será necessário que o seu servidor linux seja acessível remotamente através de ssh, se você não souber com fazer isso, aprenda aqui.

 

Para o tutorial a seguir utilizaremos duas máquinas virtuais, uma com o Ubuntu Server 14.04.4 e a outra com o PFSense 2.3.2. Esse tutorial se aplica a qualquer sistema operacional dos chamados Unix Like. Você apenas precisará modificar um ou dois comandos.

 

Vamos a primeira parte do tutorial, onde preparamos o ambiente que receberá os arquivos.

 

Todos os comandos presentes nesse tutorial serão realizados com o usuário root.

 

1 – Acesse seu servidor e crie o diretório que receberá os arquivos através do comando mkdir. No meu caso ficará assim:

 

# mkdir /data/bkppfsense/server1

 

Você pode usar uma pasta já existente, porém por medidas de segurança o dono dessa pasta deve ser um usuário que não seja o root do sistema. O comando SCP faz a cópia do arquivo via ssh, e como por padrão o ssh não aceita conexão do root, precisamos acessar através de outro usuário, sendo assim, esse usuário tem que ser o proprietário do diretório.

 

2 – Altere o proprietário do diretório criado através do comando chown. No meu caso ficará assim:

 

# chown marcelo.root -R /data/bkppfsense/

 

Dessa forma deixaremos o usuário marcelo como dono de todos os diretórios dentro do diretório bkppfsense. Porém os usuários pertencentes ao grupo root também serão donos.

 

Agora vamos criar o arquivo onde ficarão armazenadas as chaves criadas nos servidores que enviarão os arquivos, essas chaves serão a forma de autenticação no nosso servidor linux. O arquivo deve ficar no diretório home do usuário que colocamos como dono dos diretórios onde ficarão os arquivos. No meu caso ficará em /home/marcelo/.ssh/authorized_keys. Autorized_keys é o nome do arquivo de texto onde colocaremos cada chave. Caso o diretório .ssh ainda não exista, basta que seja criado.

 

Importante: Caso precise alterar o nome do arquivo onde ficarão as chaves ou o nome da pasta .ssh, é possível faze-lo editando o arquivo de configuração do sshd em /etc/ssh/sshd_config

 

Para criar o arquivo utilize o editor de texto de sua preferência, no meu caso utilizarei o Midnight Commander através do comando mcedit.

 

# mcedit /home/marcelo/.ssh/authorized_keys

 

Digite qualquer letra e salve, vamos editar corretamente esse arquivo quando criarmos as chaves.

 

Caso você queira usar o mc, mas não o tenha instalado no servidor, instale a partir do comando:

 

# apt-get install mc

 

Se por algum motivo o pacote não for encontrado, tente atualizar sua lista de repositórios através do comando:

 

# apt-get update

 

Agora que estamos prontos para receber as chaves e os arquivos, vamos acessar o servidor PFSense e começar as configurações referentes a ele.

 

Primeiro acessaremos o servidor via ssh e escolheremos a opção 8 – Shell

 

Agora criaremos nossa chave através do comando:

 

# ssh-keygen

 

O sistema perguntará em qual arquivo deseja salvar a chave, aperte enter para manter o padrão. Depois pedirá uma passphrase para a chave, aperte enter para deixar em branco, aperte enter novamente na confirmação. Para funcionar corretamente é necessário que apenas o root possa ler esse arquivo, para isso utilize o comando:

 

# chmod 400 /root/.ssh/id_rsa.pub

 

Precisamos agora copiar o conteúdo desse arquivo criado para aquele arquivo authorized_keys que criamos anteriormente. Para mim, a forma mais fácil de fazer isso é:

 

1 – Acesse a interface web do pfsense, vá em diagnostics e escolha a opção Edit File

 

bkp01

 

2 – Clique em browse, localize o caminho /root/.ssh e clique no arquivo id_rsa.pub.

 

bkp02

 

Copie a linha completa desse arquivo, volte ao servidor linux, edite novamente o arquivo authorized_keys, apague o que escreveu anteriormente e cole o conteúdo copiado do arquivo do servidor pfsense. Caso tenha optado por utilizar o mc, digite o comando:

 

# mcedit /home/marcelo/.ssh/authorized_keys

 

Para colar o conteúdo aperte shift + insert e salve o arquivo.

 

Esse arquivo authorized_keys pode conter todas as chaves de todos os servidores pfsense, desde que estejam separadas por linhas.

 

3 – Ainda em Edit File, clique em Browse novamente e encontre o caminho /etc/ssh/ e clique no arquivo ssh_config.

 

bkp03

 

4 – Procure as linhas destacadas na imagem abaixo e apague o carácter # no inicio de cada uma. Clique em Save

 

bkp04

 

5 – Agora precisamos reiniciar o serviço do ssh do PFSense. A maneira mais fácil é clicando em Status, e depois em Services.

 

bkp05

 

6 – Localize a linha do SSHD e reinicie o serviço.

 

bkp06

 

 

Dessa forma já estamos prontos para realizar o comando SCP para testarmos. Acesse o pfsense novamente via ssh e digite o comando:

 

# scp -i /root/.ssh/id_rsa.pub /cf/conf/config.xml marcelo@10.1.1.10:/data/bkppfsense/server1/config`date +%Y-%m-%d-%H.%M.%S`.xml 

 

onde:

 

SCP é o comando para cópia de arquivo através do shell

 

-i indica que a autenticação será através da chave criada.

 

/root/.ssh/id_rsa.pub é o arquivo que contém a chave no servidor que está enviando o xml. Nesse caso, nosso PFSense.

 

/cf/conf/config.xml é o arquivo de configuração do pfsense que será enviado para o linux.

 

marcelo é o nome do usuário que colocamos como proprietário das pastas que receberão os arquivos.

 

@10.1.1.10 é o ip do meu servidor linux. Onde ficarão os arquivos .xml.

 

:/data/bkppfsense/server1/ é o local para onde o arquivo será copiado no servidor linux

 

config`date +%Y-%m-%d-%H.%M.%S`.xml é o nome do arquivo com as variáveis que serão substituídas pela data e hora de criação do arquivos. As variáveis são importantes para que você saiba de quando é aquele backup.

 

Rodando manualmente ele deve perguntar a primeira vez se você confia nesse host, responda sim. Também pedirá a passphrase, apenas aperte enter pois deixamos em branco. Quando automatizarmos esse processo ele funcionará normalmente sem essas confirmações.

 

A parte da cópia do arquivo já está pronta, agora vamos a automatização em si. Para isso criaremos um script com o comando que acabamos de rodar. Vamos sempre da maneira mais fácil.

 

1 – Acesse novamente a opção edit file, no campo onde fica o caminho que estamos acessando digite /etc/xmlbkp.sh. No conteúdo do arquivo digite o nosso comando scp. Clique em Save. Será criado um arquivo conforme os campos preenchidos.

 

bkp07

 

2 – Agora daremos permissão de executável a esse arquivo. Através do menu Diagnostics – Command Prompt ou acessando o pfsense novamente pelo ssh utilize o comando:

 

# chmod +x /etc/xmlbkp.sh

 

Rode o script para testarmos através do comando:

 

# /etc/./xmlbkp.sh  

 

Se estiver tudo certo, basta instalarmos o pacote Cron no pfsense e adicionarmos uma linha com o conteúdo /etc/./xmlbkp.sh  para ser executado pelo usuário root diariamente no horário de nossa preferencia. No meu caso ficou assim:

 

bkp08

 

Dessa forma, todos dias as 18:15 o meu servidor pfsense enviará para meu servidor linux o arquivo config.xml do pfsense.

 

Quanto ao restore, eu ja testei (várias vezes infelizmente) e funciona. Vamos aprender também como fazer. Copie o arquivo .xml desejado para o computador onde você acessa a interface web do pfsense e realize os passos abaixo:

 

1 – Acesse o menu diagnostics e clique em Backup & Restore

 

bkp09

 

2- Escolha se deseja fazer o backup completo do sistema ou de alguma área específica do xml, como por exemplo, Firewall Rules. Selecione o arquivo e clique em restore configuration.

 

bkp10

 

Importante: Caso esteja realizando o restore completo e o sistema encontrar placas de rede com nomenclaturas diferentes do original, ele perguntará qual placa é a interface WAN, LAN e assim por diante para todas as interfaces configuradas no seu sistema.

 

Espero que tenha ajudado, qualquer dúvida, erro, sugestão ou correção, por favor, deixem um comentário e eu entrarei em contanto.

 

Obrigado pela atenção de todos.