Storage criptografado em roteador residencial: mudanças entre as edições

De Área31 Hackerspace
Sem resumo de edição
Sem resumo de edição
Linha 92: Linha 92:
Se achar conveniente, pode adicionar este ponto de montagem ao '''/etc/fstab''', usando a opção '''noauto''' para prevenir montagem automática:
Se achar conveniente, pode adicionar este ponto de montagem ao '''/etc/fstab''', usando a opção '''noauto''' para prevenir montagem automática:
{{console|body=
{{console|body=
###i## /dev/mapper/storage_file_luks /storage ext4 noatime,nobarrier,noauto 0 2}}
/dev/mapper/storage_file_luks /storage ext4 noatime,nobarrier,noauto 0 2}}


= Conclusão =
= Conclusão =

Edição das 15h08min de 10 de outubro de 2023

Membro do hackerspace satisfeito com seu storage residencial criptografadinho com LUKS.
Autor: 
* Coffnix

"Home Network Defense"

Utilize criptografia pra tudo

Motivo

Atualmente, existem muitas soluções de armazenamento projetadas para compartilhar arquivos em redes domésticas e empresariais. No entanto, muitas delas não priorizam mecanismos robustos de segurança. Portanto, para atender aos padrões de segurança desejados, é frequentemente necessário recorrer a soluções de terceiros, a nível de sistema operacional. Um exemplo notável é a criptografia de arquivos usando LUKS.

Requisitos

Adquira um storage que ofereça um volume de rede por meio de NFS ou SMB/CIFS, bem como um dispositivo externo USB. MacOS que suporte HFS+ (opcional). Linux com suporte a LUKS e ao módulo hfsplus.

Configuração do Storage ou Roteador

Para este exemplo, utilizaremos o roteador Archer GX90 (AX6600). Crie um novo usuário e defina uma senha robusta. Altere a senha do usuário guest ou, se preferir, desative-o.


Configuração do Dispositivo de Armazenamento USB

A grande maioria dos roteadores modernos suporta os sistemas de arquivos HFS+, NTFS, FAT32 e exFAT. Dada a necessidade de otimização de performance e aprimoramento da segurança dos dados, optaremos pelo HFS+. No entanto, se você encontrar um dispositivo que também suporte EXT4, este é igualmente recomendável, sendo um sistema de arquivos robusto e adequado para essa finalidade.

Formatação do Dispositivo de Armazenamento

Para formatar o dispositivo, o utilitário Diskutil no macOS é altamente recomendado. No entanto, ferramentas como parted, cfdisk e outras podem ser alternativas viáveis. Após a formatação, monte o disco em seu sistema local e proceda à criação de um arquivo vazio com as dimensões desejadas. Em nosso exemplo, trabalhamos com um disco USB de 1TB destinado a backups do Time Machine, e o arquivo criado possui 400GB.

Este procedimento é aplicável tanto no macOS quanto no Linux. Se necessário, ajuste o caminho de destino em of=/Volumes/wd-1tb/storage_file.img para refletir o diretório correto de montagem. A escolha de bs=10M foi feita considerando que o cliente deste volume de disco será um Raspberry Pi com processador ARMv8 rodando Linux, se comunicando via rede sob protocolo CIFS, com um roteador com processador Broadcom, ou seja, ambos bem lentos. Configurações como bs=512 ou bs=1M poderiam resultar em consumo elevado de CPU e rede, comprometendo a performance. Essas decisões exigem que você considere que o tempo de sistema da CPU é inversamente proporcional ao valor do block size. Isto é, quanto menor o bs, mais chamadas de sistema são geradas pelo comando dd e pelo uso em si do volume de disco.

Para sistemas de armazenamento mais robustos, com clientes de alto desempenho, pode ser benéfico experimentar valores menores para bs, como bs=1M. Em situações específicas com dispositivos de baixo desempenho, como cartões MMC, já utilizei valores extremamente reduzidos, como bs=4 (sim, apenas 4 bytes), atingindo taxas de transferência de até 12MB/s. Em contextos de HDD SATA, SCSI ou SAS ou para criação de imagens para LiveCD, geralmente emprego bs=512.


Execute o comando abaixo para criar o arquivo de imagem de disco:

root # dd if=/dev/zero of=/Volumes/wd-1tb/storage_file.img bs=10M count=40960


Após criar o arquivo, desmonte o disco e conecte-o ao roteador via porta USB. Ative o compartilhamento SMB e o Time Machine caso deseje utiliza-lo.


Monte o volume CIFS no Linux

Para acessar os recursos compartilhados via CIFS fornecidos pelo roteador, siga os passos abaixo. No exemplo em questão, o volume designado pelo roteador é "G" e seu endereço IPv4 é 192.168.20.1. É fortemente recomendado optar pelo protocolo CIFS em detrimento do SMBFS, dadas as vantagens em termos de estabilidade, eficiência no uso de cache e outros benefícios. O protocolo suportado pelo roteador é vers=2.0. Caso esteja utilizando um roteador mais antigo, você pode tentar usar vers=1.0, embora isso seja desaconselhado devido às vulnerabilidades de segurança associadas a essa versão. Adicionalmente, sugiro não configurar a montagem automática via /etc/fstab, uma vez que isso pode resultar em complicações durante o processo de inicialização.

root # mount -t': mount -t cifs //192.168.20.1/G /storage -o username=coffnix,password=area31@lalala,iocharset=utf8,vers=2.0


Caso deseje, adicione a seguinte linha no /etc/fstab:

//192.168.20.1/G /tp-share cifs username=coffnix,password=area31@lalala,iocharset=utf8,vers=2.0,noauto 0 0

Criação e Montagem da Imagem Encriptada com LUKS

Para aumentar a segurança, é fortemente aconselhado separar o cabeçalho (header) da imagem LUKS do restante da imagem. Armazene este cabeçalho localmente no diretório /etc/area31/headerstore. Não se esqueça de escolher uma senha robusta para proteger seus dados.

root # mkdir -p /etc/area31/headerstore ; cryptsetup luksFormat --force-password --type luks2 /tp-share/storage_file.img --align-payload 8192 --header /etc/area31/headerstore/header.img

Em seguida, monte o volume LUKS utilizando a senha definida anteriormente:

root # cryptsetup open --header=/etc/area31/headerstore/header.img /tp-share/storage_file.img storage_file_luks

Se quiser visualizar as informações detalhadas do LUKS, execute:

root # cryptsetup status storage_file_luks

Formatação e Montagem do LUKS

O comando mkfs.ext4 é usado para criar um sistema de arquivos EXT4, que é uma versão avançada e amplamente utilizada do sistema de arquivos extensível. Ao criar um sistema de arquivos, especialmente um de grande tamanho, como uma imagem de 400GB gerada pelo dd, a inicialização padrão do sistema de arquivos pode ser um processo demorado.

A opção -E lazy_itable_init é particularmente útil neste contexto. Quando esta opção é ativada, a inicialização das tabelas de inode do sistema de arquivos é adiada até o primeiro montagem. Em outras palavras, em vez de inicializar todos os inodes durante a criação do sistema de arquivos, essa tarefa é adiada e realizada de forma preguiçosa, ou "lazy", em segundo plano, após o sistema de arquivos ser montado.

Ao não usar a opção -E lazy_itable_init, o processo de criação do sistema de arquivos pode se tornar extremamente lento, pois o mkfs.ext4 tentará inicializar todos os inodes imediatamente. Em uma imagem de 400GB, isso pode levar horas. Portanto, ao utilizar a opção -E lazy_itable_init, você está otimizando o processo de criação, tornando-o significativamente mais rápido.

Em resumo, o -E lazy_itable_init serve para acelerar o processo de criação de sistemas de arquivos em volumes grandes, adiando a inicialização das tabelas de inode para após a primeira montagem e realizando-a de forma incremental em segundo plano.

Após ter montado o volume CIFS, proceda à formatação do arquivo utilizando o sistema de arquivos EXT4 ou qualquer outro de sua preferência.

root # mkfs.ext4 -E lazy_itable_init /dev/mapper/storage_file_luks

Com o volume devidamente formatado, realize sua montagem:

root # mkdir -p /storage ; mount /dev/mapper/storage_file_luks /storage

Se achar conveniente, pode adicionar este ponto de montagem ao /etc/fstab, usando a opção noauto para prevenir montagem automática:

/dev/mapper/storage_file_luks /storage ext4 noatime,nobarrier,noauto 0 2

Conclusão

Com estas etapas concluídas, você possui um volume de rede montado no seu Linux, criptografado e com todas as vantagens do sistema de arquivos escolhido. Estas podem incluir funcionalidades como XATTR (atributos estendidos), Journaling, e suporte a CHATTR no caso do EXT4. Para um nível adicional de segurança, é sugerido utilizar o arquivo do cabeçalho LUKS de uma localização remota, obtendo-o via SCP (SSH).

Arquivo:Luks cifs rasp4.png

Cookies nos ajudam a entregar nossos serviços. Ao usar nossos serviços, você concorda com o uso de cookies.