Es bien conocido que nosotros los linuxeros accedemos a nuestros servidores de forma remota, y la mayoría de las veces haciendo uso del servicio de SSH instalado, el cual cifra el trafico haciendo la conexión mas segura por el puerto 22.
Pero para quienes desean tener una sensación de seguridad mayor, es recomendable realizar unos ajustes mínimos, para evitar ser victimas de usuarios mal intencionados, dejando en claro que no es posible usar el termino de hacker para referenciar a los miembros del lado oscuro.
Es recomendable negarle el acceso al usuario root vía ssh, ya con solo el hecho de tener permisos basta con un ataque de fuerza bruta para intentar cientos de miles de pruebas y si nuestra contraseña es débil (menor de 8 caracteres) con tan solo automatizar un script para que se encargue de realizar los ensayos necesarios y descubrir en poco tiempo nuestra clave de super usuario.
Para evitar todo ello existen una serie de cambios que debemos hacer en unas variables que deberán ser aplicadas al archivo de configuración ubicado en la ruta /etc/ssh/sshd_config y las cuales, podemos enumerar.
Ya que por defecto es bien conocido que el servidor ssh escucha por el puerto 22, debemos modificar el numero del puerto, para ello podemos definir un puerto por encima de 1024 que no este en uso, por ejemplo el 5943, validamos que el puerto no este en escucha, con la ayuda de un netstat -nlp | grep «5943», si el puerto esta disponible modificamos la variable port en el archivo /etc/ssh/sshd_config
Valor Actual: port 22
Valor Cambiado: port 5943
Primero debemos probar que en efecto conecta por el puerto 22, luego de realizar y aplicar el cambio , podemos observar el error que da de conexión.
Una vez que vamos realizando las pruebas recomendamos ir validando la configuración, aplicamos los cambios con el siguiente comando
service ssh reload
Ya alcanzado el logro de modificar el numero de puerto, lo siguiente es negar el acceso vía ssh a nuestro Super Poderoso root. Con tan solo modificar la variable
Valor Actual: PermitRootLogin yes
Valor Cambiado: PermitRootLogin no
Es claro, que es fácil detectar un puerto en escucha a los tantos de miles de servidores con servicios disponibles en internet. Y si no me creen pregunten a shodan.
Una vez que determinan que puerto posible tenemos en escucha al SSH, fácilmente pueden aplicar técnicas de ataques sobre el servicio. En el mismo archivo de configuración (/etc/ssh/sshd_config) realizamos una serie de modificaciones adicionales como son:
- LoginGraceTime : refiere al tiempo que la pantalla estará en espera por parte del usuario para que introduzca su contraseña, debemos determinar que tanto tarda el usuario en ingresar la contraseña compleja de 16 dígitos, a menos que usen el copy/paste de contraseñas guardadas en algún archivo digital no protegido (mala practica que tenemos algunos).
LoginGraceTime 120
- MaxAuthTries: le indicamos el numero de veces que son permitidos los fallos de contraseña antes de ser desconectados. Yo soy del pensar que podemos equivocarnos máximo dos veces.
MaxAuthTries 2
- MaxStartups: Se refiere al numero de pantallas de login permitidas o conexiones provenientes de la misma IP con la que deseamos conectarnos.
MaxStartups 1
Para las pruebas, la variable no estaba definida en el archivo, simplemente la agregas y defines el valor que consideres.
- AllowUsers Actualmente manejamos mas de un usuario para realizar tareas/funciones administrativas y las cuales en algunas ocasiones las realizamos desde sitios puntuales (casa/oficina), con esta variable podemos indicar que usuario puede acceder al servidor y desde que IP.
AllowUsers anger@127.0.0.2
Con ello hacemos fija la IP de la ubicación desde donde nos conectamos.
En post anteriores se hablo de fail2ban, herramienta con la que igualmente podemos mejorar la seguridad de nuestro servidores. Les recomiendo pasar a darle una leída para el mejoramiento en el proceso de aseguramiento de los servidores que administramos.
Como nota final recuerden que para aplicar los cambios es necesario ejecutar:
service ssh reload
Imagen | Tom Raftery (CC BY-NC-SA 2.0)
Gracias por este nuevo tutorial amigo @anger. Se ve muy práctico todo lo que comentas 🙂
Buenas!
Muy buen tutorial. No sabía que había más de un autor en lamiradadelreplicante : )
La seguridad de las conexiones SSH son primordiales.
Saludos!
Saludos david, son solo pequeños aportes de mi parte. El 99.8% de las publicaciones son de tannhausser.
Gracias por pasar a darle lectura a los artículos.
Muy bueno, práctico y altamente recomendable.
Muchas gracias.
Un saludo,
Diegoto
Faltaron algunas variables adicionales, por acotar, para blindar el ssh. Pero me pareció que están son las comunes que «debiéramos» de implementar.
Pingback: Como usar ssh para acceder a servidores - Jvare Blog