====== Securizar SSH en Raspbian ====== Si vas a exponer tu conexión SSH a internet, antes ten en cuenta los siguientes puntos: ===== Utilizar un puerto no estándar ===== Hay numerosos bots que escanean todas las IPs (en IPv4) y tratan de conectarse a puertos comunes (22 para SSH, 80 para HTTP, 443 para HTTPS) e intentan conectarse con usuarios y contraseñas comunes, como la que tiene por defecto la Raspberry, y con usuarios y contraseñas filtrados en dumps. Por ello, a la hora de hacer la redirección, sería conveniente hacerla desde un puerto no estándar (superior a 1024): - Ve a [[https://random.org]], y busca un número aleatorio entre 1024 y 65535. - Redirige el puerto obtenido a tu servidor SSH. ===== Utilizar un usuario no estándar ===== Todas las Raspberries que funcionan con Raspbian tienen como usuario por defecto ''pi''. Por tanto, es mejor crear otro usuario y trabajar desde éste: - Consulta los grupos a los que pertenece ''pi'' (le dan permisos como por ejemplo ejecutar ''sudo'' o acceder a los logs del sistema), con el comando ''groups pi''. - Crea un nuevo usuario: ''sudo useradd -G GROUP_LIST -m NAME'', donde ''GROUP_LIST'' son los nombres de los grupos separados por comas y ''NAME'' es el nombre de usuario deseado. - Crea una contraseña para el nuevo usuario: ''sudo passwd NAME''. - Si tenías archivos en el usuario ''pi'', muévelos al nuevo usuario: ''sudo mv /home/pi/* /home/NAME/. && chown NAME:NAME /home/NAME/*''. La segunda parte de este comando (después del ''&&'') cambia el propietario de los archivos, para que el nuevo usuario los pueda leer y modificar. ===== Conexión sin contraseña ===== Primero, configuraremos nuestro usuario para no tener que introducir la contraseña cada vez: - Genera un par de claves SSH. Según desde donde te conectes, tendrás que consultar las instrucciones de dicho programa. En Linux y macOS, puedes ejecutar ''ssh-keygen'' y generarás un par de claves. La clave pública está en ''~/.ssh/id_rsa.pub''((Donde ''~'' se refiere a tu carpeta de usuario y ''.ssh'' es una carpeta oculta (por empezar por ''.'').)) y la clave privada está en ''~/.ssh/id_rsa''. No compartas la clave privada con nadie, ni siquiera otro dispositivo. Cada cliente debe tener su par de claves. - Accede a tu servidor por SSH utilizando tu contraseña. - Comprueba si existe la carpeta ''.ssh'' en tu directorio de usuario (''ls .ssh'' al conectarte). Si no, créala (''mkdir .ssh''). Es una carpeta oculta, así que ''ls'' no la mostrará al listar todo el directorio, si quieres verla, usa ''ls -a'' o ''la''. - Edita el fichero ''.ssh/authorized_keys'' (por ejemplo, con ''nano'' o ''vim'') e inserta cada clave pública (una por línea). - Desconéctate del servidor y vuelve a conectarte, esta vez no debería pedirte la contraseña. Ahora, podemos configurar el servidor para que no permita conexiones con contraseña, solo permitirá conexiones con clave pública/privada: - Entra al servidor y verifica que no te pide contraseña. Si tu clave pública está mal configurada, no podrás acceder al servidor cuando prohibamos el uso de contraseñas. - Edita el archivo de configuración general del servidor SSH (''sudo nano /etc/ssh/sshd_config''). En este fichero, el caracter ''#'' da comienzo a un comentario. * Busca la línea que contiene ''PermitRootLogin'' y cámbiala a ''PermitRootLogin no''. * Busca la línea que contiene ''PasswordAuthentication'' y cámbiala a ''PasswordAuthentication no''. - Recarga la configuración del servidor SSH: ''sudo systemctl reload sshd''((Normalmente utilizamos ''restart'', pero ''reload'' nos permite mantener la conexión actual activa, es decir, que en vez de apagar y encender el servicio ''sshd'', le indica que vuelva a leer la configuración.)). - **Antes de cerrar esta consola**: comprueba que puedes conectarte (abre otra conexión en paralelo), para verificar que la configuración es correcta. Si no funciona, revierte los cambios en ''/etc/ssh/sshd_config'' y haz otro reload.