Cómo bloquear su servidor SSH

Contenidos

SSH, que significa Secure Shell, no es muy seguro por defecto, optando por la autenticación de contraseña básica sin otros límites. Si verdaderamente desea bloquear su servidor, deberá realizar más configuraciones.

No permita inicios de sesión con contraseña: use claves SSH

Lo primero que debe hacer es deshacerse de la autenticación de contraseña por completo y cambiar al uso de claves SSH. Las claves SSH son una forma de cifrado de clave pública; dispone de una clave pública que actúa como su nombre de usuario y una clave privada que actúa como su contraseña (excepto que esta contraseña tiene 2048 caracteres). Su clave privada se almacena en su disco, pero está encriptada con una frase de contraseña y ssh-agent. Cuando ingresa a SSH en un servidor, en lugar de pedir su contraseña, el agente ssh se conecta al servidor usando sus claves.

Inclusive si ya está usando claves SSH, querrá asegurarse de que sus inicios de sesión con contraseña estén desactivados, dado que los dos no se excluyen mutuamente.

RELACIONADO: ¿Qué es el reenvío de agentes SSH y cómo se utiliza?

Generar claves SSH

Puede generar una nueva clave SSH usando el ssh-keygen utilidad, instalada por defecto en la mayoría de los sistemas Unix.

ssh-keygen

Esto le pedirá una frase de contraseña para cifrar el archivo de clave local. No se utiliza para la autenticación con el servidor, pero debe mantenerse en secreto.

ssh-keygen guardará su clave privada en ~/.ssh/id_rsay además guardará su clave pública en ~/.ssh/id_rsa.pub. La clave privada permanece en su disco duro, pero la clave pública debe cargarse en el servidor para que el servidor pueda verificar su identidad y verificar que usted tiene permiso para ingresar a ese servidor.

El servidor mantiene una lista de usuarios autorizados, regularmente almacenados en ~/.ssh/authorized_keys. Puede agregar su archivo de clave manualmente a este archivo, o puede utilizar el ssh-copy-id utilidad:

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

Reemplazar user@host con su propio nombre de usuario y nombre de host del servidor. Se le pedirá que inicie sesión con su contraseña anterior una vez más, después de lo cual no se le debe volver a solicitar y puede deshabilitar el inicio de sesión con contraseña.

Desactivar el inicio de sesión con contraseña SSH

Ahora que puede ingresar al servidor con sus claves, puede desactivar la autenticación de contraseña por completo. Asegúrese de que la autenticación basada en claves esté funcionando o se le bloqueará el acceso a su servidor.

En el servidor, abre /etc/ssh/sshd_config en su editor de texto favorito y busque la línea que comienza con:

#PasswordAuthentication

Querrá descomentar esto (quitar el hashtag) y cambiar «sí» a «no»:

PasswordAuthentication no

Entonces, reinicia sshd con:

systemctl restart sshd

Debería verse obligado a volver a conectarse y, si su archivo de claves es incorrecto, no se le pedirá una contraseña.

Si lo desea, además puede forzar la autenticación basada en claves públicas, que bloqueará todos los demás métodos de autenticación. Agregue las siguientes líneas a /etc/ssh/sshd_config:

AuthenticationMethods publickey
PubkeyAuthentication yes

y reiniciar sshd.

RELACIONADO: ¿Qué es un archivo PEM y cómo se utiliza?

Bloquear a los atacantes con denyhosts

denyhosts es una utilidad para evitar repetidos intentos fallidos de inicio de sesión a través de SSH, equivalente a cómo su teléfono lo bloquea después de demasiados intentos. No está instalado de forma predeterminada, por lo que tendrá que instalarlo desde el administrador de paquetes de su distribución. Para sistemas basados ​​en Debian como Ubuntu, eso sería:

sudo apt-get install denyhosts -y

Una vez que esté instalado, habilítelo con:

sudo systemctl enable denyhosts

denyhosts debería ejecutarse automáticamente ahora, pero querrá incluir su dirección IP en el listado blanca en caso de que se bloquee. Siempre puede volver a intentarlo desde una dirección IP distinto, pero esto le ahorrará algunos problemas.

Abrir /etc/hosts.allow, y en la parte inferior del archivo agregue:

sshd: your-ip-address

reemplazando your-ip-address con su dirección IP.

Por defecto, denyhosts se bloqueará después de un intento fallido para los usuarios raíz y cinco intentos fallidos para otros usuarios. Puede cambiar esta conducta editando /etc/denyhosts.conf.

Si se ha bloqueado accidentalmente, deberá detenerse denyhosts y elimine su dirección IP de algunos lugares:

  • /etc/hosts.deny
  • /var/lib/denyhosts/hosts
  • /var/lib/denyhosts/hosts-restricted
  • /var/lib/denyhosts/hosts-root
  • /var/lib/denyhosts/hosts-valid
  • /var/lib/denyhosts/users-hosts

Reiniciar denyhosts y debería poder conectarse de nuevo.

Lista blanca de acceso SSH

Aún cuando forzar claves SSH con denyhosts probablemente sea suficiente seguridad, puede incluir direcciones IP específicas en el listado blanca. La mayoría de los proveedores de servidores proporcionarán herramientas para hacer esto desde una interfaz web. Si esa es una alternativa, querrá incluirla en el listado blanca desde allí en lugar de desde el servidor SSH, dado que siempre podrá cambiar la IP de la lista blanca en caso de que se bloquee.

  Alterando las reglas de entrada.

Si no es una alternativa, deberá configurar manualmente /etc/hosts.deny para bloquear todo el tráfico de hosts no autorizados.

Una nota importante: Si incluyes tu casa en el listado blanca, es factible que tu ISP no te dé una dirección IP estática y tu dirección IP puede cambiar en cualquier momento. Querrá asegurarse de que eso no suceda antes de incluir en el listado negra todas las demás direcciones IP, o agregar varias direcciones como respaldo, o simplemente omitir este paso por completo.

Abrir /etc/hosts.allow y asegúrese de que su dirección IP esté en el archivo:

sshd: your-ip-address

Si es así, puede continuar y rechazar todas las demás conexiones:

echo 'sshd: ALL' >> /etc/hosts.deny

Reiniciar sshd y debería ver sus cambios.

Alternativamente, configure un proxy frente a su servidor SSH

Si no desea exponer su servidor SSH a Internet, pero necesita ingresar a él desde varias direcciones IP, puede configurar un proxy frente a él para manejar la conexión. Este podría ser otro servidor en la nube o inclusive una caja que se ejecuta en su casa.

El servidor SSH debe configurarse para aceptar solo conexiones del servidor proxy, y el servidor proxy debe aceptar conexiones desde cualquier lugar. Puede configurar el servidor proxy como desee, pero inclusive un simple conexión netcat trabajará. Tenga en cuenta que este servidor proxy será el único punto de acceso para su servidor SSH, por lo que si el proxy deja de funcionar, quedará bloqueado a menos que tenga una dirección de respaldo.

No permitir inicio de sesión de root

En su lugar, cree un nuevo usuario y otorgue a ese usuario el privilegio de sudo. Efectivamente, esto es lo mismo, pero dispone de una gran diferencia: los atacantes potenciales necesitarán saber el nombre de su cuenta de usuario para comenzar a atacar su servidor, debido a que no será tan simple como root@yourserver.

Aparte de la seguridad, en general es una buena política de Unix no iniciar sesión como root todo el tiempo, debido a que root no crea registros y no solicita el acceso a los recursos protegidos.

Cree un nuevo usuario en su servidor SSH:

adduser myfancyusername

y establezca una contraseña para ese usuario:

passwd myfancyusername

No iniciará sesión con esta contraseña debido a que seguirá usando claves SSH, pero es obligatorio. Idealmente, haga esto distinto de su contraseña de root.

Agregar este usuario a /etc/sudoers para otorgar permisos de administrador:

echo 'myfancyusername ALL=(ALL) ALL' >> /etc/sudoers

Cambiar a ese usuario con su myfancyusernamey verifique que puede volver al usuario root con sudo su (que no necesita contraseña de root). Si puede, tiene acceso a sudo.

Ahora querrá bloquear el inicio de sesión de root. En /etc/ssh/sshd_config, querrás cambiar:

#PermitRootLogin yes

Elimina el hastag y cambia «sí» a «no»:

PermitRootLogin no

Reiniciar sshd y su servidor debería bloquear todas las solicitudes para iniciar sesión como root.

Configurar la autenticación de dos factores

Esto es ciertamente exagerado, pero si está paranoico con relación a que alguien se apodere de sus claves SSH privadas, puede configurar su servidor SSH para utilizar 2FA.

La forma más sencilla de hacer esto es utilizar Autenticador de Google con un dispositivo Android o iOS, aún cuando SSH admite muchos métodos de dos factores. Con Google Authenticator, se le dará un código QR que puede escanear desde la aplicación móvil Google Authenticator para vincular su teléfono al servidor, y además se le darán algunos códigos de respaldo para recuperar en caso de que su teléfono se pierda. . No almacene estos códigos en su máquina principal, caso contrario, no se trata de dos factores.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.