systemadmin.es > Curiosidades > Estadísticas de las IPs atacantes en el hosts.deny de un servidor

Estadísticas de las IPs atacantes en el hosts.deny de un servidor

Después de más de un año con un servidor configurado para almacenar en el /etc/hosts.deny el listado de todas las IPs que intentan acceder por fuerza bruta, ha llegado el momento de ver algunas estadísticas referentes a estos ataques.

El servidor se instaló hace más de un año y de las primeras cosas que instalé fue el DenyHosts, por lo que llevará un número muy próximo al uptime (si no igual)

# uptime
 08:40:39 up 463 days,  6:07,  1 user,  load average: 1.09, 1.09, 1.08

Primero de todo veremos de cuantas IPs estamos hablando:

# cat /etc/hosts.deny | grep -v  "^#" | awk '{ print $NF }' | grep -v "^$" | sort | uniq | wc -l
1059

Podemos hacer la media y nos salen a 2 ataques por día:

# echo "1059/463" | bc -l
2.28725701943844492440

Evidentemente habrá días con muchas IPs añadidas y otros sin ninguna.

Cada IP agregada me genera un correo, por lo que si no he borrado ninguno se pueden sacar otros datos. Por ejemplo, los 10 días con más IPs añadidas:

     24 02-09-09
     22 04-09-09
     19 17-08-09
     19 01-12-09
     18 21-08-09
     17 30-08-09
     17 09-09-09
     16 28-09-09
     15 16-08-09
     15 06-09-09

A continuación me pregunto si los atacantes trabajan todos los días por igual:

    282 Sunday
    276 Saturday
    274 Wednesday
    265 Monday
    260 Friday
    258 Thursday
    250 Tuesday

En gráfico de barras sería lo siguiente:

Gráfico de barras de ataques por día de la semana

Gráfico de barras de ataques por día de la semana

Los números son muy similares, por lo que no parece relevante. He comprobado la suma y no cuadra porque seguramente estoy cogiendo también datos de otros servidores. No lo afino a este servidor en concreto porque lo que se trata es de ver un poco los datos generales, no me importa que sea de un servidor o de dos. En este caso la muestra es de 1865 reports del DenyHosts.

Resulta curioso como el fin de semana es cuando relativamente más ataques hay. ¿Quizás es el factor humano de gente que se aburre? El resto de días asumo que más bien se trata prácticamente exclusivamente de bots.

Podemos ver también por meses y años:

2009-09 381
2009-08 300
2009-12 203
2009-10 191
2009-11 186
2009-06 139
2009-07 126
2009-05 79
2008-11 79
2008-10 50
2009-04 48
2008-12 46
2009-03 20
2008-09 7
2009-01 6
2009-02 4

Podemos ver la evolución a lo largo del tiempo:

Ataques por mes y año

Ataques por mes y año

Finalmente puede ser interesante verlo por países origen según el whois de la IP. Evidentemente puede no estar disponible el origen o ser falso:

# for i in $(cat /etc/hosts.deny | grep -v  "^#" | awk '{ print $NF }' | sort  | grep -v "^$" ); do whois $i | grep country | head -n1 | sed 's/#.*$//g' | awk '{ print $NF}'; done | tr [:upper:] [:lower:] | sort | uniq -c | sort -rn
    141 cn
    106 fr
     39 de
     37 in
     31 ru
     27 gb
     25 pl
     25 it
     18 kr
     17 ro
     15 nl
     15 jp
     13 es
     11 th
     11 hu
     11 hk
     11 cz
     10 tr
     10 br
      8 co
      8 bg
      7 ua
      7 se
      7 my
      7 at
      6 eu
      5 mx
      5 id
      5 ar
      4 gr
      4 ec
      4 dk
      4 be
      3 za
      3 vn
      3 no
      3 lk
      3 il
      3 ie
      3 cl
      2 tw
      2 si
      2 sg
      2 rs
      2 pt
      2 pa
      2 lu
      2 ir
      2 fi
      2 ch
      2 bd
      2 ae
      1 ve
      1 uy
      1 us
      1 tz
      1 tn
      1 sy
      1 sk
      1 sd
      1 sa
      1 ph
      1 pe
      1 nz
      1 mz
      1 mv
      1 mu
      1 mk
      1 md
      1 lv
      1 lt
      1 kz
      1 kg
      1 jo
      1 is
      1 hr
      1 ge
      1 ee
      1 dz
      1 bs
      1 au
      1 ad

No se porque no me extraña que el país del que más ataques se originen sea china.

10 comments to “Estadísticas de las IPs atacantes en el hosts.deny de un servidor”

  1. Yo mantengo un servidor en RedIris al que hace un par de meses tuve que borrar el fichero hosts.deny porque sobrepasaba 1Mbyte. En estos dos meses ha recogido ya cerca de 10.000 nuevas direcciones de atacantes.

  2. No esta nada mal. Yo hablo de un servidor pequeño en un hosting de francia, los servidores que tengo en producción en el trabajo no tienen el SSH abierto a internet (en el firewall) por lo que no puedo hacer lo mismo para ellos 🙁

    Es una lastima que lo borraras, sino estaría bien hacer lo mismo para ese servidor. Para el tema de la fecha lo he echo con los correos en un maildir, si los conservas estaría bien sacar algunos datos de allí, ya que hay mas “chicha”

  3. Me he imaginado que no era una IP “de riesgo” cuando he visto los datos. Los bloques de direcciones conflictivas (RedIris tiene un ancho de banda fabuloso y hay muchos organismos que usan direcciones IP públicas en todas sus máquinas de usuario sin ningún tipo de control) suelen estar muy, muy solicitadas. Te lo guardo entonces para dentro de 10 meses 😉

  4. Te tomo la palabra para el ficherito 😛

    En el trabajo anterior tenia un cluster (en RedIRIS también) que necesitaba tener el SSH abierto para que los usuarios se conectaran remotamente. En ese caso pusimos una permanencia de unos días para que no se llenara demasiado. Es una lastima que no tenga datos de entonces.

  5. Y no, los correos no los conservo (¡son miles!) pero podría hacerlo a partir de ahora con alguna regla para que me los mueva automaticamente de la carpeta de entrada a otra donde no molesten. Me pongo a ello.

  6. Yo lo tengo así con una regla de procmail:

    (...)
    DENYHOSTS=${MAILDIR}/.DenyHosts
    
    :0
    * ^X-Envelope-From: denyhosts@systemadmin\.es
    | /usr/local/bin/safecat "${MAILDIR}/tmp" "${DENYHOSTS}/new"
    
    (...)
    

    Si lo tiene que hacer tu cliente de correo lo tendrás que quitar porque te va a ralentizar un montón la descarga de correos

  7. Hola Jordi,

    Muy interesante el artículo. Trabajo en un ISP y se cumple la misma conclusión: “Cuando el diablo no tiene nada que hacer, con el rabo mata moscas”, los fines de semana y la época de verano es cuando mas ataques se registran.

    Por otra parte, te quería preguntar.. ¿Que software utilizas para hacer las gráficas? Gracias!

    Saludos,

  8. Hola Santi,
    Los gráficos los he hecho con el Google Docs a mano. Pero si quieres puedes automatizarlo con la Google Chart API:

    http://code.google.com/apis/chart/

    saludos,

  9. Hola.

    Pregunta tonta, por qué no cuentas las entradas en el denyhosts directamente:

    grep -c "^sshd: " /etc/hosts.deny
    

    En general, abusas de:

    cat fichero | grep patron
    

    En lugar de:

     grep patron fichero 

    O también:

     grep country | head -n1 

    En lugar de:

     grep -m1 country 

    directamente.

    Espero que no te sienten mal las críticas (si es que las ves fundadas), en general es un blog interesante, que parece sigue bastante gente, es importante ya que lamentablemente mucha gente infrautiliza la capacidad de la shell y comandos varios asociados, al tratar ficheros muy grandes, esos detalles son muy importantes, por lo menos según lo veo yo.

    Gracias por el artículo.
    Saludos.

  10. Para nada me tiene que sentar mal una cosa así. Es totalmente cierto que tengo ciertas malas costumbres, siendo la que mas canta el cat con el grep.

    En este caso concreto no me paré a mirar mucho como quedó el resultado porque es algo que hice a medida veia los resultados. En el caso de scripts me miro un poco más a que queden las cosas bien hechas.

    Abres un tema interesante, porque es muy cierto que si haces un time de un cat fichero | grep patrón vs un grep fichero patrón hay diferencia, por lo que se debe tener en cuenta.

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>