viernes, 4 de marzo de 2011

DenyHosts: bloquear intentos fallidos de ssh y enviar reporte vía mail

DenyHosts es un script escrito en Python que lo que hace es prevenirnos de los ataques por fuerza bruta en SSH. Para ello, monitorea el archivo /var/log/auth.log en busca de intentos de login fallidos y bloquea las direcciones IP de aquellos equipos de donde proviene el ataque.
Lo primero que debemos verificar antes de instalar es si tenemos Python instalado en nuestro sistema (casi seguro que si). Para ello escribiremos en una terminal lo siguiente:


Con el primer comando veremos los paquetes disponibles, y con el segundo la versión instalada
Luego de confirmar esto procedemos a la instalación con nuestro amado apt-get:

sudo apt-get install denyhosts

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

sudo nano /etc/denyhosts.conf

Aquí se pueden configurar muchas cosas, destaco algunas puntuales:

PURGE_DENY =
Nos permite configurar el tiempo en el cual se borrarán las IPs bloqueadas.
BLOCK_SERVICE =
Nos permite definir 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.
DENY_THRESHOLD_INVALID = 
Nos permite configurar el numero de intentos fallidos de login para una cuenta de usuario inexistente.
DENY_THRESHOLD_VALID = 
Tiene la misma función que DENY_THRESHOLD_INVALID = pero para usuarios que existen (root se cuenta aparte).
DENY_THRESHOLD_ROOT = 
También tiene la misma función que DENY_THRESHOLD_INVALID = pero para el root.

Además, podemos ver los valores predeterminados para eliminar los usuarios denegados:
AGE_RESET_VALID=5d (Para usuarios con cuentas existentes 5 días)
AGE_RESET_ROOT=25d (Para root 25 días)
AGE_RESET_RESTRICTED=25d (Para los usuarios restringidos definidos en el archivo /var/lib/denyhosts/restricted-usernames 25 días)
AGE_RESET_INVALID=10d (Para los usuarios con cuentas inexistentes 10 días)

Para iniciar el servicio:

sudo /etc/init.d/denyhosts start

Para reiniciar usamos "restart" y para detener "stop".

Por otro lado tenemos la opción de elegir algún host (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: 192.168.1.15 

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

ALL: 192.168.1.15

En caso de querer desbloquear un host tenemos que detener el servicio de DenyHosts:

sudo /etc/init.d/denyhosts stop

Y editamos los siguientes archivos con sudo nano. En esos archivos van a aparecer todas las IPs bloqueadas, solo tenemos que eliminarlas y guardar:

/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/user-hosts

Luego iniciamos nuevamente el servicio:

sudo /etc/init.d/denyhosts start

En el caso de estar utilizando una distro diferente a Debian / Ubuntu podes buscar los archivos donde DenyHosts guarda sus datos de la siguiente forma:

cat /etc/denyhosts.conf | grep "WORK_DIR ="

También podrías buscar por IP bloqueada así:

grep direccionip ./*

Y para terminar, también tenemos la opción de configurar una cuenta de mail y un SMTP para que nos llegue un reporte por esa vía:

ADMIN_EMAIL = ardillasenlared@gmail.com (Acá va la dirección de destino)
SMTP_HOST = smtp.dominio.com
SMTP_PORT = 25

Si el SMTP requiere autenticación también hay que habilitar:
SMTP_USERNAME= Usuario de autenticación
SMTP_PASSWORD= Password de SMTP

Para configurar remitente:
SMTP_FROM =

Para configurar asunto del mail:
SMTP_SUBJECT =

Con esto mas o menos queda decente, puede revisar mas configuraciones para realizar en /etc/denyhosts.conf. Ojalá les sirva! ;)

Referencias: UserLinux y MegaLinux

No hay comentarios:

Publicar un comentario