Script detección de intrusos (bash)

Hola, estoy trabajando con Nagios y he creado este script para detección de conexiones remotas en nuestra máquina. Para el que no lo sepa, Nagios es un sistema de monitorización de hosts y servidores. Aquí mi script:

#!/bin/bash

alarma=2
readarray GREPPED < <(last | grep -v ":0 " | grep -v "stem" | grep logged | cut -d" " -f10)
for item in "${GREPPED[@]}"
do
  if [[ "${item}" == xxx.xxx.xxx.* ]]; then # Nuestra red terminada en * para que busque coincidencias en todo el rango
   log=`last | grep ${item} | grep logged | cut -d" " -f18`
   conectado=${item}
   alarma=0
  else
   nmap -sP NUESTRA RED/24 | grep ${item} > /dev/null
   if [ $? = 0 ]; then
    conectado=`nmap -sP NUESTRA RED/24 | grep ${item} | cut -d"(" -f2 | cut -d")" -f1`
    log=`last | grep ${item} | grep logged | cut -d" " -f15`
    alarma=0
   else
     conectado=${item}
     echo ATENCIÓN: CONEXIÓN DETECTADA DESDE $conectado
     exit 2 #Salida CRITICAL
   fi
  fi
done

if [ $alarma = 0 ]; then
   echo OK: Conexión detectada desde $conectado a las $log
   exit 0 #Salida OK
elif [ $alarma = 2 ]; then
   echo OK: No hay conexiones remotas entrantes
   exit 0 #Salida OK
else
   echo Error desconocido
   exit 3 #Salida Unknown
fi
else
echo Hacen falta argumentos: $0 -a [on|logged]
exit 3 #Salida Unknown
fi

Creo que ya está todo

Se aceptan optimizaciones :)
Hombre, es una forma de hacerlo. Supongo que lo que quieres es meterlo en un crontab y que busque intrusiones cada minuto (por ejemplo) para pillar a la gente mientras está conectada.

Otra forma de hacerlo sería a través de syslog-ng y filtrar las alertas de conexiones SSH que genera la autentificación del sistema, y a partir de ahí generar una alerta.
Si, lo que hace Nagios es activar el script cada X tiempo y el host le devuelve la respuesta.

Básicamente utilizo el comando "last" para que funcione en cualquier linux.

Está creado para funcionar en español e inglés.
2 respuestas