Ataques por diccionario al servicio de SSH
En el momento en que dejemos una máquina en Internet con el servicio SSH activado, empezaremos a recibir ataques por diccionario sobre nuestro servicio. Una manera de combatir dicho ataque es solo permitiendo a ciertas IPs acceder al servicio (solo a la vlan de gestión, ips confiables, etc…) pero si esta máquina tiene que ser accesibe siempre desde varias ubicaciones y por varios usuarios tendremos que asegurar todo lo que podamos el servicio.
A continuación os dejo lo que suelo modificar del servicio ssh para asegurarlo un poco.
vi /etc/ssh/sshd_config
protocol 2
Existen dos versiones de SSH, la versión 1 está en desuso pero todavía se mantiene por compatibilidad, así que solo permitiremos el protocol v2.
LoginGraceTime 30
Solo vamos a permitir que la pantalla de login esté presenta durante 30 segundos, pasados estos 30 segundos la sesión ssh se cerrará.
PermitRootLogin no
Esta es la más importante de todas las que hemos utilizado hasta ahora. No permitimos acceder a root a través de ssh. Sabemos que en todos los sistemas GNU/Unix existe un supeusuario llamado root, por lo que los scripts de ataque por diccionario podrían intentarlo contra este usuario que saben que si que existe por defecto en el sistema.
MaxAuthtries 2
Indica la cantidad de veces que podemos equivocarnos al ingresar el usuario y la contraseña para acceder a la máquina.
MaxStartUps 5
Le indicamos el número de conexiones simultáneas de login por dirección IP, con esto limitamos mucho los ataques que lanzan miles de threads contra nuestro servidor.
AllowUsers xxxx yyyy
De todos los usuarios que tenemos en el sistema, lo más normal es que solo entren unos pocos. Con esto reducimos los usuarios que pueden acceder mediante el servicio de ssh, restringiéndolo solo a los que van a administrar la máquina.
Port xxxx
Otra opción a tener en cuenta es cambiar el puerto en el que corre el servicio, pero esto no nos defenderá de un ataque, puesto que con un simple escaneo de puertos podremos descubrir en qué nuevo puerto está corriendo el servicio y el script de ataque realizará su esfuerzo contra ese puerto.
Otras alternativas
Pero existen más soluciones que podemos adoptar. Podemos utilizar un script en python llamado denyhosts que leyendo el fichero de log en busca de fallos de autenticación, irá creando reglas de iptables para denegar el acceso a las direcciones IP que presuntamente estén realizando un ataque por diccionario.
Los pasos para realizar la instalación de denyhosts en sistemas basados en RedHat / Fedora / CentOS es la siguiente:
Descargamos el software Denyhosts para sistemas con versión python 2.3
# wget http://belnet.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6-python2.3.noarch.rpm
Instalamos el software:
# rpm -ivh DenyHosts-2.6-python2.3.noarch.rpm
Preparing… ########################################### [100%]
DenyHosts ########################################### [100%]
DenyHosts se instala en
/usr/share/denyhosts Y ahora tenemos que crear el fichero de confguración, lo haremos basándonos en el que trae de ejemplo la instalación:
cd /usr/share/denyhosts
cp denyhosts.cfg-dist denyhosts.cfg
Editamos el archivo denyhost.cfg y vamos ajustando los parámetros que se observan a continuación:
SECURE_LOG = /var/log/secure //lugar donde se encuentra el log
HOSTS_DENY = /etc/hosts.deny //fichero donde negaremos el acceso
PURGE_DENY = 4w //tiempo en el que tendremos la IP baneada
BLOCK_SERVICE = ALL //baneamos todos los servicios, no solo SSH
ADMIN_EMAIL = administrador@dominio.tld //correo del administrador para recibir notificaciones
Ahora vamos a crear el enlace simbólico para arrancar el daemon cada vez que se inicie la máquina.
# cd /usr/share/denyhosts/
# cp daemon-control-dist daemon-control
# cd /etc/init.d
# ln -s /usr/share/denyhosts/daemon-control denyhosts
# chkconfig –add denyhosts
Editamos el archivo daemon-control para verificar que está apuntando al lugar donde se encuentran los binarios y el fichero de configuración:
DENYHOSTS_BIN = “/usr/bin/denyhosts.py”
DENYHOSTS_LOCK = “/var/lock/subsys/denyhosts”
DENYHOSTS_CFG = “/usr/share/denyhosts/denyhosts.cfg”
El archivo solo debe ser ejecutable para root:
chown root daemon-control Arrancamos denyhosts
chmod 700 daemon-control
cd /etc/init.d/
./daemon-control start
Ahora ya tenemos a denyhosts corriendo cada vez que se inicie la máquina:
chkconfig --list denyhosts
denyhosts 0:desactivado 1:desactivado 2:activo 3:activo 4:activo 5:activo 6:desactivado
Yo había leído acerca de Fail2Ban, échale un vistazo.
Gracias Gura, tomo nota del fail2ban. A ver si este fin de semana lo pruebo y lo instalo en otro server que tengo que montar.
Gracias por el apunte, y sobretodo por leer mi blog.
Un saludo
Alex
Hola,
quería comentarte que me ha gustado mucho al articulo y me ha ayudado a configurar un servidor que estaba instalado.
Muy interesante, muchas gracias.
Luis
Este neng es una maquina