Denyhost – Bloqueo de ip atacante en el servicio SSH

Este programa hecho en Python, lee un archivo de logs del sistema como “/var/log/auth.log” y detecta los intentos de acceso ilegales al demonio SSH, ya sea mediante ataques de diccionario, o mediante fuerza bruta, tomando como medida el bloque de la dirección ip haciendo uso de listas negras.

El funcionamiento del programa es sencillo. Cada cierto tiempo, programable por el usuario y que es conveniente que sea de unos 30 segundos o inferior, DenyHosts comprueba el contenido del archivo /var/log/auth.log (o de cualquier otro archivo de logs del sistema que se le indique en su configuración) y si los intentos de acceso al servidor SSHD sobrepasan unos umbrales predefinidos por el usuario, DenyHosts introduce la IP atacante en el archivo /etc/hosts.deny del servidor. Con ello, ya no se podrá volver a intentar la conexión desde esa IP. El programa permite filtrar solamente los siguientes accesos al demonio SSHD, o a todos los servicios del servidor con soporte de tcp_wrappers mediante el uso del mandato “BLOCK_SERVICE = ALL” en la configuración de DenyHosts.

La configuración es muy sencilla e implica modificaciones en los archivos de configuración de DenyHost, es conveniente empezar con unos archivos /etc/hosts.deny y /etc/hosts.allow vacíos. Instalación:La instalación es de lo más sencillo, solo debemos abrir una consola/terminal y ejecutar el siguiente comando:

sudo apt-get install denyhosts

Una vez instalado podemos revisar la configuración del mismo editando el siguiente archivo:

sudo nano /etc/denyhosts.conf

Antes de hacer cualquier cambio hago copia de seguridad del archivo de configuración

sudo cp /etc/denyhosts.conf /etc/denyhosts.conf.bak

Aca se puede configurar el funcionamiento de Denyhost, entre las opciones más importantes se encuentran:

# Archivo que contiene los log de autorización y bloqueo en el sistema
SECURE_LOG = /var/log/auth.log
 
# Archivo que contiene las direcciones de ip asociadas al servicio bloqueado
HOSTS_DENY = /etc/hosts.deny
 
# Nos permite configurar el tiempo en el cual se borrarán las IPs bloqueadas
PURGE_DENY = 
 
# Que servicios serán bloqueados para los Hosts que nos ataquen
# Por defecto bloquea solo el SSH, pero se puede bloquear otro servicio o todos
BLOCK_SERVICE  = sshd
 
# cada vez que actue denyhost se registre en los registros del sistema
SYSLOG_REPORT=YES
 
# numero de intentos fallidos de login para una cuenta de usuario inexistente.
DENY_THRESHOLD_INVALID = 1
 
# numero de intentos fallidos de login para una cuenta de usuario existente
DENY_THRESHOLD_VALID = 3
 
# numero de intentos fallidos de login para la cuenta de root
DENY_THRESHOLD_ROOT = 1
 
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /var/lib/denyhosts
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/run/denyhosts.pid
 
# Datos de correo
ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
SMTP_FROM = DenyHosts
SMTP_SUBJECT = DenyHosts Report
 
# Valores predeterminados para eliminar los usuarios denegados (esta en dias "d")
# Para usuarios con cuentas existente
AGE_RESET_VALID=5d
# Para usuario root
AGE_RESET_ROOT=25d
# Para los usuarios restringidos definidos en el archivo /var/lib/denyhosts/restricted-usernames
AGE_RESET_RESTRICTED=25d
# Para usuarios con cuentas inexistente
AGE_RESET_INVALID=10d
 
# lugar donde se ubican los log de la actividad de denyhost
DAEMON_LOG = /var/log/denyhosts
 
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h

Cada vez que hacemos alguna modificación en este archivo debemos detener el servicio y volver a iniciarlo, reiniciarlo directamente o recargar su configuración. Cualquiera de las 3 opciones es válida, pero los más sencillo es recargar la configuración Iniciar servicio

sudo /etc/init.d/denyhosts start

Detener servicio

sudo /etc/init.d/denyhosts stop

Reiniciar servicio

sudo /etc/init.d/denyhosts restart

Recargar configuración

sudo /etc/init.d/denyhosts reload

Por otro lado tenemos la opción de elegir algún host (IP o rango de IPs) sobre el cual no se ejecute ningún tipo de restricción. Para ello editamos el siguiente archivo:

sudo nano /etc/hosts.allow

Allí añadimos la IP que no será bloqueada y el servicio. Por ejemplo:

sshd: 10.0.0.33

Ésto permitirá que los intentos fallidos de login para la IP 10.0.0.33 no bloqueen el servicio de SSH. Para no bloquear ningun servicio:

ALL: 10.0.0.33

Desbloquear una dirección IP Detener el servicio de DenyHosts:

sudo /etc/init.d/denyhosts stop

Y quitar la dirección IP de los siguientes archivos:

/etc/hosts.deny
/var/lib/denyhosts/hosts
/var/lib/denyhosts/hosts-restricted
/var/lib/denyhosts/hosts-root
/var/lib/denyhosts/hosts-valid
/var/lib/denyhosts/users-hosts

Guardamos los cambios y luego iniciamos nuevamente el servicio:

sudo /etc/init.d/denyhosts start

Como esta es una operación de lo más sencilla, se puede hacer un script que:

  • Detenga el servicio
  • Borre la dirección ip en los archivos antes mencionado
  • Inicie nuevamente el servicio

Script de desbloqueo de IP Creas un archivo de texto

gedit ~/desbloquearIP

Introduce el siguiente contenido

#!/bin/bash
echo "Deteniendo el servicio de denyhost!..."
/etc/init.d/denyhosts stop
 
echo "\n Respaldando los archivos de configuracion en /var/lib/denyhosts/bak/!..."
cp /etc/hosts.deny /etc/hosts.deny.bak
cp /var/lib/denyhosts/hosts /var/lib/denyhosts/bak/
cp /var/lib/denyhosts/hosts-restricted /var/lib/denyhosts/bak/
cp /var/lib/denyhosts/hosts-root /var/lib/denyhosts/bak/
cp /var/lib/denyhosts/hosts-valid /var/lib/denyhosts/bak/
cp /var/lib/denyhosts/users-hosts /var/lib/denyhosts/bak/
 
echo "\n Borrando el ip: $1 de los archivos de configurarion"
sed "/sshd: $1/d" /etc/hosts.deny.bak > /etc/hosts.deny
sed "/$1:/d" /var/lib/denyhosts/bak/hosts > /var/lib/denyhosts/hosts
sed "/$1:/d" /var/lib/denyhosts/bak/hosts-restricted > /var/lib/denyhosts/hosts-restricted
sed "/$1:/d" /var/lib/denyhosts/bak/hosts-root > /var/lib/denyhosts/hosts-root
sed "/$1:/d" /var/lib/denyhosts/bak/hosts-valid > /var/lib/denyhosts/hosts-valid
sed "/$1:/d" /var/lib/denyhosts/bak/users-hosts > /var/lib/denyhosts/users-hosts
echo "Iniciando el servicio de denyhost!..."
/etc/init.d/denyhosts start
 
echo "\n Los archivos de configuracion quedan de la siguiente manera:"
echo "\n /etc/hosts.deny:"
cat /etc/hosts.deny
echo "\n /var/lib/denyhosts/hosts:"
cat /var/lib/denyhosts/hosts
echo "\n /var/lib/denyhosts/hosts-restricted:"
cat /var/lib/denyhosts/hosts-restricted
echo "\n /var/lib/denyhosts/hosts-root:"
cat /var/lib/denyhosts/hosts-root
echo "\n /var/lib/denyhosts/hosts-valid:"
cat /var/lib/denyhosts/hosts-valid
echo "\n /var/lib/denyhosts/users-hosts:"
cat /var/lib/denyhosts/users-hosts

Damos permisos de ejecución a nuestro script

sudo chmod u+x ~/desbloquearIP

por ultimo ejecutamos el script, pasando como parámetro la dirección ip a desbloquear

sudo sh ~/desbloquearIP 10.0.0.33

lo que hace el script es hacer copias de seguridad de los archivos de configuración, detener el servicio, desbloquear la ip, iniciar nuevamente el servicio y mostrar como quedan los archivos de configuración. Hay muchas cosas que se le pueden mejorar al script, pero es un comienzo.   Referencia:

 

 

Sergio Daniel Casas

Publicado en General, GNU/Linux, Instalacion, Ubuntu

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Categorías

octubre 2011
L M X J V S D
« Sep   May »
 12
3456789
10111213141516
17181920212223
24252627282930
31