Script de Monitoramento de Logins Ativos e Envio de SNMP Trap com Validação de Porta HTTP

Este script realiza a monitoração periódica do número de logins ativos em um sistema e, caso nenhum login ativo seja detectado, gera uma mensagem de erro em um arquivo de log específico. Além disso, o script verifica a disponibilidade da porta HTTP (porta 80) em um host definido. Se a porta estiver aberta e nenhum login ativo for detectado, um SNMP Trap é enviado para o host SNMP configurado. O script possui uma lógica para evitar o envio repetido de traps, limitando-os a uma vez por hora, e é adequado para ser utilizado com cron para execução automática em intervalos regulares.

#!/bin/bash

# Variáveis
LOG_FILE="/caminho/para/log/active-users.log"  # Caminho do arquivo de log
HOST_SNMP="IP_DO_HOST_SNMP"  # IP do host para onde o SNMP Trap será enviado
COMMUNITY="NOME_DA_COMUNIDADE_SNMP"  # Comunidade SNMP
OID="OID_ESPECIFICO"  # OID personalizado para o SNMP Trap
DATE=$(date '+%Y-%m-%d %H:%M:%S')
TRAP_SENT_FILE="/caminho/para/flag/snmp_trap_sent.flag"  # Caminho do arquivo de flag
TRAP_TIMEOUT=3600  # 1 hora em segundos (3600 segundos)

# Comando para verificar logins ativos
active_logins=$(SEU_COMANDO_DE_VERIFICACAO_DE_LOGINS)

# Verifica se o número de logins ativos é 0
if [ "$active_logins" -eq 0 ]; then
    # Comando resultou em zero, gera mensagem de erro no log
    echo "$DATE - ERRO: Nenhum login ativo detectado." >> $LOG_FILE

    # Verifica se o trap já foi enviado, e se o tempo de 1 hora já passou
    if [ ! -f "$TRAP_SENT_FILE" ] || [[ $(find "$TRAP_SENT_FILE" -mmin +60) ]]; then
        # Valida a porta 80 (HTTP) no host usando curl
        curl -s --connect-timeout 5 http://IP_DO_HOST:80 > /dev/null
        if [ $? -eq 0 ]; then
            echo "$DATE - Porta 80 (HTTP) está aberta no host $HOST_SNMP." >> $LOG_FILE

            # Envia SNMP Trap para o host com OID específico
            DESCRIPTION="Porta HTTP disponível e sem logins ativos"
            snmptrap -v 2c -c $COMMUNITY $HOST_SNMP '' $OID "" s "$DESCRIPTION"
            echo "$DATE - SNMP Trap enviado para $HOST_SNMP." >> $LOG_FILE

            # Atualiza o arquivo de flag com a hora atual
            touch "$TRAP_SENT_FILE"
        else
            echo "$DATE - Porta 80 (HTTP) está fechada no host $HOST_SNMP." >> $LOG_FILE
        fi
    else
        echo "$DATE - Trap já foi enviado nos últimos 60 minutos, nenhuma ação necessária." >> $LOG_FILE
    fi
else
    # Caso o número de logins ativos seja diferente de 0, remove a flag para permitir o envio da trap novamente no futuro
    echo "$DATE - Logins ativos detectados: $active_logins. Nenhuma ação necessária." >> $LOG_FILE
    if [ -f "$TRAP_SENT_FILE" ]; then
        rm "$TRAP_SENT_FILE"
        echo "$DATE - Flag de trap removida, trap pode ser enviado novamente no futuro." >> $LOG_FILE
    fi
fi

Valores Genéricos para Substituir:

  1. LOG_FILE: Defina o caminho onde você deseja armazenar o arquivo de log.
  2. HOST_SNMP: O IP do host onde o SNMP Trap será enviado.
  3. COMMUNITY: O nome da comunidade SNMP usada para enviar o trap.
  4. OID: O OID específico que você está usando para a trap.
  5. TRAP_SENT_FILE: O caminho onde será armazenado o arquivo de flag para evitar o reenvio do SNMP Trap.
  6. SEU_COMANDO_DE_VERIFICACAO_DE_LOGINS: Substitua este valor pelo comando que você usa para verificar os logins ativos.

Exemplo de uso:

Se você tiver o IP 192.168.1.100, comunidade SNMP public, e usar o comando fuid-cfg status | grep "Active Logins" | grep -o '[0-9]\+', você substituiria da seguinte forma:

LOG_FILE="/root/log/active-users.log"
HOST_SNMP="192.168.1.100"
COMMUNITY="public"
OID="1.3.6.1.4.1.8072.2.3.0.2"
TRAP_SENT_FILE="/root/log/snmp_trap_sent.flag"
active_logins=$(fuid-cfg status | grep "Active Logins" | grep -o '[0-9]\+')

CATEGORIES:

Software Livre

Tags:

Comments are closed