Autor Tema: Script Banear direcciones IP contra ataques SSH (Openwrt BB 14.07)  (Leído 17591 veces)

0 Usuarios y 1 Visitante están viendo este tema.

arfonzo

  • Visitante
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?
Y sigo investigando:
¿Se mete en el apartado de reglas propias del cortafuegos?



Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1982
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?

Crea un fichero con vi y copia el contenido dentro.
Graba el fichero y házlo ejecutable con
Código: [Seleccionar]
chmod +x miscript.shEjecútalo con ./miscript.sh &

Mi consejo sería ponerlo para ejecutarse en /etc/rc.local antes del exit 0 para que se ejecute inmediatamente al reiniciar el router.

Código: [Seleccionar]
/lugardondeesteelscript/miscript.sh &

exit 0

Y después hacer que se ejecute cada cierto tiempo mediante cron:

Nos vamos a System -> Scheduled Tasks y agregamos lo siguiente:

Código: [Seleccionar]
*/5 * * * * /lugardondeesteelscript/miscript.sh
Si quieres editarlo manualmente, el fichero está en /etc/contabs/root
Con lo anterior ejecutamos el script cada 5 minutos.

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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.

arfonzo

  • Visitante
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?

Crea un fichero con vi y copia el contenido dentro.
Graba el fichero y házlo ejecutable con
Código: [Seleccionar]
chmod +x miscript.shEjecútalo con ./miscript.sh &

Mi consejo sería ponerlo para ejecutarse en /etc/rc.local antes del exit 0 para que se ejecute inmediatamente al reiniciar el router.

Código: [Seleccionar]
/lugardondeesteelscript/miscript.sh &

exit 0

Y después hacer que se ejecute cada cierto tiempo mediante cron:

Nos vamos a System -> Scheduled Tasks y agregamos lo siguiente:

Código: [Seleccionar]
*/5 * * * * /lugardondeesteelscript/miscript.sh
Si quieres editarlo manualmente, el fichero está en /etc/contabs/root
Con lo anterior ejecutamos el script cada 5 minutos.



Ok, mil gracias, en cuanto llegue a casa lo pruebo.
Así da gusto hasta para un novato...

Edito, que a veces corro mucho y así tardo más.
¿cuando dices que lo grabe y luego te refieres a "/lugardondeesteelscript/", lo puedo grabar en /root/ o en algun otro sitio?
Cuando hice el escript de Noltari para imagenio copie directamente el "movistar.sh" ahí con el programa winSCP, imagino que así también valdra.
« Última modificación: 03-10-2014, 11:06 (Viernes) por arfonzo »

arfonzo

  • Visitante
Vale, sigo intentando aprender, a ver si es algo así lo que tengo que hacer:

Abro la terminal por Putty
escribo "vi scriptbaneo.sh"
copio el contenido dentro: selecciono todo, Control+C, voy a Putty y pincho con botón derecho del raton.
escribo ":wq"

escribo "chmod +x scriptbaneo.sh
escribo "./scriptbaneo.sh

abro /etc/rc.local con el winSCP (seguro que hay otra manera, pero soy muyyy novato)
edito con winSCP es fichero añadiendo: "/lugardondeesteelscript/scriptbaneo.sh &" antes de la linea "exit 0"

¿lo he entendido bien?
Ahora solo me falta saber donde puedo colocar el script, es decir saber "/lugardondeesteelscript/", que es lo que preguntaba antes si puede ser en "/root/" o es mejor en otro sitio.

Gracias y disculpad la ignorancia.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1982
Vale, sigo intentando aprender, a ver si es algo así lo que tengo que hacer:

Abro la terminal por Putty
escribo "vi scriptbaneo.sh"
copio el contenido dentro: selecciono todo, Control+C, voy a Putty y pincho con botón derecho del raton.
escribo ":wq"

escribo "chmod +x scriptbaneo.sh
escribo "./scriptbaneo.sh

abro /etc/rc.local con el winSCP (seguro que hay otra manera, pero soy muyyy novato)
edito con winSCP es fichero añadiendo: "/lugardondeesteelscript/scriptbaneo.sh &" antes de la linea "exit 0"

¿lo he entendido bien?
Ahora solo me falta saber donde puedo colocar el script, es decir saber "/lugardondeesteelscript/", que es lo que preguntaba antes si puede ser en "/root/" o es mejor en otro sitio.

Gracias y disculpad la ignorancia.

Si quieres meterlo en /root/ está bien. Yo todas las configuraciones las meto en /etc/, pero cada uno tiene su sistema...
Ya que has usado el vi en el caso anterior, ¿no es casi mejor hacer vi /etc/rc.local desde la propia consola, en lugar de acceder al fichero en remoto con SCP?  ^-^
En vi, si quieres "escribir y salir", puedes poner ":x" en lugar de ":wq".
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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.

arfonzo

  • Visitante
Ok, pues probaré que tal.
entiendo entonces que antes de escribir "vi scriptbaneo.sh", tengo que entrar en /etc/ de este modo "cd/etc/", ¿no?
Y luego para editar desde vi, dentro de /etc/, escribo "vi rc.local", voy hasta la linea de antes de "exit 0" y pulso "a", añado "/etc/scriptbaneo.sh &" y luego despues de la linea "exto 0" pulso "enter" y escribo ":x" y ¿ya esta
lo de hacerlo desde winSCP es porque no he utilizado el vi en mi vida y no lo tenia muy claro, pero así aperndo.
Gracias majete.

Disculpa que te esté cosiendo a preguntas, pero es que en mi vida habia cacharreado con la informática más allá de rootear un android para mi hija (y para eso hay tutoriales hasta para torpes como yo) e instalar alguna cosa en windows.
« Última modificación: 03-10-2014, 12:57 (Viernes) por arfonzo »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1982
Ok, pues probaré que tal.
entiendo entonces que antes de escribir "vi scriptbaneo.sh", tengo que entrar en /etc/ de este modo "cd/etc/", ¿no?
Y luego para editar desde vi, dentro de /etc/, escribo "vi rc.local", voy hasta la linea de antes de "exit 0" y pulso "a", añado "/etc/scriptbaneo.sh &" y luego despues de la linea "exto 0" pulso "enter" y escribo ":x" y ¿ya esta
lo de hacerlo desde winSCP es porque no he utilizado el vi en mi vida y no lo tenia muy claro, pero así aperndo.
Gracias majete.

Disculpa que te esté cosiendo a preguntas, pero es que en mi vida habia cacharreado con la informática más allá de rootear un android para mi hija (y para eso hay tutoriales hasta para torpes como yo) e instalar alguna cosa en windows.

En realidad en vi yo no utilizo la "a" de añadir, sino la "i" de insertar... las dos hacen lo mismo...  ;D
También puedes hacer vi /etc/scriptbaneo.sh y te ahorras el cambiar de directorio...
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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.

arfonzo

  • Visitante
Ok, pues probaré que tal.
entiendo entonces que antes de escribir "vi scriptbaneo.sh", tengo que entrar en /etc/ de este modo "cd/etc/", ¿no?
Y luego para editar desde vi, dentro de /etc/, escribo "vi rc.local", voy hasta la linea de antes de "exit 0" y pulso "a", añado "/etc/scriptbaneo.sh &" y luego despues de la linea "exto 0" pulso "enter" y escribo ":x" y ¿ya esta
lo de hacerlo desde winSCP es porque no he utilizado el vi en mi vida y no lo tenia muy claro, pero así aperndo.
Gracias majete.

Disculpa que te esté cosiendo a preguntas, pero es que en mi vida habia cacharreado con la informática más allá de rootear un android para mi hija (y para eso hay tutoriales hasta para torpes como yo) e instalar alguna cosa en windows.

En realidad en vi yo no utilizo la "a" de añadir, sino la "i" de insertar... las dos hacen lo mismo...  ;D
También puedes hacer vi /etc/scriptbaneo.sh y te ahorras el cambiar de directorio...

Estoy buscando un emoticono de esos que hacen reverencias, pero no lo encuento, te pongo el de los aplausos:

 >:(

Mil gracias y ya posteraré como acaba el tema (si con las indicaciones que me estas dando no soy capaz, entonces habra que colgarme de las orejas en la plaza del pueblo como escarmiento)

arfonzo

  • Visitante
Ejecútalo con ./miscript.sh &


Cuando hago esto, Putty me contesta:
"root@OpenWrt:/etc# cat: can't open '/root/logfail2.log': No such file or directory
cat: can't open '/root/logfail2.log': No such file or directory"

Edito: ¿tengo qué crear primero el fichero logfail2.log?
« Última modificación: 03-10-2014, 16:03 (Viernes) por arfonzo »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1982
Ejecútalo con ./miscript.sh &


Cuando hago esto, Putty me contesta:
"root@OpenWrt:/etc# cat: can't open '/root/logfail2.log': No such file or directory
cat: can't open '/root/logfail2.log': No such file or directory"

Edito: ¿tengo qué crear primero el fichero logfail2.log?

Pues eso parece.
Pon esto para crear el fichero vacío:
Código: [Seleccionar]
touch /root/logfail2.log
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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.

arfonzo

  • Visitante
Hecho.
Ahora ejecuto no contesta nada, sigo adelante...
Mil gracias.

arfonzo

  • Visitante
 >:( pues parece que ya esta hecho...
Menos mal que Tki2000 ha estado al quite para evitar que hubiese metido la pata hasta el cuello, te debo una (o más).
Ahora ya tengo otras cosas en la cabeza para hacerle al router, pero primero leeré y después intentaré preguntar lo mínimo posible en el hilo que toque.

p.D. ¿Hay manera de comprobar que he hecho todo bien?

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1982
>:( pues parece que ya esta hecho...
Menos mal que Tki2000 ha estado al quite para evitar que hubiese metido la pata hasta el cuello, te debo una (o más).
Ahora ya tengo otras cosas en la cabeza para hacerle al router, pero primero leeré y después intentaré preguntar lo mínimo posible en el hilo que toque.

p.D. ¿Hay manera de comprobar que he hecho todo bien?

La prueba rápida está en intentar hacer una sesión SSH y poner mal el password por lo menos dos veces. En cuanto se ejecute el script te prohibirá el acceso. Lo malo de eso es que no podrás mirar lo que ha pasado porque ya no te dejará entrar por SSH, a no ser que le cambies la IP al PC con el que intentas entrar al router...  ^-^
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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.

arfonzo

  • Visitante
Pues mañana pruebo cambiándole al portátil la ip a una estática sin usar y metiendo la pata dos veces y posteo el resultado.
De nuevo mil gracias (te estas inflando a ellas)

faio86

  • Visitante
Hola
nuestro Openwrt
1.¿seria sensible a un ataque con hydra ssh desde el exterior?  :( :( :( :(
2.¿O solo si lo configuramos abriendo puertos y tal para el exterior?
3.¿La configuración por defecto lo permite o no?
Espero que la respuesta sea que no. :-X :-X

Saludos.
« Última modificación: 05-10-2015, 12:45 (Lunes) por faio86 »

mkfs

  • Visitante
vuenas cuando pruebo el script me da esto
cat: read error: Is a directory
lo tengo en la ruta /etc guardado cual es mi error
« Última modificación: 09-01-2016, 19:15 (Sábado) por mkfs »

hardwarer

  • Visitante
Hola
nuestro Openwrt
1.¿seria sensible a un ataque con hydra ssh desde el exterior?  :( :( :( :(
2.¿O solo si lo configuramos abriendo puertos y tal para el exterior?
3.¿La configuración por defecto lo permite o no?
Espero que la respuesta sea que no. :-X :-X

Saludos.

Es sensible a hydra, banea la IP de la máquina que tenga hydra. Le da 2 intentos, al tercero, adios amigo.


ACTUALIZACION 07 MARZO 2016:

ACTUALIZACION 07 MARZO 2016:

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.pre y script fail2ban.sh a la carpeta /tmp o cualquier otra y ejecutar instalar.sh
# chmod 755 instalar.sh
#./instalar.sh
« Última modificación: 07-03-2016, 19:08 (Lunes) por hardwarer »

hardwarer

  • Visitante
vuenas cuando pruebo el script me da esto
cat: read error: Is a directory
lo tengo en la ruta /etc guardado cual es mi error


Descarga la nueva version y editas los archivos instalar.sh y fail2ban.pre para que lo instale en /etc (si no lo instala en /root por defecto)

Archivos instalar.sh y fail2ban.pre:

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


« Última modificación: 08-03-2016, 10:16 (Martes) por hardwarer »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 1982
Re: Script Banear direcciones IP contra ataques SSH (Openwrt BB 14.07)
« Respuesta #38 en: 30-05-2017, 18:57 (Martes) »
Ya que últimamente yo también he estado recibiendo ataques, a una de las redes que tengo por ahí perdida, y cumpliendo los deseos de hardwarer,
Animo a todos a modificar el script y mejorarlo o lo que sea.
Me he decidido a meterle mano a este script, que llevo usando desde hace tiempo, y no sé si lo habré mejorado o no, pero a mi me está sirviendo para parar muchos ataques.

He modificado el lugar del fichero de baneos, para no machacar la flash del router, y le he añadido la opción de almacenar el fichero de baneos en flash, para continuar por donde íbamos, y un fichero de IPs manuales, para poner a mano las que queramos banear indefinidamente.

No he elaborado el fichero de instalación, como hizo hardwarer. Es simplemente el script a pelo, en el que podemos definir las rutas de los distintos ficheros que vamos a usar.
En mi caso lo he instalado todo en /etc/fail2ban, ya que de esa forma lo guardo automáticamente cuando un backup de la configuración del router. Pero podéis grabarlo donde gustéis, siempre y cuando, cambiéis las rutas de los ficheros en el script.

El código es éste:

Código: [Seleccionar]
#!/bin/sh
#============================================================================================================
# SCRIPT
#============================================================================================================

# Script realizado por hardwarer, para el foro de seguridadwireless.net
# Este script detecta los intentos de conexion fallidos al servidor SSH, ya sea por contraseña 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.

# Modificaciones Tki2000 (2017-05-15)
#
# 1.- El fichero de baneos se escribe en memoria RAM para no machacar la flash del router
# 2.- Si grabamos previamente un fichero de baneos, de la RAM a la flash, lo usará al inicio.
# 3.- Posibilidad de banear manualmente ips, además de las detectadas en el script, durante un tiempo indefinido.
# 4.- Las IPs repetidas, entre ficheros, no se tienen en cuenta nada más que una vez al banear. (2017-05-30)
#
# El fichero de baneos en la RAM, se encuentra por defecto en /tmp/banned.ips
# El fichero de baneos en la flash, se encuentra por defecto en /etc/fail2ban/banned.ips
# El fichero de baneos manual, se encuentra por defecto en /etc/fail2ban/banned_static.ips
# El formato del fichero de baneos manual, es de una IP por línea.
#
#============================================================================================================
#========================================== OPCIONES ========================================================

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

#ban_time=86400
# 86400 * 14 = 1209600
ban_time=1209600

# Definición de las rutas de los ficheros que se usan en el script.
# El fichero de banfile es el fichero de baneos y se maneja en memoria, para no machacar la flash del router.
# El fichero de banfile_stored es el fichero que podemos dejar grabado en la flash del router, para volver
#    a comenzar los baneos, por donde los dejamos. Previamente, antes de reiniciar el router debemos
#    grabar el fichero de la memoria, a la flash, claro.
# El fichero de banned_static, es un fichero para añadir manualmente ips que queramos desde el principio,
#    para banearlos de manera indefinida. El formato es de una IP por línea.

banfile="/tmp/banned.ips"
banfile_stored="/etc/fail2ban/banned.ips"
banfile_static="/etc/fail2ban/banned_static.ips"
fail2ban_running="/tmp/fail2ban.run"

# 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 ==================================================

# Comprobamos si acabamos de iniciar el router y en ese caso preelaboramos el fichero de baneos
# Modificación : Si tenemos un fichero grabado previo, lo usamos.
# Modificación : Si tenemos un fichero de ips para banear estático, preelaboramos el fichero de baneos.

if [ ! -f $fail2ban_running ]
then
   touch $fail2ban_running
  
   if [ -f $banfile_static ]
   then
      if [ -f $banfile ]
      then
         rm $banfile
      fi
      for x in `cat $banfile_static | awk '{print $1}' FS=":"`
      do
         echo 2100000000:$x >> $banfile
      done
   fi
  
   if [ -f $banfile_stored ]
   then
      for l in `cat $banfile_stored | awk '{print $2}' FS=":"`
      do
         exists=`cat $banfile | grep $l | wc -l`
         if [ "$exists" -lt 1 ]
         then
            fecha_actual=`date +%s`
            unban_date=`expr $fecha_actual + $ban_time`
            echo "$unban_date:$l" >> $banfile
         fi
      done
   fi

   # Si es la primera vez que lanzamos el script, debemos crear el fichero donde se guardan
   # las ips baneadas, si no lo hemos creado ya, en los procedimientos anteriores
   if [ ! -f $banfile ]
   then
      touch $banfile
   fi
  
   for x in `cat $banfile | 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 Y MAL PASSWORD =======================

# 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 tres veces guardamos la IP en la variable "badip"
   if [ "$brute" -gt 3 ];
   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 $banfile | 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 "$banfile" 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" >> $banfile;
      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 3 ];
   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 $banfile | 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" >> $banfile;
      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 $banfile`
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' $banfile
      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

Como siempre, usad estos datos, bajo vuestra propia responsabilidad.
« Última modificación: 30-05-2017, 19:02 (Martes) por Tki2000 »
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.
Solo a un mandril epiléptico se le podría haber ocurrido diseñar la cinta de menú de M$.
Los dispositivos táctiles y las pantallas pequeñas son una lacra para la información relevante y el desarrollo de interfaces de usuario.

eduperez

  • Visitante
Re: Script Banear direcciones IP contra ataques SSH (Openwrt BB 14.07)
« Respuesta #39 en: 31-05-2017, 08:00 (Miércoles) »
Dos sugerencias de mejoras:

  • A medida que se van añadiendo direcciones bloqueadas, la lista se puede hacer muy larga, y eso puede afectar al rendimiento; iptables no trabaja muy bien con grandes cantidades de reglas. Sería interesante reconvertir el script para usar ipsets (https://wiki.openwrt.org/doc/uci/firewall#ip_sets); es una manera de crear una regla "genérica" y después añadirle direcciones, y tiene mejor rendimiento con listas largas. Además, gestiona de manera automática la caducidad del bloqueo.
  • Yo también recibo ataques, y normalmente me llegan varios intentos seguidos desde una misma dirección, y después ya no me vuelve a aparecer esa dirección en los logs. Revisar los mensajes cada 5 minutos tiene el problema de que bloqueas el ataque cuando ya a acabado. Otra mejora que se podría hacer al script es recoger la salida de logread en vivo mediante una pipe, de manera que se bloqueasen las direcciones de manera inmediata.

A ver si encuentro un rato, y me pongo con esto...

//FINAL Y MÁS DOS RESPUESTAS