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
- Acesse seu firewall pfSense via SSH.
- Escolha a opção 8 — Shell.
- Instale o nano (opcional, mas recomendado):
pkg install nano touch logsvpn.shchmod +x logsvpn.shnano 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.
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