DenyHosts es un software de código abierto desarrollado en lenguaje Python por Phil Schwartz. Está diseñado principalmente para monitorear y analizar los registros del servidor SSH en busca de intentos de inicio de sesión no válidos, ataques basados en diccionarios y ataques de fuerza bruta al bloquear las direcciones IP de origen al agregarlo al archivo /etc/hosts.deny en el servidor y, por lo tanto, evitar el dirección IP de realizar más intentos de inicio de sesión.
Debido a su simplicidad y la posibilidad de configurar manualmente las reglas, se usa mucho como alternativa a Fail2ban, que es un poco más complicado de usar y configurar.
En este tutorial, le mostraré cómo instalar y configurar DenyHosts en su servidor CentOS 7.
Lea también:Cómo usar Fail2ban/Client en CentOS 7
Requisitos
Antes de continuar con la instalación, debemos asegurarnos de que nuestro sistema cumpla con todos los requisitos de software para compilar e instalar la aplicación. Y también debe configurarse con una dirección IP estática. El software DenyHosts depende del "ipaddr"
Módulo Python. En el primer paso, actualice los repositorios de su sistema y los paquetes de software, incluido el módulo de python, emitiendo los siguientes comandos.
#yum update
#yum install python-ipaddr -y
1. Instalación de DenyHosts desde el repositorio de Epel
Necesitamos instalar este paquete usando el repositorio de Epel, use el siguiente comando para instalarlo.
#yum install epel-release
#yum install denyhosts -y
Configuración de servidores denegados
Una vez instalado Denyhosts, debe agregar su IP a la lista de IP permitidas para asegurarse de que su propia dirección IP esté incluida en la lista blanca, para que nunca quede bloqueado.
# cat /etc/hosts.allow
#
# hosts.allow This file contains access rules which are used to
# allow or deny connections to network services that
# either use the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
sshd: 37.217.142.41
sshd: 37.217.142.42
sshd: 37.217.142.43
sshd: 37.217.142.44
A continuación, debe incluir en la lista negra todas las direcciones IP requeridas que desea bloquear. Podemos confirmar que nuestra dirección IP tampoco está en la lista negra.
# cat /etc/hosts.deny
#
# hosts.deny This file contains access rules which are used to
# deny connections to network services that either use
# the tcp_wrappers library or that have been
# started through a tcp_wrappers-enabled xinetd.
#
# The rules in this file can also be set up in
# /etc/hosts.allow with a 'deny' option instead.
#
# See 'man 5 hosts_options' and 'man 5 hosts_access'
# for information on rule syntax.
# See 'man tcpd' for information on tcp_wrappers
#
sshd: 78.189.206.37
sshd: 121.14.27.58
sshd: 1.246.228.161
sshd: 103.89.89.47
sshd: 116.29.148.2
# DenyHosts: Tue Jan 9 10:16:15 2018 | sshd: 222.186.174.81
sshd: 222.186.174.81
# DenyHosts: Tue Jan 9 10:40:46 2018 | sshd: 217.61.20.181
sshd: 217.61.20.181
# DenyHosts: Tue Jan 9 13:15:53 2018 | sshd: 112.86.117.182
sshd: 112.86.117.182
Habilitación del servicio DenyHost
Una vez configurado como requerido, podemos habilitar e iniciar nuestro servicio DenyHosts con los siguientes comandos:
# systemctl enable denyhosts
# systemctl start denyhosts
# systemctl status denyhosts
● denyhosts.service - SYSV: Activates/Deactivates the
Loaded: loaded (/etc/rc.d/init.d/denyhosts; bad; vendor preset: disabled)
Active: active (running) since Wed 2018-01-10 06:47:54 UTC; 3h 57min ago
Docs: man:systemd-sysv-generator(8)
Process: 30660 ExecStart=/etc/rc.d/init.d/denyhosts start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/denyhosts.service
└─30665 python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf
Jan 10 06:47:54 li226-12.members.linode.com systemd[1]: Starting SYSV: Activates/Deactivates the...
Jan 10 06:47:54 li226-12.members.linode.com denyhosts[30660]: starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf
Jan 10 06:47:54 li226-12.members.linode.com systemd[1]: Started SYSV: Activates/Deactivates the.
Configuración de alertas de correo electrónico en DenyHosts
Podemos establecer alertas por correo electrónico sobre inicios de sesión sospechosos y hosts restringidos haciendo cambios en un archivo de configuración de DenyHosts. Puede agregar su dirección de correo electrónico a la variable ADMIN_EMAIL
en el archivo de configuración /etc/denyhosts.conf
para recibir alertas por correo electrónico sobre inicios de sesión sospechosos. Puede agregar cualquier cantidad de direcciones de correo electrónico a la variable, solo asegúrese de separarlas con comas. Aquí agregué mi dirección de correo electrónico [email protected] para alertarme de cualquier ataque.
Debe reiniciar el servicio DenyHosts después de realizar cualquier cambio en los archivos de configuración.
Eliminación de direcciones IP prohibidas
Puede monitorear los registros ssh de denyhosts para ver cuántos atacantes y piratas informáticos intentan obtener acceso a su servidor. Puede usar el siguiente comando para ver los registros en tiempo real.
# tail -f /var/log/secure
Jan 10 10:56:43 li226-12 sshd[2096]: refused connect from 222.186.43.6 (222.186.43.6)
Jan 10 10:57:08 li226-12 sshd[2102]: refused connect from 222.186.43.6 (222.186.43.6)
Jan 10 10:57:43 li226-12 sshd[2113]: refused connect from 222.186.43.6 (222.186.43.6)
Jan 10 10:59:17 li226-12 sshd[2133]: refused connect from 222.186.43.6 (222.186.43.6)
Es evidente que nuestro servidor está intentando rechazar la conexión desde la IP 222.186.43.6 de estos registros. Veamos los pasos para eliminar esta IP de la lista negra.
Necesitamos verificar esta entrada de IP en el archivo /etc/hosts.deny y todos esos archivos de denegación personalizados creados con denyhosts. Podemos eliminar la entrada de IP de todos ellos de la siguiente manera:
# nano /etc/hosts.deny
# nano /var/lib/denyhosts/hosts
# nano /var/lib/denyhosts/hosts-restricted
# nano /var/lib/denyhosts/hosts-root
# nano /var/lib/denyhosts/hosts-valid
# nano /var/lib/denyhosts/users-hosts
Pude notar esta entrada en mi archivo hosts.deny.
# DenyHosts: Wed Jan 10 03:40:07 2018 | sshd: 222.186.43.6
sshd: 222.186.43.6
¡Eliminé esta entrada y reinicié el servicio denyhosts para confirmar que funciona!
2. Instalación desde Github Repo y Source Distribution
Podemos descargar el repositorio de Github o descargar la última distribución fuente de DenyHosts y compilarla a partir de estos paquetes fuente. Veamos cómo instalo denyhosts desde Github Repo.
#yum install git
# git clone https://github.com/denyhosts/denyhosts
Cloning into 'denyhosts'...
remote: Counting objects: 1353, done.
remote: Total 1353 (delta 0), reused 0 (delta 0), pack-reused 1353
Receiving objects: 100% (1353/1353), 263.93 KiB | 0 bytes/s, done.
Resolving deltas: 100% (899/899), done.
Después de descargar los archivos de Github, debemos instalarlo. Puede instalarlo emitiendo este comando desde la carpeta denyhosts como se muestra a continuación:
#cd denyhosts
#python setup.py install
Esto instalará los módulos DenyHosts en el directorio de paquetes del sitio de python.
Del mismo modo, desde una distribución fuente puede descargar los últimos Denyhosts e instalarlos como se explicó anteriormente. El resto de los pasos de configuración son los mismos en ambos casos.
Configuración de servidores denegados
Después de la instalación, puede copiar el archivo de configuración de muestra denyhosts.conf
creado en la carpeta de instalación que contiene la mayoría de las configuraciones posibles en la carpeta /etc folder
. El archivo de configuración contiene varias configuraciones junto con su descripción que deberían ayudarlo a configurar rápidamente DenyHosts. Después de haber editado su archivo de configuración, guárdelo.
# cp -rp denyhosts.conf /etc/
A continuación, necesitamos copiar el ejemplo daemon-control.dist
script como tal para daemon-control
y modifique la sección recomendada según la ubicación de su archivo de configuración.
#cp daemon-control-dist daemon-control
#chmod 700 daemon-control
Ahora podemos editar el archivo de control del demonio. Solo debe editar esta sección cerca de la parte superior como se muestra a continuación. Edité esta sección como mis rutas de configuración.
###########################################
###########################################
#### Edítelos para adaptarlos a su configuración ####
###########################################
DENYHOSTS_BIN ="/usr/bin/denyhosts.py"
DENYHOSTS_LOCK ="/var/run/denyhosts.pid"
DENYHOSTS_CFG ="/etc/denyhosts.conf"
PYTHON_BIN ="/usr/bin/env python"
######################################
Estos valores predeterminados deberían ser razonables para muchos sistemas. Pero le recomiendo que personalice esta configuración para que coincida con su sistema en particular. Una vez que haya editado la configuración y los archivos de control del demonio, asegúrese de restringir la ejecución del script de control del demonio a la raíz.
Iniciar DenyHosts manualmente
Después de configurar Denyhosts para que se ejecute como demonio con nuestro script de control de demonio, puede iniciarlo manualmente desde allí simplemente ejecutando este comando desde la carpeta de instalación.
# ./daemon-control start
starting DenyHosts: /usr/bin/env python /usr/bin/denyhosts.py --daemon --config=/etc/denyhosts.conf
Puede consultar el registro del daemon (/var/log/denyhosts)
para asegurarse de que DenyHosts se está ejecutando correctamente. Puede consultar este enlace de preguntas frecuentes para cualquier problema o pregunta relacionada con este software.
Además, puede iniciar DenyHosts manualmente es ejecutarlo desde la línea de comando usando Python así mencionando los parámetros comunes como la ubicación del archivo binario y el archivo de configuración.
# python /usr/bin/denyhosts.py --config /etc/denyhosts.conf --daemon
# ps aux | grep denyhosts
root 25650 0.0 1.0 216116 10740 ? S 09:44 0:00 python /usr/bin/denyhosts.py --config /etc/denyhosts.conf --daemon
root 25656 0.0 0.2 112668 2200 pts/0 S+ 09:44 0:00 grep --color=auto denyhosts
El comando anterior inicia DenyHosts y lo ejecuta en segundo plano.
Iniciar Denyhosts automáticamente
Podemos configurar cronjobs para iniciar Denyhosts automáticamente al inicio. O podemos crear un enlace simbólico desde /etc/init.d
como a continuación:
# cd /etc/init.d
# ln -s /root/denyhosts/daemon-control denyhosts
# ll | grep denyhosts
lrwxrwxrwx 1 root root 30 Jan 10 04:48 denyhosts -> /root/denyhosts/daemon-control
Ahora podemos gestionar este servicio desde el systemctl
normal comando.
# systemctl enable denyhosts
denyhosts.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig denyhosts on
# systemctl start denyhosts
# systemctl status denyhosts
● denyhosts.service - SYSV: Activates/Deactivates the
Loaded: loaded (/etc/rc.d/init.d/denyhosts; bad; vendor preset: disabled)
Active: active (exited) since Thu 2018-01-11 09:57:53 UTC; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 25876 ExecStart=/etc/rc.d/init.d/denyhosts start (code=exited, status=0/SUCCESS)
Conclusión
En este artículo, analicé cómo instalar y configurar DenyHosts en nuestro servidor CentOS 7. Esta herramienta se puede configurar fácilmente y también admite notificaciones por correo electrónico, SMTP y syslog. Esta aplicación es una excelente solución para defenderse de ataques de servidor SSH como ataques basados en diccionario y ataques de fuerza bruta. Espero que este artículo sea útil para ti. Publique sus valiosos comentarios y sugerencias al respecto.