Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
21-08-2017, 04:39 (Lunes)
Inicio Ayuda Reglas Buscar Ingresar Registrarse
Noticias:
Liberada wifislax64-1.1 version final para descargar

Videos Downloader




+  Seguridad Wireless - Wifi
|-+  Equipos y materiales
| |-+  Puntos de acceso, routers, switchs y bridges
| | |-+  Openwrt & LEDE (Moderadores: jar229, Noltari, Pteridium, Tki2000)
| | | |-+  Script Banear direcciones IP contra ataques SSH (Openwrt BB 14.07)
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] 2 3 Ir Abajo Imprimir
Autor Tema: Script Banear direcciones IP contra ataques SSH (Openwrt BB 14.07)  (Leído 10617 veces)
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« : 13-09-2014, 12:06 (S?bado) »

Hola, he escrito un script para openwrt BB 14.07 que banea  las direcciones IP que fallan la contraseña  Dropbear SSH mas de 2 veces o que intentan conectarse con usuarios no validos.
El script añade la direcion baneada a una cadena de iptables con destino DESCARTAR (DROP).
Las ips baneadas se borran al reiniciar el router, pero quedan grabadas en el archivo de log y se recargan al volver a encender.
Tiempo de baneo 24 horas, modificable dentro del script.
Animo a todos a modificar el script y mejorarlo o lo que sea.

Actualizacion 20.sept.2014

Cambiadas las cadenas de destino de baneo. Ahora el destino es input_wan_rule que es lo recomendado en la documentación de openwrt.

ACTUALIZACION 07 MARZO 2016:

EDITADO 08 marzo : Corregido el nombre del fichero de origen.

Novedades:
Instalacion automatica en /root modificable desde dentro del archivo de instalacion.
Funcionamiento configurable para WAN o LAN o ambas.
Se instala automaticamente en el cron para iniciarse cada 10 minutos.

Instalacion:
Copiar al router los dos archivos instalar.sh y fail2ban.pre a la carpeta /tmp o cualquier otra y ejecutar instalar.sh
# chmod 755 instalar.sh
#./instalar.sh

https://drive.google.com/open?id=0Bw50IJmzFr-FcU9UeHNIMjNneUU
https://drive.google.com/open?id=0Bw50IJmzFr-FLWlsRzRjOEc1UTA


Código:
# Directorio de instalacion por defecto "/root"
# Si cambiamos esto debemos cambiarlo tambien en el fichero ejecutable fail2ban.sh.

destino="/root"

touch $destino/fail2ban.sh
touch $destino/logfail2.log
cat fail2ban.pre > $destino/fail2ban.sh
chmod 755 $destino/fail2ban.sh

#Anadimos el script al crontab para que corra cada 10 minutos
sed -i '/'fail2ban'/d' /etc/crontabs/root
echo "# Script fail2ban" >>/etc/crontabs/root
echo "*/10 * * * * $destino/fail2ban.sh" >>/etc/crontabs/root
/etc/init.d/cron restart


Archivo fail2ban.pre (copiar en la misma carpeta que instalar.sh)

Código:

# Script que detecta los intentos de conexion fallidos al servidor SSH, ya sea por contrasena erronea
# o por usuario no valido y protege el sistema baneando la IP de origen utilizando el cortafuegos de Linux Iptables.
# Tiempo de baneo configurable y tablas de baneo de IP permanentes al reinicio del sistema.
# Probado en OpenWrt 14.04 Barrier Breaker.

#!/bin/sh
#============================================================================================================
#===========================================OPCIONES=========================================================

# Tiempo de baneo (en segundos). Transcurrido ese tiempo se desactiva el baneo y se quita la IP de la lista.
# Por defecto 24 horas, 86400 segundos.

ban_time=86400

# Directorio de instalacion del script donde estan los ficheros fail2ban.sh y logfail2.log
# Por defecto se instala automaticamente en "/root". Si hemos modificado el archivo de instalacion para instalar en otra carpeta, tambien debemos modificar este.

destino="/root"

# Funcionamiento en internet, red local o ambas. Descomentar la opcion deseada. Por defecto solo internet.
# input_wan_rule= Solo internet (defecto), input_lan_rule= Solo red local, input_rule funcionamiento en ambas redes.
# Si cambiamos este valor debemos reiniciar el router.

alcance="input_wan_rule"
#alcance="input_lan_rule"
#alcance="input_rule"

#=============================================================================================================
#======================================COMPROBACION INICIAL===================================================
#Si es la primera vez que lanzamos el script, debemos crear el fichero donde se guardan
#las ips baneadas.
if [ ! -f $destino/logfail2.log ]

then
touch $destino/logfail2.log
fi
# Comprobamos si acabamos de iniciar el router y en ese caso anadimos las direcciones IP baneadas del log
if [ ! -f /tmp/fail2ban.tmp ]
then
touch /tmp/fail2ban.tmp
for x in `cat $destino/logfail2.log |awk '{print $2}' FS=":"`
do iptables -I $alcance 1 -s $x -j LOG --log-prefix "--ATAQUE--FUERZA--BRUTA--";
iptables -I $alcance 2 -s $x -j DROP;
done
fi

#=============================================================================================
#===============================BANEO INTENTOS USUARIOS VALIDOS===============================

# Comprobamos las conexiones y el numero de veces que el resultado ha sido "Bad password"

for i in `logread|grep "Child connection"| awk '{print $11}'|awk '{print $1}' FS=":"`
do brute=`logread|grep 'Bad password'|grep $i |wc -l`;

# Si son mas de dos veces guardamos la IP en la variable "badip"
if [ "$brute" -gt 2 ];
then badip=`logread|grep "Bad password"|grep -m 1 $i| awk '{print $14}'|awk '{print $1}' FS=":"`

# Comprobamos si la direccion IP ya esta en la lista de baneados:
oldban=`cat $destino/logfail2.log |grep $badip|wc -l`;

# Si la IP no aparece en la lista la anadimos a iptables.
if [ "$oldban" -lt 1 ];
then iptables -I $alcance 1 -s $badip -j LOG --log-prefix "--ATAQUE--FUERZA--BRUTA--";
iptables -I $alcance 2 -s $badip -j DROP;

# Por ultimo anadimos la IP al archivo de baneados "$destino/logfail2.log" y la hora a la

# que terminara el baneo de esa IP en formato epoch(segundos desde 01-01-1970)
fecha_actual=`date +%s`
unban_date=`expr $fecha_actual + $ban_time`
echo "$unban_date:$badip" >> $destino/logfail2.log;
fi;
fi;
done;

#================================================================================================
#===============================BANEO INTENTOS USUARIOS NO VALIDOS===============================                

# Comprobamos las conexiones y el numero de veces que el resultado ha sido "invalid shell"                                                                          

for i in `logread |grep "Child connection"|awk '{print $11}'|awk '{print $1}' FS=":"'`
do brute=`logread|grep -A 4 $i |grep "Login attempt for nonexistent"|wc -l`

if [ "$brute" -gt 2 ];                                                                                                                                            
then badip=`logread|grep "Child connection"|grep -m 1 $i| awk '{print $11}'|awk '{print $1}' FS=":"`
# Comprobamos si la direccion IP ya esta en la lista de baneados:                                                                                                
oldban=`cat $destino/logfail2.log |grep $badip|wc -l`;                                                                                                              
                                                                                                                                                                  
# Si la IP no aparece en la lista la anadimos a iptables.                                                                                                        
if [ "$oldban" -lt 1 ];                                                                                                                                          
then iptables -I $alcance 1 -s $badip -j LOG --log-prefix "--ATAQUE--FUERZA--BRUTA--";                                                                      
iptables -I $alcance 2 -s $badip -j DROP;                                                                                                                  
                                                                                                                                                                  
# Por ultimo anadimos la IP al archivo de baneados "$destino/logfail.log" y la hora a la
# que terminara el baneo de esa IP en formato epoch(segundos desde 01-01-1970)
fecha_actual=`date +%s`                                                                              
unban_date=`expr $fecha_actual + $ban_time`                                                                  
echo "$unban_date:$badip" >> $destino/logfail2.log;
fi;                                                                                              
fi;                                                                                              
done;                            


#================================================================================================
#=========================BORRADO DE BANEO TRANSCURRIDO EL TIEMPO ASIGNADO=======================

# Un bucle comprueba si alguno de los registros del fichero logfail2.log tiene una fecha anterior
# a la actual. En caso afirmativo borra las reglas de iptables y los registros del log.

fecha_actual=`date +%s`
for z in `cat $destino/logfail2.log`
do unban_time=`echo $z|awk -F ":" '{print $1}'`
unban_ip=`echo $z|awk -F ":" '{print $2}'`
if [ "$unban_time" -lt "$fecha_actual" ]
then sed -i '/'$unban_ip'/d' $destino/logfail2.log
unban_rule=`iptables -L -n --line-numbers|grep -m 1 $unban_ip|awk '{print $1}'`
iptables -D $alcance $unban_rule
iptables -D $alcance $unban_rule
fi
done

« Última modificación: 08-03-2016, 11:13 (Martes) por hardwarer » En línea
vk496
*******
Desconectado Desconectado

Mensajes: 2192



Ver Perfil WWW
« Respuesta #1 : 13-09-2014, 12:23 (S?bado) »

Muy bueno!

Tengo que probarlo

Salu2
En línea
Tki2000
Moderador
*
Desconectado Desconectado

Mensajes: 1704


Ver Perfil
« Respuesta #2 : 13-09-2014, 13:33 (S?bado) »

Muy buena idea...  Angry Angry Angry
En línea

No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« Respuesta #3 : 13-09-2014, 15:11 (S?bado) »

Me alegra que os guste el script, mas adelante me gustaria añadirle algunas funciones automaticas mas como por ejemplo:

Volver a banear automaticamente las IP al encender el router, en vez de tener que hacerlo uno mismo.
Establecer un tiempo de baneo configurable por el usuario.
Creo que con eso ya sería suficiente para enfrentarse a los robot SSH que circulan por la red, que no son pocos  Tongue

Si alguien necesita ayuda para hacerlo funcionar o para configurarlo en otro sistema que me lo diga y lo miro.

SALU2
En línea
Tki2000
Moderador
*
Desconectado Desconectado

Mensajes: 1704


Ver Perfil
« Respuesta #4 : 13-09-2014, 17:41 (S?bado) »

Me alegra que os guste el script, mas adelante me gustaria añadirle algunas funciones automaticas mas como por ejemplo:

Volver a banear automaticamente las IP al encender el router, en vez de tener que hacerlo uno mismo.
Establecer un tiempo de baneo configurable por el usuario.
Creo que con eso ya sería suficiente para enfrentarse a los robot SSH que circulan por la red, que no son pocos  Tongue

Eso sí que sería un buen aporte...  Grin
En línea

No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« Respuesta #5 : 14-09-2014, 10:08 (Domingo) »

Estoy intentando modificar el script para que banee una IP durante X tiempo y luego sea desbaneado (Creo que es mas util contra los bots asi), pero no me furula la cabeza bien a estas horas. Dejo aquí el invento para no perderlo y lo acabo otro dia.
Salu2

Añadido al script:

Baneo automatico de las IPs en la primera ejecucion del script despues de reiniciar el router.
Opcion para configurar el tiempo de baneo (default 86400 segundos= 24 horas)
Desbaneo automatico de las IPs despues del tiempo de baneo.
Deteccion de intentos de conexion con usuarios no validos.
« Última modificación: 20-09-2014, 10:21 (S?bado) por hardwarer » En línea
Tki2000
Moderador
*
Desconectado Desconectado

Mensajes: 1704


Ver Perfil
« Respuesta #6 : 14-09-2014, 13:13 (Domingo) »

@hardwarer : Estás hecho un "mostruo"...  Angry Angry Angry
En línea

No habrás entendido algo, hasta que seas capaz de explicárselo a tu abuela...
Hacemos pantallas con píxeles casi invisibles, para luego ampliar la letra porque no la vemos... Bonita paradoja...
Creamos analfabetos tecnológicos con una velocidad pasmosa. Todo el mundo "maneja" tecnología, casi nadie sabe lo que tiene entre las manos, pero todo el mundo opina.
El analfabetismo, antes, pasaba desapercibido. Ahora, se transmite por Internet y las redes sociales.
vk496
*******
Desconectado Desconectado

Mensajes: 2192



Ver Perfil WWW
« Respuesta #7 : 14-09-2014, 23:35 (Domingo) »

Buha, que buena XD

Pido que se borre el comentario mio (#6), el cabroncete no ha tenido piedad, lo ha hecho el solito.


Solo una cosa que comentar:

zone_wan_input no me funciona en OpenWRT. A mi me va con: INPUT

Salu2
En línea
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« Respuesta #8 : 15-09-2014, 00:00 (Lunes) »

Buha, que buena XD

Pido que se borre el comentario mio (#6), el cabroncete no ha tenido piedad, lo ha hecho el solito.


Solo una cosa que comentar:

zone_wan_input no me funciona en OpenWRT. A mi me va con: INPUT

Salu2

 Grin siempre me pasa igual cuando me pongo con un script, empiezo a pensar, oye estaría bien que hiciera esto y lo otro y tambien aquello... y no paro hasta que funciona y si hace falta ni duermo  Grin Grin

Por cierto si que es verdad, usar las cadenas "reservadas" como zone_wan_input puede dar problemas, y ya lo advierten en la documentacion y no recomiendan usarlas para añadir cadenas personalizadas, por eso han puesto las cadenas de usuario "input_wan_rule, input_lan_rule etc... pero como a mi me funcionaba mientras lo probaba pues lo he dejado así, pero otro día lo cambio para que sea 100% compatible usando la cadena input_wan_rule que sería lo recomendable
salu2
En línea
jar229
Moderador
*
Desconectado Desconectado

Mensajes: 4558



Ver Perfil
« Respuesta #9 : 15-09-2014, 11:16 (Lunes) »

Le pongo chincheta unas semanitas y lo añado al [Índice] Hilos relevantes de OpenWrt
En línea

En venta:

Portátil Lenovo Thinkpad T430

Intel Core i5 de tercera generación
4 GB DDR3 (16 max.)
Disco duro de 320 GB y 7200 RPM
DVD-RW
Pantalla LED HD+ 14"
Resolución de 1366 x 768
Intel HD Graphics 4000
Sonido Audio de Alta Definición
LAN Gigabit
Wifi Intel 802.11a/g/n
2 x USB 2.0
2 x USB 3.0
Lector de Tarjetas
1 x VGA, Mini DisplayPort (HDMI)
Batería 6 celdas
Cargador Lenovo
Teclado francés, convertido en español con vinilos de alta calidad
Buen estado estético. Sólo leves marcas de uso
225€ env.incl.
Pteridium
Moderador
*
Desconectado Desconectado

Mensajes: 959

No sabré muchas cosas, pero sí leer y buscar.


Ver Perfil
« Respuesta #10 : 19-09-2014, 10:54 (Viernes) »

Yo tenía el mismo problema y lo solucioné cambiando el puerto SSH, pero esta solución mola más.
En línea

Borraré todos los posts en los que se vea claramente que el que publica no ha leído con detenimiento el hilo en el que ha escrito, ni se ha molestado en buscar una posible solución, o si lo que pregunta ya se ha tratado con anterioridad.
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« Respuesta #11 : 19-09-2014, 17:25 (Viernes) »

Yo tenía el mismo problema y lo solucioné cambiando el puerto SSH, pero esta solución mola más.


Yo también lo solucioné cambiando el puerto a uno muy superior pero.....despues de unos días encontraron el servicio en ese otro puerto también!! (y eso que es un puerto por encima de 1024, los famosos well known)
Supngo que es cuestión de tiempo, primero unos robots escanean todos los puertos y luego en función de la respuesta ya saben que servicio está corriendo y al ataque otra vez... y como tengo la máquina funcionando 24/7 al final te encuentran...
En línea
Pteridium
Moderador
*
Desconectado Desconectado

Mensajes: 959

No sabré muchas cosas, pero sí leer y buscar.


Ver Perfil
« Respuesta #12 : 19-09-2014, 17:56 (Viernes) »

Yo tenía el mismo problema y lo solucioné cambiando el puerto SSH, pero esta solución mola más.


Yo también lo solucioné cambiando el puerto a uno muy superior pero.....despues de unos días encontraron el servicio en ese otro puerto también!! (y eso que es un puerto por encima de 1024, los famosos well known)
Supngo que es cuestión de tiempo, primero unos robots escanean todos los puertos y luego en función de la respuesta ya saben que servicio está corriendo y al ataque otra vez... y como tengo la máquina funcionando 24/7 al final te encuentran...
Yo le puse el puerto 24 y hasta el día de hoy... También hay que decir que sólo está el 24 abierto al exterior y luego hay tres más redirigidos.  Azn
En línea

Borraré todos los posts en los que se vea claramente que el que publica no ha leído con detenimiento el hilo en el que ha escrito, ni se ha molestado en buscar una posible solución, o si lo que pregunta ya se ha tratado con anterioridad.
vk496
*******
Desconectado Desconectado

Mensajes: 2192



Ver Perfil WWW
« Respuesta #13 : 19-09-2014, 20:09 (Viernes) »

Yo os puedo pasar mi IP con el puerto...  Y ya os podéis tirar toda la vida probando, que nunca lo adivinareis XD

Salu2
En línea
mirasu
**
Desconectado Desconectado

Mensajes: 32


Ver Perfil
« Respuesta #14 : 19-09-2014, 20:48 (Viernes) »

Yo estoy buscando algo asi para mi ordenador. Puedo usar este script? o que podria hacer para hacerlo con todos los puertos importantes?

En línea
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« Respuesta #15 : 20-09-2014, 10:13 (S?bado) »

Yo os puedo pasar mi IP con el puerto...  Y ya os podéis tirar toda la vida probando, que nunca lo adivinareis XD

Salu2
A mi tampoco me van a sacar la contraseña por fuerza bruta por mucho que lo intenten, al menos las 64^9 primeras veces.... Grin
El problema no es solo ese, sino el hecho de que si un robot está lanzando intentos de autenticacion como un loco te va a llenar los archivos de log de "basura" y te está consumiendo ancho de banda, ademas si tienes priorizado con qos ese puerto como es mi caso pues la cosa se pone peor todavía... Personalmente me he encontrado los log con miles de intentos en una sola noche.
En línea
hardwarer
**
Desconectado Desconectado

Mensajes: 28


Ver Perfil
« Respuesta #16 : 20-09-2014, 10:16 (S?bado) »

Yo estoy buscando algo asi para mi ordenador. Puedo usar este script? o que podria hacer para hacerlo con todos los puertos importantes?


Para Linux tienes fail2ban, un script escrito con Python que se puede configurar para cualquier puerto o aplicacion.
No tengo ni idea si existe algo así para windows.
En línea
mirasu
**
Desconectado Desconectado

Mensajes: 32


Ver Perfil
« Respuesta #17 : 20-09-2014, 10:31 (S?bado) »

Muchas gracias hardwrer
En línea
arfonzo
**
Desconectado Desconectado

Mensajes: 46


Ver Perfil
« Respuesta #18 : 01-10-2014, 19:10 (Mi?rcoles) »

Una pregunta de novato total, ¿cómo se ejecuta un script?
¿Se crea el archivo en formato.sh y se ejecuta como el de la configuración de Movistar de Noltari?
En línea
arfonzo
**
Desconectado Desconectado

Mensajes: 46


Ver Perfil
« Respuesta #19 : 02-10-2014, 12:32 (Jueves) »

Una pregunta de novato total, ¿cómo se ejecuta un script?
¿Se crea el archivo en formato.sh y se ejecuta como el de la configuración de Movistar de Noltari?
Vale, creo que me voy aclarando un poco.
No se hace como lo de movistar, estoy casi seguro.
¿Donde se añade?, ¿desde luci o modificando algún archivo con vi?
En línea
Páginas: [1] 2 3 Ir Arriba Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Las cookies de este sitio web se usan para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar el tráfico. Además, compartimos información sobre el uso que haga del sitio web con nuestros partners de redes sociales, publicidad y análisis web, quienes pueden combinarla con otra información que les haya proporcionado o que hayan recopilado a partir del uso que haya hecho de sus servicios
Si continúa navegando consideramos que acepta su uso. OK Más información | Y más
Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines
SMFAds for Free Forums