PDA

Ver la Versión Completa : Script para notificar intrusiones en tu red con Ubuntu



Xripox
12/01/2010, 22:26
[Only registered and activated users can see links]

Este es un script que detecta quien se esta conectandoa tu red, y como comenta su autor Franklin Aliaga, es muy util si usas un Modem Router Inalambrico para detectar personas que se pueden estar conectando a tu red, hoy en dia existen infinidades de metodos para entrar a una red inalambrica asi que hay que estar monitoreando siempre la red, en este caso el script funciona de la siguiente manera, mientras tu estas haciendo tus trabajos hay un demonio que cada 3 min. ejecutara el script y mostrara en una alerta en el panel de notificaciones de tu Ubuntu.

Esta nueva versión varias características interesantes como el filtrado por MAC o IP:

1. Tiene varias opciones que se pueden pasar como parámetros:


-h Muestra esta ayuda
-l Usa el script en modo LOG, es decir pone una linea por host
intruso con la fecha primero, no escribe ninguna otra información
-n No hace uso del programa notify-send que informa al escritorio de los resultados
-m No hace uso del programa arp y no resuelve las MAC de los resultados
-a Devuelve todos los hosts encontrados independientemente de las
variables internas IPS_CONOCIDAS y MACS_CONOCIDA


Otras:

1. No usa archivos temporales, asi que no hay que preocuparse por los directorios
2. Comprueba si tienes los programas nmap i notify-send instalados, si no te indica un mensaje de error
3. Permite poner una serie de ip's conocidas para que no incordie con los equipos propios, tambien hay una variable para poner el interfaz de red que queremos usar
4. Permite al programa notify-send enviar notificaciones al escritorio desde el crontab ya que el programa que se ejecuta desde crontab que no tiene acceso directo al escritorio

Instalación:

Primero los requisitos (en Ubuntu Karmic):


sudo apt-get install libnotify-bin nmap net-tools

Para crear el script sigue los siguientes pasos:
Abre una consola y en tu /home, teclea:


sudo gedit alertared

Copia y pega el siguiente codigo:

Cambia los valores en negrita por los valores de tu red!!!


#!/bin/bash
#script inspirado en el creado por: franklin aliaga
#script mejorado y actualizado por: Ivan Vergés (microstudi)

#declaracion de arrays
declare -a IPS_CONOCIDAS
declare -a MACS_CONOCIDAS

####################
#Configuracion:
####################

#Array de ip's conocidas, la primera debe ser la del router, no hace falta poner la propia
#separar por espacios las ips
IPS_CONOCIDAS=( "192.168.2.1" "192.168.2.3" )

#Array de MAC's conocidas (para que no liste las direcciones DHCP de ordenadores conocidos)
#para conocer una MAC, usar el comando "arp IP"
#separar por espacios las macs
MACS_CONOCIDAS=( "00:11:22:33:44:55" "00:12:34:56:67:89" )

#Interfaz de red (eth0, wlan0, etc)
DEVICE="eth0"

#Mascara de red (24=255.255.255.0, 16=255.255.0.0)
MASK=24

#####################
#Menu de opciones
[Only registered and activated users can see links]
if [ "$opt" = "-h" ]; then
echo "alertared 1.0 ([Only registered and activated users can see links]) por Ivan Vergés"
echo "Este programa busca los host de una red y devuelve los conectados y su MAC"
echo "USO alertared [Parametros]"
echo "OPCIONES:"
echo " -h Muestra esta ayuda"
echo " -l Usa el script en modo LOG, es decir pone una linea por host"
echo " intruso con la fecha primero, no escribe ninguna otra información"
echo " -n No hace uso del programa notify-send que informa al escritorio de los resultados"
echo " -m No hace uso del programa arp y no resuelve las MAC de los resultados"
echo " -a Devuelve todos los hosts encontrados independientemente de las"
echo " variables internas IPS_CONOCIDAS y MACS_CONOCIDAS"
exit
fi
if [ "$opt" == "-l" ]; then
LOG=1
fi
if [ "$opt" == "-n" ]; then
NONOTIFY=1
fi
if [ "$opt" == "-m" ]; then
NOMAC=1
fi
if [ "$opt" == "-a" ]; then
IPS_CONOCIDAS=( )
MACS_CONOCIDAS=( )
fi
done

#aqui obtenemos la nuestra ip
ip=$(/sbin/ifconfig "$DEVICE" | grep "inet addr" | awk '{print $2}' | cut -c 6-)
if [ ! $LOG ]; then
echo "Mi ip: $ip"
fi
#añadimos nuestra IP al array
IPS_CONOCIDAS[${#IPS_CONOCIDAS
}]=$ip
if [ ! $LOG ]; then
echo "No se controlan los equipos siguientes: "${IPS_CONOCIDAS
}
if [ "${MACS_CONOCIDAS
}" != "" ] && [ ! $NOMAC ]; then
echo "No se controlan los equipos con las MAC siguientes: "${MACS_CONOCIDAS
}
fi
fi

#Comprovar si existen los programas que usaremos:
if [ ! -x /usr/bin/nmap ]; then
echo "El programa nmap no está instalado!"
exit
fi
if [ ! $NONOTIFY ] && [ ! -x /usr/bin/notify-send ]; then
echo "El programa notify-send no está instalado!"
echo "Puedes llamar al programa con la opcion -n para no usar notify-send"
exit
fi
if [ ! $NOMAC ] && [ ! -x /usr/sbin/arp ]; then
echo "El programa arp no está instalado!"
echo "Puedes llamar al programa con la opcion -m para no usar arp"
exit
fi

#con este comnado de nmap nos muestra los hosts conectados
#y los guarda en el fichero "-" que es la salida standard
#redireccionada a la variable variable HOST_IPS
if [ ! $LOG ]; then
echo "Buscando equipos..."
fi
HOST_IPS=$(/usr/bin/nmap -sP ${IPS_CONOCIDAS[0]}/$MASK -oG -)

#aqui cortamos el formato obtenido anteriormente de archivo para solo obtener las ip's
IPS=$(echo "$HOST_IPS" | grep Host | cut -c 7-20 | tr -d "\()")

#aqui capturamos el numero de lineas que tiene nuestro archivo
#en este caso la cantidad de ip's que hay en el archivo "-" (entrada standard)
contador=$(echo "$IPS" | wc -l - | cut -c 1-2)
total=$(expr $contador - 1)

#esto es para que el script tenga acceso a las X des de crontab
export DISPLAY=:0
export XAUTHORITY="$HOME/.Xauthority"

#Bucle de búsqueda entre las ip's encontradas
var=0
while [ $var -le $total ]; do
SALTA_BUCLE=0
let var=$var+1
#capturamos la ip por linea
linea=$(echo "$IPS" | sed -n "$var p")
for i in ${IPS_CONOCIDAS
}
do
if [ $i == $linea ]; then
if [ ! $LOG ]; then
echo "La IP $linea está en la red conocida"
fi
SALTA_BUCLE=1
break
fi
done
if [ "$SALTA_BUCLE" == "1" ]; then
continue
fi
#obtenemos informacion de la ip
if [ ! $NOMAC ]; then
ARP=$(/usr/sbin/arp -a $linea)
else
ARP=""
fi
#nos quedamos con la mac
MAC=$(echo "$ARP" | awk '{print $4}')
#el nombre de host a veces sale también
NAME=$(echo "$ARP" | awk '{print $1}')
for i in ${MACS_CONOCIDAS
}
do
if [ $i == "$MAC" ]; then
if [ ! $LOG ]; then
echo "La IP $linea (HOST: $NAME MAC: $MAC) está en la red conocida"
fi
SALTA_BUCLE=1
break
fi
done
if [ "$SALTA_BUCLE" == "1" ]; then
continue
fi

if [ ! $NOMAC ]; then
AVISO="Conectado $linea (HOST: $NAME MAC: $MAC)"
else
AVISO="Conectado $linea"
fi

if [ ! $NONOTIFY ]; then
#aviso al sistema de notificaciones de escritorio
/usr/bin/notify-send "$AVISO"
fi

if [ $LOG ]; then
#modo log, una sola linea con la fecha
if [ ! $NOMAC ]; then
echo `/bin/date --rfc-3339=seconds`" HOST $linea ARP $ARP"
else
echo `/bin/date --rfc-3339=seconds`" HOST $linea"
fi
else
#modo normal
#Para enterar-se por la consola también:
echo "$AVISO"
fi

done


Guarda el fichero que acabas de crear y en consola teclea:


sudo chmod +x alertared

Despues creamos el demonio:


crontab -e

Y añadimos la linea:


*/3 * * * * /home/tu nombre de usuario/alertared

*Con esto el sistema ejecutara cada 3 minutos el script y nos notificara los intrusos.

Si quieres guardar un log en algun sitio de los hosts encontrados usa la linea siguiente en vez de la anterior:


*/3 * * * * /home/tu nombre de usuario/alertared -l >> /ruta que quieras/detector.log


Visto en Tuxapuntes