Búsqueda de sitios web

3 formas de configurar SSH para privacidad


Así es como optimizo mi experiencia SSH y protejo mis servidores del acceso no autorizado.

SSH (Secure Shell) es un protocolo que le permite crear una conexión privada y verificada, asegurando el canal mediante claves criptográficas, para iniciar un shell remoto en otra máquina. Con esta conexión, puede ejecutar comandos remotos, iniciar transferencias seguras de archivos, reenviar sockets, pantallas y servicios, y mucho más.

Antes de la aparición de SSH, la mayor parte de la administración remota se realizaba a través de telnet y, para ser justos, una vez que podías establecer una sesión remota, podías hacer prácticamente todo lo que necesitaras. El problema con este protocolo era que el tráfico viajaba sin cifrar y era puro texto sin formato. No requirió mucho esfuerzo utilizar un rastreador de tráfico para ver todos los paquetes dentro de una sesión, incluidos aquellos que contienen un nombre de usuario y contraseña.

Con SSH, gracias al uso de claves asimétricas, las sesiones entre los aparatos implicados en la comunicación quedan cifradas. Y hoy en día esto es más relevante que nunca, ya que todos los servidores en la nube se administran desde todo el mundo.

Tres consejos para la configuración SSH

La implementación más común del protocolo SSH es OpenSSH, desarrollado por el proyecto OpenBSD y disponible para la mayoría de los sistemas operativos tipo Linux y Unix. Una vez que instale este paquete, tendrá un archivo llamado sshd_config que controla la mayor parte del comportamiento del servicio. La configuración predeterminada es generalmente muy conservadora, pero tiendo a hacer algunos ajustes para optimizar mi experiencia SSH y proteger mis servidores del acceso no autorizado.

1. Cambiar el puerto predeterminado 

Este es el que no todos los administradores recuerdan. Cualquiera que tenga un escáner de puertos puede descubrir un puerto SSH incluso después de que lo haya movido, por lo que difícilmente estará fuera de peligro, pero sí evitará convenientemente cientos de scripts poco sofisticados lanzados contra su servidor. Es un favor que puede hacerse usted mismo para eliminar una buena cantidad de ruido de sus troncos.

Para este artículo, tenía un puerto predeterminado de servidor SSH TCP 22 a través de un proveedor de nube, y el promedio de ataques por minuto fue 24. Después de cambiar el puerto a un número mucho mayor, TCP 45678, el promedio de personas que se conectan y adivinan cualquier nombre de usuario o La contraseña era dos por día.

Para cambiar el puerto predeterminado para SSH, abra /etc/ssh/sshd_config en su editor de texto favorito y cambie el valor del Puerto de 22 a algún número mayor que 1024. La línea puede estar comentada porque 22 es el valor predeterminado (por lo que no es necesario declararlo explícitamente en la configuración), así que descomente la línea antes de guardar.

#Port 22122
#AddressFamily any 
#ListenAddress 0.0.0.0 
#ListenAddress ::

Una vez que haya cambiado el puerto y guardado el archivo, reinicie el servidor SSH:

$ sudo systemctl restart sshd

2. No más contraseñas

Existe un movimiento general para dejar de usar contraseñas como medio de autenticación, y métodos como la autenticación de dos factores están ganando popularidad. OpenSSH puede autenticarse usando claves asimétricas, por lo que no es necesario recordar contraseñas complejas, y mucho menos rotarlas cada pocos meses, o temer que alguien estuviera "navegando" mientras establecías tu sesión remota. El uso de claves SSH le permite iniciar sesión en su equipo remoto de forma rápida y segura. Esto a menudo significa menos tiempo para procesar nombres de usuario y contraseñas incorrectos para el servidor. Iniciar sesión es agradablemente sencillo. Cuando no hay una clave, no hay entrada, ni siquiera un mensaje.

Para utilizar esta función, debe configurar tanto el cliente (la computadora físicamente frente a usted) como el servidor (la máquina remota).

En la máquina cliente, debe generar un par de claves SSH. Este consta de una clave pública y una privada. Como sus nombres lo implican, una clave es para que usted la distribuya a los servidores en los que desea iniciar sesión, y la otra es privada y no debe compartirse con nadie. Cree una nueva clave con el comando ssh-keygen y use la opción -t para especificar una biblioteca de criptografía buena y reciente como ed25519:

$ ssh-keygen -t ed25519    
 Generating public/private ed25519 key pair. 
 Enter file in which to save the key (~/.ssh/id_ed25519):

Durante la creación de la clave, se le solicitará que asigne un nombre al archivo. Puede presionar Regresar para aceptar el valor predeterminado. Si crea más claves en el futuro, puede darle a cada una un nombre personalizado, pero tener varias claves significa especificar qué clave desea usar para cada interacción, así que por ahora, simplemente acepte la predeterminada.

También puedes darle una contraseña a tu clave. Esto garantiza que incluso si alguien más logra obtener su clave privada (lo que nunca debería suceder), no podrá utilizarla sin su frase de contraseña. Es una protección útil para algunas claves, mientras que no es apropiada para otras (especialmente las utilizadas en scripts). Presiona Regresar para dejar tu clave sin frase de contraseña o crear una frase de contraseña si así lo deseas.

Para copiar su clave en un servidor, utilice el comando ssh-copy-id . Por ejemplo, si tengo un servidor llamado example.com, puedo copiarle mi clave pública con este comando:

$ ssh-copy-id jgarrido@example.com

Esto crea o modifica el archivo authorized_keys en el directorio .ssh del servidor con su clave pública. 

Una vez que el comando ssh-copy-id haya confirmado lo que hizo, intente iniciar sesión desde su computadora para verificar que puede iniciar sesión sin contraseña (o con la frase de contraseña de su clave si elige usar una). .

Una vez que esté en su servidor sin usar la contraseña de su cuenta de servidor, edite el sshd_config del servidor y establezca PasswordAuthentication en no.

PasswordAuthentication no

Reinicie el servicio ssh para cargar la nueva configuración:

$ sudo systemctl restart sshd

3. Decide quién puede iniciar sesión

La mayoría de las distribuciones no permiten que el usuario raíz inicie sesión a través de SSH, lo que garantiza que solo estén activas las cuentas sin privilegios, utilizando el comando sudo para escalar los privilegios según sea necesario. Esto evita que un objetivo notable y dolorosamente obvio (la raíz) sufra ataques programados simples pero muy comunes.

De manera similar, una característica simple y poderosa de OpenSSH es la capacidad de decidir qué usuarios pueden iniciar sesión en una máquina. Para establecer a qué usuarios se les concede acceso SSH, abra el archivo sshd_config en su editor de texto favorito y agregue una línea como esta:

AllowUsers jgarrido jane tux

Reinicie el servicio SSH para cargar las nuevas opciones de configuración.

Esto permite que sólo los tres usuarios (jgarrido, jane y tux) inicien sesión o ejecuten cualquier operación en la máquina remota.

Pensamientos finales

Puede utilizar OpenSSH para implementar un servidor SSH potente y robusto. Estas fueron sólo tres opciones útiles para fortalecer su instalación. Aún así, hay toneladas de características y opciones que puedes activar o desactivar dentro del archivo sshd_config, y hay muchas aplicaciones excelentes como Fail2ban que puedes usar para proteger aún más tu servicio SSH.

Artículos relacionados: