Hay muchos posts en Internet hablando sobre cómo configurar SSH de forma correcta, para tener un entorno seguro; éste es otro de ellos.
La configuración de ssh en la máquina a la que queremos conectar, en entornos tipo Red Hat, se encuenta en /etc/ssh/sshd_conf. En este fichero de configuración, podremos realizar varias modificaciones para intentar tener un entorno SSH más seguro, como por ejemplo las que se describen a continuación:
Cambiar el puerto de acceso por defecto
Por defecto SSH usa el puerto 22, cambiando el puerto por otro conseguimos añadir una traba extra para alguien que quiere acceder a nuestro server a través de SSH, puesto que el puerto por defecto no responderá. Se recomienda usar uno mayor al 1024, por estar del 1 al 1024 reservados.
Port 12503
Deshabilitar el acceso a root
El usuario root tiene todos los permisos del sistema, y además es un usuario que existe en todos los sistemas. Una buena práctica sería deshabilitar el acceso al usuario root, y conectárse por ssh únicamente con usuarios propios, que posteriormente (si así lo deseamos) puedan coger privilegios de administrador mediante «sudo», habiéndose configurado préviamente en /etc/sudoers. De esta manera, prevenimos ataques SSH que intenten conectar con el usuario root, que serían los más usuales.
PermitRootLogin no
Deshabilitar el protocolo 1
Por estar obsoleto y por contar con varias vulnerabilidades conocidas, se recomienda sólo habilitar el protocolo 2, con el que se podrá trabajar sin ningún problema hoy en día.
Protocol 2
Crear una lista de usuarios permitidos
Lista de usuarios del sistema (en /etc/passwd) que tienen permiso para conectar por ssh. Así controlamos mucho mejor el acceso al ssh y evitamos ataques ssh con usuarios conocidos como el usuario apache, nagios, etc. También podemos incluir desde qué equipos se aceptarán las conexiones, incluyendo un @ip tras el username.
AllowUsers paco [email protected]
Deshabilitar la autentificación con contraseña
Este punto es algo más complicado que el resto, puesto que requiere de un trabajo adicional; la creación de claves públicas/privadas para la autentificación. Aquí habría dos posibles maneras de actuar:
1- Crear un par de claves en la máquina desde la que queremos conectar y copiarla al servidor siguiendo los pasos descritos aquí. Esto requiere poder autentificarse mediante contraseña para poder copiar la clave al servidor.
2- Otra opción para realizar lo mismo, se describe aquí, en el punto 7, sin necesidad de usar ssh-copy-id (lo cual requiere autentificación por contraseña).
Una vez comprobado que funciona la autentificación por ssh mediante certificado, se podrá deshabilitar la autentificación por password.
PasswordAuthentication no
Limitar el número de reintentos
Incluir un número máximo de errores al introducir el usuario/password (si está habilitado).
MaxAuthTries 2
Limitar el número de pantallas de login
Limitar el número de conexiones simultáneas a la pantalla de login desde la misma IP, para evitar ataques divididos. Esto no limita el número de sesiones ssh simultáneas, sólo limita el número de pantallas de login abiertas al mismo tiempo.
MaxStartups 3
NOTA IMPORTANTE: Se recomienda iniciar una sesión ssh contra la máquina antes de realizar ningún cambio, y no cerrar dicha sesión ssh. Tras los cambios, se podrá reiniciar el sshd del servidor sin que se cierre la sesión ssh original, por lo que si nos hemos equivocado con algún parámetro, aun podremos deshacer los cambios a través de la sesión ssh original. Para los tests, se recomienda usar nuevas sesiones ssh y nunca cerrar la original.
Configurar iptables correctamente
Finalmente, una buena idea sería configurar correctamente el firewall de Linux, iptables, que nada tiene que ver con el fichero de configuración sshd_config. Con iptables, podríamos por ejemplo únicamente aceptar peticiones al puerto definido para el SSH desde las IPs públicas de confianza que nosotros queramos. Más info sobre cómo hacer esto, aquí.
Fuentes: http://fedorasolved.org/post-install-solutions/securing-ssh
http://www.linuxtotal.com.mx/index.php?cont=info_seyre_004
http://wiki.centos.org/HowTos/Network/SecuringSSH
http://resin.csoft.net/cgi-bin/man.cgi?section=5&topic=sshd_config
Foto por @boetter
Este articulo es, posiblemente, uno de los más útiles para la gente normal como yo. Muchas gracias por tu ayuda!