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:
- LOG_FILE: Defina o caminho onde você deseja armazenar o arquivo de log.
- HOST_SNMP: O IP do host onde o SNMP Trap será enviado.
- COMMUNITY: O nome da comunidade SNMP usada para enviar o trap.
- OID: O OID específico que você está usando para a trap.
- TRAP_SENT_FILE: O caminho onde será armazenado o arquivo de flag para evitar o reenvio do SNMP Trap.
- 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]\+')
Comments are closed