jueves, enero 17, 2013

Protegiendo un poco nuestra Raspberry Pi de ataques externos (ssh)

La historia de siempre, basta con conectar un aparato a internet para que un montón de bots empiecen a atacarlo a ver si consiguen acceder. A raíz de este post se me ocurrió investigar el fichero de log del sshd a ver si tenía algún intento de acceso ilegal. Pues en menos de 12 horas tenía ¡1728 intentos de acceso! La mayoría a la cuenta root.

Este es el comando que muestra por pantalla:
cat /var/log/auth.log | grep 'invalid user\|Failed'

...y este el que cuenta cuántos líneas aparecen:
cat /var/log/auth.log | grep 'invalid user\|Failed' | wc -l

Hay varias cosas que podemos hacer para evitar cualquier problema.

Contraseña
Es obvio pero la primera es asegurarnos de que cambiamos la contraseña por defecto y que no lo hacemos por otra que sea obvia como "12345", "password" y cosas así. Lo puedes hacer directamente desde el menú de raspi-config (sudo raspi-config) o con el comando passwd

Desactivar el login con root desde ssh
Edita el fichero de configuración de ssh

sudo nano /etc/ssh/sshd_config

Cambia "PermitRootLogin yes" por

PermitRootLogin no

Bloqueos ataques fuerza bruta
Añade estas línea al final del sshd_config para bloquear el número máximo de accesos fallidos desde una IP y el número máximo de sesiones simultáneas que se pueden abrir.


# Custom settings
MaxAuthTries 3
MaxStartups 5

Frikonsejo: Puedes comprobar que tu configuración del sshd es correcta mediante el comando

$ sudo sshd -t

Si no ves ningún mensaje de error es que la configuración es correcta. Es muy importante que compruebes que el archivo de configuración es correcto porque si no cuando reinicies el servicio (o la máquina) el servicio ssh no arrancará y no podrás conectarte

Cambio de puerto estándar
No es una medida definitiva pero te evitará muchos ataques automáticos de los bots que circulan por Internet. Basta con que cambies el puerto que has abierto en el router a cualquier otro no estándar. En la redirección indicas que sigues queriendo enviarlo al 22 de tu IP en la red interna. Pero ten cuidado porque muchos proveedores de internet no permiten conectarse al rango completo de puertos de tu router. Comprueba con una herramienta como http://www.yougetsignal.com/tools/open-ports/ si el puerto realmente está abierto y accesible.

Bloqueo de IP, límites de anchos de banda...
Hay muchas más estrategias que puedes aplicar para proteger tus puertos pero en ocasiones son algo rígidas y más orientadas a sistemas multiusuario.

Aquí tienes una buena colección de estrategias para proteger tu servidor ssh

ACTUALIZACIÓN: en vista de la cantidad de ataques por fuerza bruta que sufro en mi puerto 22 he instalado un servicio de baneo de IPs. Aquí lo explico con más detalle.

3 comentarios:

  1. En mi caso lo configuré para que sólo funcione utilizando clave asimétrica.
    También se puede configurar desde qué rango de IPs se permite conectar.

    ResponderEliminar
  2. Sí, lo del filtrado por IP y clave son buenas opciones si quieres una opción segura. El problema es que para mi limitan demasiado las máquinas desde las que puedes conectar.
    Siempre llegará el día que quieras conectar desde una máquina nueva o desde otra localización...y ya estás cazado

    ResponderEliminar
  3. Otra medida más, los usuarios a los que se puede acceder remotamente no deberían tener sudo. De este modo con sólo la contraseña del usuario no podrán atacar todo el sistema y tienen que explotar también la clave de root.

    ResponderEliminar