SNAKE_TECH blog · openvpn notify

Implementação de Notificações de Conexão OpenVPN - Firewall pfSense

Se você chegou até aqui, assim como eu, já teve a necessidade de ter logs de conexão de VPN e receber notificações assim que elas ocorrem — tanto na conexão quanto na desconexão.

Abaixo, o script e as instruções para configurar isso no pfSense.

01Acesso e preparação

  1. Acesse seu firewall pfSense via SSH.
  2. Escolha a opção 8 — Shell.
  3. Instale o nano (opcional, mas recomendado): pkg install nano
  4. touch logsvpn.sh
  5. chmod +x logsvpn.sh
  6. nano logsvpn.sh

Cole o script abaixo, ajustando os parâmetros do seu servidor SMTP. Ele foi pensado para enviar as conexões do dia atual e gerar um hash do que já foi enviado, evitando duplicidade — no primeiro envio, tudo do dia com log será enviado, já que ainda não existe o histórico.

02O script

#!/bin/sh

# Arquivo de log de VPN
VPN_LOG="/var/log/openvpn.log"

# Arquivo para armazenar IDs ou hash de logs já enviados
SENT_LOGS="/var/log/sent_logs.txt"

# Endereço de e-mail para enviar as notificações
EMAIL="email@dominio.com.br"

# Obter a data atual no formato do log (ex: "2024-08-27")
CURRENT_DATE=$(date +"%Y-%m-%d")

# Configurações de SMTP
SMTP_SERVER="mail.smtp.com"
SMTP_PORT="465"
SMTP_USER="email@dominio.com.br"
SMTP_PASS="password"

# Função para enviar e-mail com prioridade
send_email() {
    local subject="$1"
    local message="$2"
    local priority="$3"
    # Definir a prioridade do e-mail (1: Alta, 3: Normal, 5: Baixa)
    echo -e "From: $SMTP_USER\nTo: $EMAIL\nSubject: $subject\nX-Priority: $priority\nMIME-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\n\n$message" | curl --url "smtps://$SMTP_SERVER:$SMTP_PORT" --ssl-reqd \
        --mail-from "$SMTP_USER" \
        --mail-rcpt "$EMAIL" \
        --upload-file - \
        --user "$SMTP_USER:$SMTP_PASS"
}

# Log de depuração
DEBUG_LOG="/var/log/vpn_monitor_debug.log"
echo "Data atual: $CURRENT_DATE" >> $DEBUG_LOG

# Filtrar conexões para o dia atual e enviar com prioridade normal (3)
grep "$CURRENT_DATE" $VPN_LOG | grep "authenticated" | while read -r line ; do
    log_id=$(echo "$line" | sha256sum | awk '{print $1}')
    echo "Analisando linha: $line" >> $DEBUG_LOG
    if ! grep -q "$log_id" "$SENT_LOGS"; then
        echo "Enviando e-mail para: $EMAIL" >> $DEBUG_LOG
        send_email "VPN Conectada" "Conexão VPN detectada: $line" "3"
        echo "$log_id" >> "$SENT_LOGS"
    else
        echo "Log já enviado: $line" >> $DEBUG_LOG
    fi
done

# Filtrar desconexões para o dia atual e enviar com prioridade normal (3)
grep "$CURRENT_DATE" $VPN_LOG | grep "disconnected" | while read -r line ; do
    log_id=$(echo "$line" | sha256sum | awk '{print $1}')
    echo "Analisando linha: $line" >> $DEBUG_LOG
    if ! grep -q "$log_id" "$SENT_LOGS"; then
        echo "Enviando e-mail para: $EMAIL" >> $DEBUG_LOG
        send_email "VPN Desconectada" "Desconexão VPN detectada: $line" "3"
        echo "$log_id" >> "$SENT_LOGS"
    else
        echo "Log já enviado: $line" >> $DEBUG_LOG
    fi
done

# Filtrar falhas de autenticação para o dia atual e enviar com prioridade alta (1)
grep "$CURRENT_DATE" $VPN_LOG | grep "could not authenticate" | while read -r line ; do
    log_id=$(echo "$line" | sha256sum | awk '{print $1}')
    if ! grep -q "$log_id" "$SENT_LOGS"; then
        echo "Enviando e-mail para: $EMAIL" >> $DEBUG_LOG
        send_email "VPN Falha de Logon" "Falha de logon detectada: $line" "1"
        echo "$log_id" >> "$SENT_LOGS"
    else
        echo "Log já enviado: $line" >> $DEBUG_LOG
    fi
done

03Agendamento (CRON)

No pfSense, dentro de Serviços → Cron, adicione uma linha para executar o script periodicamente — de minuto em minuto, ou na frequência que desejar.

Feito isso, é só aguardar e começar a receber os logs de conexão, desconexão e falhas de autenticação diretamente no seu e-mail.

Artigo originalmente publicado no LinkedIn Pulse por Alfredo Eduardo da Silva.
[ ESPAÇO RESERVADO — ANÚNCIO GOOGLE ADSENSE ]

Quer monitoramento e alertas na sua VPN corporativa?

Implemento notificações, logs e monitoramento de VPN sob medida pro seu ambiente pfSense.

Falar com a Snake Tech