Criando Novo Cliente FreeBSD no Servidor Bacula com Criptografia

Vamos criar a estrutura para um cliente FreeBSD, pois até o momente somente temos a estrutura para cliente Linux e Windows.

Vamos criar o padrão para o job de um cliente FreeBSD.

vim /etc/bacula/jobsdef/default-freebsd.conf
# JOB PADRAO PARA O BACULA SERVER #
JobDefs {
    Name = "Default-FreeBSD"                          # Nome do Job Padrao
    Type = Backup                                   # Tipo de Job (Backup, Restore, Verificacao)
    Level = Incremental                             # Nivel do Job (Full, Incremental, Diferencial)
    Client = bacula-fd                             # Nome do Cliente FD
    FileSet = "Default-FreeBSD"                       # File Set Definido para Esse Job
    Schedule = "Monthly-Cycle-FreeBSD"                # Agendamento Definido para Esse Job
    Storage = Default-Storage                       # Define Storage
    Messages = Standard                             # Nivel de mensagens
    Pool = Default-Pool                             # Define a Pool
    Priority = 10                                   # Qual o nivel de Prioridade
    Write Bootstrap = "/var/lib/bacula/%c.bsr"      # Arquivo gerado pelo Bacula para armazenar informacoes de backups feitos em seus clientes.
    Allow Mixed Priority = yes                      # this means a high priority job will not have to wait for other jobs to finish before starting
    # AS OPCOES ABAIXO EVITAM QUE SEJAM DUPLICADO JOBS NO SERVIDOR, CASO TENHA UM JOB DUPLICADO O MESMO E CANCELADO
    Allow Duplicate Jobs = no                       # Permite Jobs Duplicados
    Cancel Lower Level Duplicates = yes             # Cancela niveis inferiores duplicados
}

Agora vamos criar os agendamentos padrões para os cliente.

Vamos criar o agendamento mensal.

vim /etc/bacula/schedules/monthly-cycle-freebsd.conf
# AGENDAMENTO PADRAO DO BACULA - CICLO MENSAL DE BACKUP #
Schedule {
    Name = "Monthly-Cycle-FreeBSD"                        # Ciclo Semanal de Backup
    Run = Level=Full 1st sun at 09:00                   # Backup Full no Primeiro Domingo do Mes as 23:05 hrs
    Run = Level=Incremental mon-sat at 19:00            # Backup Incremental de Seg. a Sabado as 23:05 hrs
}

Vamos criar o agendamento semanal.

vim /etc/bacula/schedules/weekly-cycle-freebsd.conf
# AGENDAMENTO PADRAO DO BACULA - CICLO SEMANAL DE BACKUP #
Schedule {
    Name = "Weekly-Cycle-FreeBSD"                        # Ciclo Semanal de Backup
    Run = Level=Full sun at 09:00                       # Backup Full no Primeiro Domingo do Mes as 23:05 hrs
    Run = Level=Incremental mon-sat at 19:00            # Backup Incremental de Seg. a Sabado as 23:05 hrs
}

Agora vamos criar o fileset padrão para os clientes FreeBSD

vim /etc/bacula/filesets/default-freebsd.conf
#Configuration file for default-linux
FileSet {
        Name = "Default-FreeBSD"                                       # Nome do FileSets
        # Arquivos que serao incluidos para serem copiados ao backup
        Include {
                Options {
                        signature = SHA1
                        compression = GZIP
                        verify = pin1
                        onefs = no
                }
                File = /etc
                File = /root
                File = /var/log
                File = /home
                File = /usr/share
                File = /usr/local/etc
                File = /usr/local/share
                }
# Arquivos que serao ignorados ao backup
        Exclude {
                File = /var/db/bacula
                File = /proc
                File = /tmp
                File = /.journal
                File = /.fsck
                }
}

Agora vamos criar o fileset que sera utilizado por o cliente de exemplo, vamos criar um fileset para um servidor web.

vim /etc/bacula/filesets/webserver-freebsd.conf
#Configuration file for default-linux
FileSet {
        Name = "WebServer-FreeBSD"                                       # Nome do FileSets
# Arquivos que serao incluidos para serem copiados ao backup
        Include {
                Options {
                        signature = SHA1
                        compression = GZIP
                        verify = pin1
                        onefs = no
                }
                File = /etc
                File = /root
                File = /var/log
                File = /home
                File = /usr/share
                File = /usr/local/etc
                File = /usr/local/share
                File = /usr/local/www
                }
# Arquivos que serao ignorados ao backup
        Exclude {
                File = /var/db/bacula
                File = /proc
                File = /tmp
                File = /.journal
                File = /.fsck
                }
}

Vamos criar o arquivo de configuração para gerar as chaves para o cliente

vim /etc/bacula/keys/server.cnf 
[req]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[req_dn]
C=BR
ST=Parana
L=Curitiba
O=GPB
OU=IT
CN=freebsd02.douglasqsantos.com.br
emailAddress=douglas.q.santos@gmail.com

[cert_type]
nsCertType = server

[v3_ca]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints=CA:true

Agora vamos criar um diretório para armazenar as chaves dos clientes, note que o freebsd02 é o hostname da máquina que estamos criando a configuração.

mkdir -p /etc/bacula/keys/clients/freebsd02/keys

Agora vamos acessar o diretório que vai armazenar as chaves

cd /etc/bacula/keys/clients/freebsd02/keys

Agora precisamos gerar a key rsa do nosso cliente.

openssl genrsa -out freebsd02-fd.key 2048

Agora vamos assinar a chave do cliente

openssl req -new -x509 -out freebsd02-fd.cert -key freebsd02-fd.key -config /etc/bacula/keys/server.cnf -extensions v3_ca

Agora vamos inserir as duas chaves em um arquivo

cat freebsd02-fd.key freebsd02-fd.cert > freebsd02-fd.pem

Agora vamos copiar a chave master.cert para a nosso cliente

cp -Rfa /etc/bacula/keys/master.cert .

Agora vamos a configuração do cliente

vim /etc/bacula/keys/clients/freebsd02/bacula-fd.conf 
# LIST DIRECTORS WHO ARE PERMITTED TO CONTACT THIS FILE DAEMON
Director {
    Name = bacula-dir
    Password = "hNqN7izeRCRLTcsXUUcoAdaaRpVcg2mnvy1"
}

# RESTRICTED DIRECTOR, USED BY TRAY-MONITOR TO GET THE
#   STATUS OF THE FILE DAEMON
Director {
    Name = bacula-mon
    Password = "jgNDYGHmez8tsFUyIPdRSfEu9K7yrNIgms9"
    Monitor = yes
}

# "GLOBAL" FILE DAEMON CONFIGURATION SPECIFICATIONS
FileDaemon {
    Name = freebsd02-fd
    FDport = 9102
    WorkingDirectory = /var/db/bacula
    Pid Directory = /var/run
    Maximum Concurrent Jobs = 20
    FDAddress = 0.0.0.0
    PKI Signatures = Yes
    PKI Encryption = Yes
    PKI Keypair = "/usr/local/etc/bacula/keys/freebsd02-fd.pem"
    PKI Master Key = "/usr/local/etc/bacula/keys/master.cert"
}

# SEND ALL MESSAGES EXCEPT SKIPPED FILES BACK TO DIRECTOR
Messages {
    Name = Standard
    director = bacula-dir = all, !skipped, !restored
}

Agora vamos criar o cliente para o servidor bacula

vim /etc/bacula/clients-jobs/freebsd02-jobs.conf 
#Configuration to Jobs on freebsd02
Job {
    Name = "FreeBSD02-Backup"                           # Nome do Job para Backup do Cliente
    JobDefs = "Default-FreeBSD"                             # JObDefs Definido
    Client = freebsd02-fd                                # Cliente fd
    Storage = FreeBSD02-Storage
    Pool = FreeBSD02-Pool
    FileSet = "WebServer-FreeBSD"
    Schedule = "Weekly-Cycle-FreeBSD"
}

Client {
    Name = freebsd02-fd                                        # Cliente fd
    Address = 172.17.0.93
    Password = "hNqN7izeRCRLTcsXUUcoAdaaRpVcg2mnvy1"     # Senha do Director do Bacula que foi configurado no cliente na primeira sessão Director
    Maximum Concurrent Jobs = 10 #Habilita o cliente a executar mais de um job por vez
    @/etc/bacula/clients-jobs/weekly-client  # Arquivo onde contem informacoes sobre o cliente.
}

Agora vamos criar a configuração do device para o nosso cliente

vim /etc/bacula/devices/freebsd02-device.conf 
#Configuration to Device on freebsd02
Device {
    Name = FreeBSD02-Device               # Nome do Device
    Media Type = File                       # Tipo de Midia (DVD, CD, HD, FITA)
    Archive Device = /srv/backup/freebsd02  # Diretorio onde serao salvos os volumes de backup
    LabelMedia = yes;                       # Midias de Etiquetamento do Bacula
    Random Access = Yes;                    #
    AutomaticMount = yes;                   # Montar Automaticamente
    RemovableMedia = no;                    # Midia Removivel
    AlwaysOpen = no;                        # Manter Sempre Aberto
}

Agora vamos configurar o pool para o cliente

vim /etc/bacula/pools/freebsd02-pool.conf 
#Configuration for Pool client01
Pool {
    Name = FreeBSD02-Pool             # o Job de Backup por padrao aponta para o 'File'
    Pool Type = Backup                # O Tipo do Pool = Backup, Restore, Etc.
    Recycle = yes                       # Bacula can automatically recycle Volumes
    AutoPrune = yes                     # Prune expired volumes
    Volume Retention = 8 days          # Retencao de Volume = 1 Mes
    Volume Use Duration = 7 days      # Duracao de um volume aberto
    Maximum Volume Bytes = 20 Gb        # Tamanho maximo de um volume
    Maximum Volumes      = 10           # Volume Bytes X Volumes <= Dispositivo de backup
    LabelFormat          = "volume-freebsd02-"     # Nome Default do Volume
}

Agora vamos criar o storage para o cliente

vim /etc/bacula/storages/freebsd02-storage.conf 
#Configuration for storage client01
Storage {
    Name = FreeBSD02-Storage
    Address = 172.17.0.90                            # Pode ser usado Nome ou IP
    SDPort = 9103                                      # Porta de Comunicação do Storage
    Password = "aLobW0dx5UrSru5JPDxdKCx5e9QPCN6hQU5"                       # Senha Storage Bacula
    Device = FreeBSD02-Device                        # Device de Storage
    Media Type = File                                  # Tipo de Midia (Fita, DVD, HD)
    Maximum Concurrent Jobs = 10                       # Num. Maximo de Jobs executados nessa Storage.
}

Vamos criar o bconsole para o nosso cliente

vim /etc/bacula/keys/clients/freebsd02/bconsole.conf 
#CONFIGURATION FOR BCONSOLE
Director {
    Name = bacula-dir
    DIRport = 9101
    address = 172.17.0.90
    Password = "XHJhBJpspiuCWMzmQTI6ucifzHoVe9UQ0hy"
}

Agora vamos criar o diretório para armazenar os backups do cliente

mkdir /srv/backup/freebsd02/

Agora vamos ajustar as permissões

chown -R bacula:tape /srv/backup/freebsd02/
chown -R bacula:bacula /etc/bacula

Agora vamos criar um pacote tar da configuração do nosso cliente

Vamos acessar o diretório do cliente

cd /etc/bacula/keys/clients/freebsd02

Agora vamos gerar o pacote

tar -cJvf freebsd02.tar.xz *

Agora vamos recarregar a configuração do bacula

/etc/init.d/bacula-dir force-reload
/etc/init.d/bacula-sd force-reload

Referências