Backups Blindados no Linux: Como Usar o Restic com Criptografia e Automação

Manter cópias de segurança confiáveis é o pilar mais crítico da administração de sistemas e da segurança cibernética pessoal. Embora utilitários tradicionais como o tar e o rsync ainda tenham seu espaço, eles carecem de recursos essenciais para ambientes modernos, como criptografia autenticada por padrão e deduplicação nativa em nível de bloco. Se você transfere dados não criptografados para a nuvem ou armazena terabytes de dados redundantes, sua infraestrutura está vulnerável e consumindo recursos desnecessários.

Para resolver esse gargalo, o Restic se consolidou como uma das ferramentas de código aberto mais robustas do ecossistema Linux e BSD. Escrito em Go, ele trata cada backup como um snapshot criptografado de estado completo, verificando a integridade dos blocos por meio de criptografia AES-256 e assinaturas Poly1305. A seguir, detalhamos a configuração completa de um pipeline de backup blindado, automatizado com systemd e protegido contra falhas operacionais.

1. Instalação e Preparação do Repositório Seguro

O Restic está presente nos repositórios oficiais das principais distribuições Linux, mas é recomendável utilizar versões recentes para usufruir de melhorias de performance de compressão introduzidas nas versões mais novas.

# No Debian / Ubuntu
sudo apt update && sudo apt install restic -y

# No Fedora / RHEL
sudo dnf install restic -y

# No Arch Linux
sudo pacman -S restic

O conceito central do Restic é o repository (repositório), o local onde os dados deduplicados residem. Ele pode ser um disco externo montado localmente, um servidor SFTP ou um bucket S3/B2 compatível, como o Backblaze B2. Para este guia, estruturaremos um repositório local protegido em /mnt/backups/restic-repo.

Nunca passe senhas como argumento em texto puro na linha de comando, pois elas ficam visíveis no histórico do shell e no comando ps. Em vez disso, gerencie a chave via arquivo de credencial com permissões restritas:

# Gerar chave aleatória e salvar em arquivo seguro
sudo mkdir -p /etc/restic
openssl rand -base64 32 | sudo tee /etc/restic/backup-password.key > /dev/null
sudo chmod 600 /etc/restic/backup-password.key

# Inicializar o repositório criptografado
sudo restic init --repo /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key

2. Script de Execução com Filtros de Exclusão

Para evitar desperdício de espaço com caches temporários, arquivos de paginação e sockets, criamos um arquivo de exclusão em /etc/restic/excludes.txt contendo caminhos que devem ser ignorados durante a varredura:

/proc
/sys
/dev
/run
/tmp
/var/tmp
/var/cache
/home/*/.cache
**/.Trash*

Em seguida, criamos o script executável principal em /usr/local/bin/restic-backup.sh. Esse script lida com a execução do snapshot, rotação e manutenção da integridade:

#!/usr/bin/env bash
set -euo pipefail

export RESTIC_REPOSITORY="/mnt/backups/restic-repo"
export RESTIC_PASSWORD_FILE="/etc/restic/backup-password.key"

echo "[$(date)] Iniciando snapshot do sistema..."

# Executa o backup com exclusões e compressão equilibrada
restic backup \
    --exclude-file=/etc/restic/excludes.txt \
    --one-file-system \
    --tag system-backup \
    /etc /home /var/www

echo "[$(date)] Aplicando política de retenção (forget & prune)..."
restic forget \
    --tag system-backup \
    --keep-daily 7 \
    --keep-weekly 4 \
    --keep-monthly 6 \
    --prune

echo "[$(date)] Verificando integridade básica do repositório..."
restic check --read-data-subset=5%

echo "[$(date)] Processo de backup concluído com sucesso."

Defina as permissões corretas para que apenas o usuário root tenha acesso de execução e leitura do script:

sudo chmod 700 /usr/local/bin/restic-backup.sh

3. Automação Robusta via Systemd Timer

Diferente do cron convencional, os temporizadores do systemd gravam logs estruturados no journald, tratam falhas com maior visibilidade e evitam sobreposição se um backup anterior demorar mais do que o esperado. Vamos configurar um par de unidades: serviço e timer.

Primeiro, crie o arquivo de serviço em /etc/systemd/system/restic-backup.service:

[Unit]
Description=Rotina de Backup Criptografado com Restic
After=network.target local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh
Nice=19
IOSchedulingClass=idle
PrivateTmp=true

Agora, crie o temporizador correspondente em /etc/systemd/system/restic-backup.timer configurado para rodar todas as noites às 02h00:

[Unit]
Description=Timer Noturno do Restic Backup

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
RandomizedDelaySec=1800

[Install]
WantedBy=timers.target

Ative e inicialize a automação:

sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer

# Verificar status do timer
systemctl list-timers restic-backup.timer

4. Restauração Granular e Montagem de Snapshots com FUSE

Um plano de backup só é tão bom quanto o seu procedimento de restauração validado. O Restic oferece duas abordagens excepcionais para extrair dados sem sobrescrever acidentalmente estruturas em produção.

Listagem e Extração Direta

Para inspecionar snapshots criados e restaurar um arquivo pontual:

# Listar snapshots existentes
sudo restic -r /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key snapshots

# Restaurar um diretório específico do último snapshot para um diretório /tmp/recovery
sudo restic -r /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key \
    restore latest \
    --target /tmp/recovery \
    --include /etc/nginx

Navegação Interativa via FUSE Mount

Uma das funções mais impressionantes do Restic é a capacidade de montar todo o repositório como um sistema de arquivos somente leitura através do FUSE. Isso permite abrir snapshots como pastas normais pelo terminal ou gerenciador gráfico de arquivos:

sudo mkdir -p /mnt/restic-mount
sudo restic -r /mnt/backups/restic-repo --password-file /etc/restic/backup-password.key \
    mount /mnt/restic-mount

Após a montagem, o diretório /mnt/restic-mount/snapshots/ apresentará pastas separadas por data e ID de snapshot. Você pode utilizar comandos corriqueiros como cp ou diff para inspecionar alterações antes de desmontar o diretório com fusermount -u /mnt/restic-mount.

Considerações Finais e Manutenção Preventiva

  • Guarde a chave criptográfica fora do host: O arquivo backup-password.key deve ser mantido em um cofre seguro (como o Bitwarden ou impresso em cofre físico). Sem ele, os snapshots tornam-se computacionalmente irrecuperáveis.
  • Implemente a regra 3-2-1: Utilize um backend secundário. Você pode sincronizar a pasta do repositório local para a nuvem usando o utilitário Rclone com rclone sync /mnt/backups/restic-repo remote:bucket-backup.
  • Teste restaurações semestrais: Crie um alerta no seu calendário para realizar restaurações de teste em máquinas virtuais limpas periodicamente, garantindo que dependências e permissões estejam intactas.

Com essa arquitetura implementada, seus backups ganham nível corporativo de confiabilidade, permanecem imunes a vazamentos de dados mesmo em armazenamentos públicos e operam silenciosamente em segundo plano com impacto mínimo de hardware.