Bloqueo de IP' s “Molestas”

Bloqueo de IP’s “Molestas”

Este sencillo script está probado en CentOS 4.3 y agrega a /etc/hosts.deny todas aquellas IP’s que sobrepasen el límite de reintentos, intentando acceder mediante ssh con usuarios inexistentes o mediante ataques de diccionario. Las IP’s baneadas no pueden volver a conectar por ssh y reciben un “Connection Refused”. También se pueden especificar IP’s en la variable whitelist para evitar banear nuestras propias IP’s mediante ip spoofing.



#!/bin/sh


########################################
# @version 0.1
# @author skarvin
# Script de bloqueo a SSH por intentos erroneos
########################################

REINTENTOS=10
count=0
IP="0"
IP2="0"
whitelist="127.0.0.1,69.69.45.45";


function block_ip (){

if echo $whitelist | grep -v $1 > /dev/null; then

if cat /etc/hosts.deny | grep $1 > /dev/null; then
echo "$1 ya está baneada"
else
echo Baneando: $1
echo "sshd: $1" >> /etc/hosts.deny
fi
fi
}

#INTENTOS DE ACCESO CON USUARIO

#EXISTENTE Y PASSWORD INCORRECTO
for i in `cat /var/log/secure* | tr ' ' '#' | grep Failed | grep -v illegal`; do

IP=`echo $i | cut -c 40-200 | cut -d "#" -f 6`;

if [ "$IP" = "$IP2" ]; then
let count++

if [ $count > $REINTENTOS ]; then
block_ip $IP
count=0
fi

else
count=0
fi

IP2=`echo $i | cut -c 40-200 | cut -d "#" -f 6`;

done

#INTENTOS DE ACCESO MEDIANTE ATAQUES DE DICCIONARIO
for i in `cat /var/log/secure* | tr ' ' '#' | grep Failed | grep illegal`; do

IP=`echo $i | cut -c 40-200 | cut -d "#" -f 8`;
if [ "$IP" = "$IP2" ]; then
let count++

if [ $count > $REINTENTOS ]; then
block_ip $IP
count=0
fi

else
count=0
fi

IP2=`echo $i | cut -c 40-200 | cut -d "#" -f 8`;

done

Posted on 8:52 p. m. by skarvin and filed under | 8 Comments »

8 comentarios:

Anónimo dijo... @ 5:58 p. m.

Buen aporte, ahora mi pregunta es , como o donde agrego estas lineas de comando??


Gracias

Anónimo dijo... @ 5:59 p. m.

Como utilizo este codigo??? donde lo escribo como lo ejecuto help plis

skarvin dijo... @ 10:47 p. m.

Hola,

El código lo puedes meter en un fichero en /etc/cron.daily o /etc/cron.hourly depende de la periodicidad que quieras ir baneando las IP's, ten en cuenta que está probado para Distros basadas en RedHat por lo que podría no funcionar en otras distribuciones.

Un saludo.

skarvin dijo... @ 10:49 p. m.

Por cierto acuerdate que el fichero sea ejecutable!!
#chmod +x /etc/cron.daily/banea_ip.sh

Anónimo dijo... @ 10:08 p. m.

Yo no entiendo nada... pero esto hace las tostadas con mantequilla o con mermelada?
FDO: Fandel

skarvin dijo... @ 10:58 a. m.

Todo depende de donde instales la distribución GNU/Linux que uses. Mi consejo es que utilices una tostadora Moulinex 3.0 o superior. El tema de la mermelada o la mantequilla depende de la versión, la mantequilla está diponible desde la 2.2 para la mermelada has de irte a la 3.0.

Espero que esto te sirva de ayuda y haga más apetitosas tus mañanas.

Anónimo dijo... @ 5:39 p. m.

Pues tengo la version 4.3 del Centos y configure el sysctl.conf para evitar el ping y algunas cosillas mas, la pregunta. Este escript funciona de todas formas sin tomar en cuenta la configuracion de iptables??

Saludos

Steven

skarvin dijo... @ 7:28 p. m.

Hola,

Es independiente de iptables, puesto que el bloqueo lo hace a nivel de /etc/hosts.deny

Un saludo.