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. Es ampliamente utilizado por los administradores de sistemas para controlar la Web y otros tipos de servidores de forma remota. En este artículo, le mostraremos cómo puede proteger su servidor SSH.
Nota: este tutorial asume que el servidor SSH ejecuta Ubuntu 14.04 y la máquina cliente es Linux.
Primeros pasos: instalar SSH
Primero, debe actualizar su sistema e instalar los paquetes necesarios en su sistema.
Para actualizar el sistema e instalar el servidor SSH en la máquina del servidor, ejecute el siguiente comando:
sudo apt-get update sudo apt-get install openssh-server
Para instalar el cliente SSH en la máquina cliente, ejecute el siguiente comando:
sudo apt-get install openssh-client
Configurar SSH para inicio de sesión sin contraseña
Hay dos métodos diferentes para iniciar sesión en un servidor SSH: uno es la autenticación basada en contraseña y el otro es la autenticación basada en clave. 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 su usuario 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:
cd ~/.ssh ssh-keygen -t rsa
Simplemente presione la tecla Enter en cada indicación. Esto produce dos archivos: id_rsa.pub (clave pública) e id_rsa (clave privada).
Esto generará algo similar a lo siguiente:
En su servidor, cree la siguiente carpeta (si no existe):
De regreso a su máquina cliente, copie el archivo «id_rsa.pub» a su servidor usando el siguiente comando:
scp -P "yourport" ~/.ssh/id_rsa.pub username@serverip:~/.ssh
Cambie «yourport» al número de puerto que usa su servidor SSH (el valor predeterminado es 22) y «serverip» a la dirección IP del servidor.
En su máquina servidor, cambie el nombre del archivo y los permisos de configuración.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 700 .ssh chmod 600 .ssh/authorized_keys rm .ssh/id_rsa.pub
Para probar si el método de autenticación basado en claves funciona, intente conectarse a su servidor SSH desde la máquina cliente:
ssh -P "yourport" username@serverip
Si puede conectarse sin ingresar una contraseña, entonces funciona el método de autenticación basado en claves.
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 establecer 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 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. Se recomienda cambiar el puerto predeterminado.
Para cambiar el puerto predeterminado a 2200, cambie:
a
Solo use 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:
Limitar el acceso de los 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:
Para denegar «usuario1 incorrecto» y «usuario2 incorrecto», agregue la siguiente línea:
DenyUsers baduser1 baduser2
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. Este es un gran riesgo de seguridad, por lo que se recomienda denegar el inicio de sesión raíz.
Para deshabilitar el inicio de sesión raíz, cambie la línea
PermitRootLogin without-password
a
Ocultar último inicio de sesión
Puede ocultar quién inició sesión por última vez cuando un usuario inicia sesión.
Para esto, cambia la línea.
a
Restringir la interfaz para iniciar sesión
Por defecto, ssh escuchará en todas las interfaces de red. Si desea permitir que se acepte una conexión SSH desde direcciones IP específicas, puede cambiar la línea
a
ListenAddress 192.168.1.20
Deshabilitar autenticación de contraseña
El uso de la autenticación de contraseña es un gran riesgo de seguridad si su usuario usa una contraseña débil. Se recomienda utilizar «claves ssh». 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
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 manera predeterminada, un archivo .rhosts está deshabilitado; si no, cambie las líneas como se muestra a continuación.
IgnoreRhosts yes RhostsAuthentication no RSAAuthentication yes
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.
De lo contrario, cambie la línea que se muestra a continuación.
HostbasedAuthentication no
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. Se recomienda reducirlo a 60 segundos.
Para esto, cambia la línea.
a
Establecer el máximo de conexiones 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.
a
Deshabilitar 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. Se recomienda deshabilitar esta opción.
Para esto, cambia la línea.
a
Registrar 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. puede cambiar el valor de esto a «VERBOSE».
Para esto, cambia la línea.
a
Deshabilitar contraseñas vacías
Es necesario denegar usuarios con contraseñas vacías en su servidor. Por defecto PermitEmptyPasswords
está deshabilitado en Ubuntu.
De lo contrario, cambie la línea que se muestra a continuación.
Establecer el intervalo de tiempo de inactividad
De forma predeterminada, esta opción no está disponible en el archivo de configuración predeterminado de SSH. Se recomienda establecer un tiempo de inactividad adecuado para evitar una sesión ssh desatendida.
Para ello, agregue las siguientes líneas.
ClientAliveInterval 300 ClientAliveCountMax 0
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.
Ahora guarde y salga del archivo /etc/ssh/sshd_config y reinicie el servidor SSH.
SSH seguro usando 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.1.2 y 172.16.23.12.
sudo nano /etc/hosts.allow
Agregue la siguiente línea:
sshd : 192.168.1.2 172.16.23.12
SSH seguro usando iptables
De forma predeterminada, un servidor SSH solo debe aceptar conexiones desde su LAN u otros sitios remotos. Se recomienda permitir que solo direcciones IP específicas accedan a SSH y bloquear el acceso a SSH a direcciones IP no autorizadas.
Para permitir conexiones SSH solo desde 192.168.1.2, ejecute el siguiente comando:
sudo iptables -A INPUT -p tcp -m state --state NEW --source 192.168.1.2 --dport 2200 -j ACCEPT
Deshabilite la conexión SSH de todos los demás hosts ejecutando el siguiente comando:
sudo iptables -A INPUT -p tcp --dport 2200 -j DROP
Ahora guarde sus nuevas reglas usando el siguiente comando:
sudo iptables-save > /etc/iptables/rules.v4
Conclusión
Las instrucciones anteriores son técnicas muy poderosas para asegurar su servidor SSH. Esta publicación cubre toda la información que la mayoría de los usuarios necesitarán para un servidor SSH. Si tiene alguna pregunta, no dude en comentar a continuación.
Referencia: SSH ubuntu