0
(0)

SSH (Secure Socket Shell) es una interfaz de línea de comandos y un protocolo para obtener acceso seguro a un servidor Linux remoto. Proporciona una comunicación segura y encriptada a través de una red y permite el intercambio de datos a través de un canal seguro entre dos servidores. Los administradores de sistemas lo utilizan ampliamente para controlar y administrar sus servidores web de forma remota. Este tutorial le muestra cómo asegurar su servidor SSH.

Nota: si bien el tutorial aquí se realiza en Ubuntu, los pasos se aplicarán a la mayoría de las distribuciones de Linux.

Instalar y actualizar SSH

Primero, actualice su sistema e instale los paquetes necesarios en su sistema.

Para actualizar el sistema e instalar el servidor SSH en las máquinas servidor y cliente, ejecute el siguiente comando:

sudo apt update && sudo apt upgrade
sudo apt install ssh

Configurar SSH para inicio de sesión sin contraseña

Hay dos métodos diferentes para iniciar sesión en un servidor SSH: autenticación de contraseña y autenticación de clave pública. La autenticación de contraseña es un método muy básico que es fácil de usar y descifrar. El uso de la autenticación de contraseña es muy inseguro, especialmente si se usa una contraseña débil. Por otro lado, las claves SSH brindan una forma fácil y segura de iniciar sesión en un servidor remoto, y este método se recomienda para todos los usuarios.

En su máquina cliente, genere claves SSH con el siguiente comando:

ssh-keygen

Pulse la tecla Intro en cada indicación. Esto producirá dos archivos: “id_rsa.pub” (clave pública) e “id_rsa” (clave privada).

Ubuntu Ssh Server Secure 01 Generar clave pública

En su servidor, cree la siguiente carpeta (si no existe):

mkdir -p ~/.ssh/

De regreso a su máquina cliente, copie la clave SSH a su servidor usando el siguiente comando:

ssh-copy-id username@your.server.ip.address

Ubuntu Ssh Server Secure 02 Copiar clave pública al servidor

En su máquina servidor, asegúrese de que la carpeta «.ssh» tenga los permisos de archivo correctos.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Para probar si el método de autenticación de clave pública funciona, intente conectarse a su servidor SSH desde la máquina cliente:

ssh username@your.server.ip.address

Si puede conectarse sin ingresar una contraseña, entonces funciona el método de autenticación de clave pública.

Nota: si está usando Windows, use las instrucciones aquí para generar claves públicas/privadas SSH.

Archivo de configuración SSH seguro

El archivo “/etc/ssh/sshd_config” es el archivo de configuración de todo el sistema para SSH que le permite configurar diferentes opciones para mejorar la seguridad de un servidor SSH. La configuración predeterminada en el archivo de configuración es muy insegura, por lo que primero debe editarla y establecer las opciones adecuadas para mejorar la seguridad.

Para editar el archivo “/etc/ssh/sshd_config”, ejecute:

sudo nano /etc/ssh/sshd_config

Cambiar el puerto de escucha SSH

De manera predeterminada, SSH escucha en el puerto 22. Los atacantes usan escáneres de puertos para ver si un servicio SSH se está ejecutando o no. Es una buena práctica cambiar el puerto predeterminado.

Para cambiar el puerto predeterminado a 2200, cambie:

Port 22

a

Port 2200

Ubuntu Ssh Server Secure 03 Cambiar puerto predeterminado

Usar solo el protocolo 2

La versión 1 del protocolo contiene vulnerabilidades de seguridad. El Protocolo 2 es la entrada predeterminada en Ubuntu.

Cambie la línea que se muestra a continuación:

Protocol 2

Versión del protocolo de actualización de Ubuntu Ssh Server Secure 04

Limitar el acceso de usuarios

Es necesario permitir que solo usuarios específicos inicien sesión en SSH. Puede mejorar su seguridad. De forma predeterminada, esta opción no está disponible en el archivo de configuración de SSH.

Para permitir «usuario1» y «usuario2», agregue la siguiente línea:

AllowUsers user1 user2

Para denegar «usuario1 incorrecto» y «usuario2 incorrecto», agregue la siguiente línea:

DenyUsers baduser1 baduser2

Ubuntu Ssh Server Secure 05 Incluye filtro de usuario

Deshabilitar inicio de sesión raíz

No es necesario iniciar sesión como root a través de ssh en una red. Los usuarios normales también pueden usar su o sudo para obtener acceso a nivel raíz. La mayoría de los atacantes intentarán usar el usuario raíz para iniciar sesión. Es un gran riesgo de seguridad, por lo que es una buena práctica denegar el inicio de sesión raíz.

Para deshabilitar el inicio de sesión raíz, cambie la línea

PermitRootLogin prohibit-password

a

PermitRootLogin no

Ubuntu Ssh Server Secure 06 Desactivar inicio de sesión raíz

Ocultar último inicio de sesión

Puede ocultar quién inició sesión por última vez cuando un usuario inicia sesión.

cambiar la línea

PrintLastLog yes

a

PrintLastLog no

Ubuntu Ssh Server Secure 07 Desactivar registro

Todavía puede ver todas las conexiones SSH activas con los métodos de esta lista.

Restringir la interfaz para iniciar sesión

De forma predeterminada, SSH escuchará en todas las interfaces de red. Si desea permitir una conexión SSH desde una dirección IP específica, puede cambiar la línea:

#ListenAddress ::

a

ListenAddress 192.168.68.175

Ubuntu Ssh Server Secure 08 Filtro IP Acceso Sshd Config

Deshabilitar autenticación de contraseña

El uso de la autenticación de contraseña es un gran riesgo de seguridad si se utiliza una contraseña débil. El uso de «claves ssh» es una buena práctica. Una «clave ssh» puede contener más de 600 caracteres aleatorios y ser difícil de descifrar.

Para esto, cambia la línea.

# PasswordAuthentication yes

a

PasswordAuthentication no

Ubuntu Ssh Server Secure 09 Deshabilitar autenticación de contraseña

Deshabilitar archivos .rhosts

Los archivos .rhosts especifican qué usuarios pueden acceder a los comandos r (rsh, rcp, rlogin, etc.) en la máquina local sin contraseña. De forma predeterminada, un archivo .rhosts está deshabilitado; si no, cambie las líneas como se muestra a continuación.

IgnoreRhosts yes
RhostsAuthentication no
RSAAuthentication yes

Ubuntu Ssh Server Secure 10 Deshabilitar Rhosts

Deshabilitar la autenticación basada en host

La autenticación basada en host de SSH es más segura que la autenticación .rhosts. Sin embargo, no se recomienda que los anfitriones confíen entre sí. Por defecto, esta opción está deshabilitada.

Si no, cambie la línea como se muestra a continuación:

HostbasedAuthentication no

Ubuntu Ssh Server Secure 11 Deshabilitar autenticación de host

Establecer un tiempo de espera de gracia de inicio de sesión

El «LoginGraceTime» especifica cuánto tiempo después de una solicitud de conexión esperará el servidor antes de desconectarse. Es una buena práctica reducirlo a 60 segundos.

Para esto, cambia la línea.

LoginGraceTime 2m

a

LoginGraceTime 1m

Ubuntu Ssh Server Secure 12 Reducir el tiempo de inicio de sesión

Establecer conexiones máximas de inicio

Configurar un número máximo adecuado de conexiones simultáneas al demonio SSH puede ser útil contra un ataque de fuerza bruta.

Para esto, cambia la línea.

#MaxStartups 10:30:100

a

MaxStartups 2

Ubuntu Ssh Server Secure 13 Reducir las conexiones simultáneas

Desactivar reenvío

Los atacantes utilizan la técnica de reenvío de puertos para tunelizar las conexiones de red a través de una sesión SSH para iniciar sesión en los sistemas. Por eso, es una buena práctica deshabilitar esta opción.

Para esto, cambia la línea.

X11Forwarding yes

a

X11Forwarding no

Ubuntu Ssh Server Secure 14 Deshabilitar el reenvío X11

Iniciar sesión Más información

De forma predeterminada, SSH registra todo. Si desea registrar más información, como intentos fallidos de inicio de sesión. cambie el valor de esto a «VERBOSE».

Para esto, cambia la línea.

LogLevel INFO

a

LogLevel VERBOSE

Ubuntu Ssh Server Secure 15 Aumenta el registro de diagnósticos

Deshabilitar contraseñas vacías

Es necesario denegar usuarios con contraseñas vacías en su servidor. Por defecto, PermitEmptyPasswords está deshabilitado en Ubuntu.

Si no, cambie la línea como se muestra a continuación.

PermitEmptyPasswords no

Ubuntu Ssh Server Secure 16 Deshabilitar contraseñas vacías

Establecer intervalo de tiempo de espera inactivo

De forma predeterminada, esta opción no está disponible en el archivo de configuración de SSH predeterminado, por lo que es una buena práctica establecer un tiempo de espera de inactividad adecuado para evitar una sesión desatendida.

Para ello, agregue las siguientes líneas.

ClientAliveInterval 300
ClientAliveCountMax 0

Ubuntu Ssh Server Secure 17 Deshabilitar la duración del cliente

Modo estricto

Esto evitará el uso de directorios de inicio inseguros y permisos de archivos clave. Por defecto, esta opción está habilitada.

Si no, cambie la siguiente línea:

StrictModes yes

Guarde y salga del archivo «/etc/ssh/sshd_config» y reinicie el servidor SSH.

sudo systemctl restart ssh

Ubuntu Ssh Server Secure 18 Reiniciar Ssh Daemon

SSH seguro mediante envoltorios TCP

Un contenedor TCP proporciona control de acceso basado en host a los servicios de red utilizados para filtrar el acceso de red a Internet. Edite su archivo «/etc/hosts.allow» para permitir SSH solo desde «192.168.68.1» y «192.168.68.175».

sudo nano /etc/hosts.allow

Agregue la siguiente línea:

sshd : 192.168.68.1 192.168.68.175

Ubuntu Ssh Server Secure 19 Filtro Ip Acceso Hosts Archivo

SSH seguro usando iptables

De forma predeterminada, un servidor SSH solo debe aceptar conexiones desde su LAN u otros sitios remotos. Es una buena práctica permitir que solo direcciones IP específicas accedan a SSH y bloquear el acceso a SSH a direcciones IP no autorizadas.

Para permitir solo conexiones SSH desde «192.168.68.1», establezca las reglas en iptables:

sudo iptables -A INPUT -p tcp -m state --state NEW --source 192.168.68.1 --dport 2200 -j ACCEPT

Deshabilite las conexiones SSH de todos los demás hosts ejecutando el siguiente comando:

sudo iptables -A INPUT -p tcp --dport 2200 -j DROP

Ubuntu Ssh Server Secure 20 Filtro de dirección IP Cortafuegos

Personalice las conexiones SSH en la máquina local

En su máquina local (la máquina que usó para conectarse al servidor remoto), agregue un archivo de configuración para simplificar la opción de línea de comando.

  1. Cree un archivo de «config» (no se requiere extensión de archivo) en su carpeta «/home/user/.ssh».
  2. Abra el archivo y agregue las siguientes líneas:
Host sshserver
    HostName remote.server.ip.address.com
    Port 2200
    User foobar
    IdentityFile ~/.ssh/remote.server.key

Cambie los detalles de la configuración de su propio servidor remoto.

  1. Guarde y salga del editor de texto. Para conectarse a su servidor remoto, escriba el siguiente comando:
ssh sshserver

Además de proteger su servidor SSH, también debe utilizar estas herramientas para proteger otras partes de su servidor.

Preguntas frecuentes

La dirección IP de mi máquina local cambió. ¿Todavía es posible acceder a mi servidor a través de SSH?

Si ha habilitado el filtrado de IP, no podrá acceder a su servidor una vez que cambie su dirección IP.

Lo que puede hacer para mitigar este problema es configurar su servidor remoto para aceptar un rango en lugar de una dirección específica. Simplemente configure su firewall para aceptar un rango de IP para conexiones SSH: sudo iptables -A INPUT -p tcp -m state --state NEW --source 192.168.1.0/24 --dport 2200 -j ACCEPT.

Mi servidor está filtrando a través del archivo de hosts. ¿Es mejor usar también iptables para proteger mi sistema?

En su mayor parte, solo necesita configurar un único filtro para su servidor SSH. El uso de múltiples filtros de IP hará que le resulte difícil solucionar cualquier problema que pueda surgir durante la producción.

Asegúrese de que tanto su firewall como su filtro IP funcionen de la mano para proteger las interfaces de red de su servidor. Por ejemplo, es una buena práctica bloquear cualquier puerto no utilizado a través de su firewall y solo filtrar las conexiones a través de su archivo “/etc/hosts”.

Perdí la clave privada de mi máquina local. ¿Todavía es posible iniciar sesión en mi servidor a través de SSH?

No, no podrá acceder a su servidor si perdió la clave privada. La mejor manera de lidiar con este problema es acceder al servidor físico o a través de una consola raíz de VPS. Vuelva a habilitar la autenticación de contraseña configurando el PasswordAuthentication variable a «sí», luego reinicie su demonio ssh ejecutando el comando sudo systemctl restart ssh.

Credito de imagen: Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.

¿Le ha parecido útil este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.