Pular para conteúdo

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