Criptografia da Partição de Auditoria com GELI no OPNsense
Objetivo: Garantir que os logs do firewall sejam armazenados exclusivamente em uma partição criptografada, exigindo autenticação manual após cada reinicialização antes da liberação da interface LAN.
Pré-requisitos: - OPNsense instalado. - Partição /auditoria criada durante a instalação. - GELI disponível. - Serviço KEA DHCP instalado. - Acesso físico, console serial ou IPMI disponível.
Tempo estimado: 20 minutos
Rollback: Remover as entradas do fstab, excluir o hook de inicialização e restaurar o diretório /var/log.
1. Instalação
Durante a instalação do OPNsense:
Criar uma partição de 32 GB para o sistema operacional. Utilizar o restante do SSD para criar a partição /auditoria.
Concluir normalmente a instalação do sistema.
Configurar o KEA DHCP.
2. Identificar a partição
Identifique qual dispositivo corresponde à partição /auditoria.
Neste exemplo ela está localizada em:
/dev/ada1p2
3. Criptografar a partição
Atenção: Este procedimento formata completamente a partição /auditoria, apagando todos os dados existentes.
Desmonta a partição /auditoria:
umount /auditoria
Inicialize a criptografia:
geli init -s 4096 /dev/ada1p2
Acople a partição criptografada:
geli attach /dev/ada1p2
Teste a acoplagem, a saída esperada é "ada1p2.eli":
geli list
Formate a partição:
newfs -U /dev/ada1p2.eli
4. Configurar o fstab
Edite o arquivo:
ee /etc/fstab
Remova a linha da partição auditoria sem a criptografia:
/dev/ada1p2 /auditoria ufs rw 2 2
Adicione as seguintes entradas:
/dev/ada1p2.eli /auditoria ufs rw 0 2
/auditoria/opnsense_log/log /var/log nullfs rw 0 0
Observação: É esperado que a primeira entrada falhe durante o boot enquanto a partição permanecer criptografada e ainda não tiver sido desbloqueada.
5. Montar a partição
Monte a partição:
mount /auditoria
Confirme que a montagem ocorreu corretamente:
mount | grep auditoria
6. Criar estrutura de diretórios
Crie os diretórios onde serão armazenados os logs:
mkdir -p /auditoria/opnsense_log/log
7. Montar o NullFS
Monte o diretório de logs:
mount -t nullfs /auditoria/opnsense_log/log /var/log
Reinicie o serviço de logs:
service syslog-ng restart
8. Identificar a interface LAN
Identifique o nome da interface LAN.
ifconfig
Neste exemplo será utilizada: igc0
9. Criar Hook de Inicialização
Crie o arquivo:
ee /usr/local/etc/rc.syshook.d/start/99-ParaLan
Adicione:
#!/bin/sh
LAN="igc0"
sleep 30
echo "Desativando interface ${LAN}..." >/dev/console
ifconfig "${LAN}" down
exit 0
Conceda permissão de execução:
chmod +x /usr/local/etc/rc.syshook.d/start/99-ParaLan
Observação: O atraso de 30 segundos é intencional para permitir que os serviços internos do OPNsense concluam sua inicialização corretamente antes da desativação da interface LAN.
10. Criar diretório dos scripts
Crie o diretório:
mkdir -p /home/lupa/scripts
11. Criar o script de desbloqueio
Crie o arquivo:
ee /home/lupa/scripts/libera_LAN_e_LOG.sh
Conteúdo:
#!/bin/sh
#############################################
# Configurações
#############################################
PARTICAO="/dev/ada1p2"
PONTO_MONTAGEM="/auditoria"
LOGDIR="${PONTO_MONTAGEM}/opnsense_log/log"
LAN="igc0"
#############################################
# Verifica se é root
if [ "$(id -u)" -ne 0 ]; then
echo "Este script deve ser executado como root."
exit 1
fi
echo
echo "=== Desbloqueio da Auditoria ==="
echo
echo "Desbloqueando partição..."
geli attach "${PARTICAO}" || exit 1
echo
echo "Montando ${PONTO_MONTAGEM}..."
if ! mount | grep -q "on ${PONTO_MONTAGEM} "; then
mount "${PONTO_MONTAGEM}" || exit 1
else
echo "Partição já está montada."
fi
echo
echo "Montando NullFS..."
if ! mount | grep -q "on /var/log "; then
mount -t nullfs "${LOGDIR}" /var/log || exit 1
else
echo "NullFS já está montado."
fi
echo
echo "Reiniciando Syslog..."
service syslog-ng restart || exit 1
echo
echo "Ativando interface ${LAN}..."
ifconfig "${LAN}" up || exit 1
echo
echo "Reiniciando KEA DHCP..."
service kea restart || exit 1
echo
echo "=================================="
echo "Firewall liberado com sucesso."
echo "=================================="
Observação: O script interrompe imediatamente sua execução caso qualquer etapa falhe (desbloqueio da partição, montagem do sistema de arquivos, montagem do NullFS ou reinicialização do syslog). Esse comportamento é intencional e garante que a interface LAN e o serviço KEA DHCP somente sejam disponibilizados quando o sistema de auditoria estiver completamente operacional.
Conceda permissão de execução:
chmod +x /home/lupa/scripts/libera_LAN_e_LOG.sh
12. Teste
Antes de reiniciar o firewall, desacople a partição criptografada:
geli detach /dev/ada1p2.eli
Reinicie o firewall.
O comportamento esperado será:
O OPNsense inicializa normalmente. A partição /auditoria permanece criptografada. Após aproximadamente 30 segundos, a interface LAN é desativada automaticamente. O sistema permanece aguardando o desbloqueio manual da partição.
Para liberar o firewall, execute:
/home/lupa/scripts/libera_LAN_e_LOG.sh
Será solicitada a senha da criptografia do GELI.
Após informar a senha corretamente, o script irá:
Desbloquear a partição criptografada. Montar a partição /auditoria. Montar o NullFS sobre /var/log. Reiniciar o syslog-ng. Reativar a interface LAN. Reiniciar o serviço KEA DHCP.
Ao término do script, o firewall estará completamente operacional, com todos os logs sendo gravados na partição criptografada.
13. Validação
Verifique se a partição está montada:
mount | grep auditoria
Verifique se o NullFS está montado:
mount | grep /var/log
Verifique se a interface LAN está ativa:
ifconfig igc0
Verifique se o GELI está acoplado:
geli list
Verifique se o Syslog está em execução:
service syslog-ng status
Verifique se o KEA está em execução:
service kea status