SSH es uno de los protocolos de comunicación más populares de Internet. Es ampliamente utilizado por desarrolladores, webmasters y administradores de sistemas. Te permite obtener acceso remoto a tu nueva nube o caja dedicada en solo segundos utilizando un canal de comunicación encriptado.
Aunque SSH es mucho más seguro que el protocolo FTP (ya que transmite la información sin cifrar en formato de texto sin formato), aún puede ser atacado y descifrado si no sigues las mejores prácticas para fortalecerlo correctamente.
Es por eso que hoy exploraremos las formas más populares de fortalecer SSH una vez que tu proveedor de nube te brinde acceso al nuevo sistema. Comencemos con la parte divertida: asegurar SSH.
Indice
Consejos para fortalecer SSH
Sigue estos pasos para convertir tu servidor SSH en un protocolo de comunicación sólido como una roca.
Nota: la mayoría de estos consejos requerirán que reinicies el servicio SSH para aplicar los cambios.
Configura un puerto SSH personalizado
Esta es una de las formas más antiguas y populares de ocultar el servicio SSH. ¿Por qué?
Porque de forma predeterminada, SSH viene a escuchar en el puerto 22, que es ampliamente conocido entre los atacantes y las herramientas de seguridad / escáneres de puertos que lanzan ataques de fuerza bruta contra él. Si bien esto se considera seguridad por oscuridad, ayuda a eliminar mucho ruido en el puerto 22.
Edita tu archivo de configuración principal SSH :
nano -w /etc/ssh/sshd_config
Buscar: Port
Luego configúralo en algo diferente a 22, como:
Port 899
Utiliza envoltorios TCP
Esta protección ACL basada en host te ayudará a filtrar quién puede acceder al servidor OpenSSH.
TCP Wrappers funciona con dos archivos: /etc/hosts.allow y /etc/hosts.deny
Primero, neguemos todas las conexiones de hosts desconocidos:
nano -w /etc/hosts.deny
Luego agrega esta línea:
ALL : ALL
Si deseas permitir el acceso desde tu IP doméstica estática, por ejemplo, debes agregar este código al archivo de permiso:
nano -w /etc/hosts.allow
Luego agrega esto al final del archivo:
sshd : 11.22.33.44
Reemplaza 11.22.33.44 con tu IP pública real, o con tu IP de LAN privada, puedes elegir cualquiera.
Esto te ayudará a bloquear el resto del mundo y permitir solo las direcciones IP especificadas.
Filtra el puerto SSH en tu firewall
El uso de un firewall de software del lado del servidor es una de las cosas básicas que todos los servidores deberían haber configurado después de instalar el sistema operativo.
Uno de los cortafuegos más populares y eficaces que hemos encontrado es CSF de ConfigServer.
Instalar CSF en distribuciones basadas en planes (sin ningún panel de control) es fácil y filtrar los puertos es aún más fácil.
- Edita el archivo csf.conf principal: nano -w /etc/csf/csf.conf
- Luego busca estas variables:
# Allow incoming TCP ports
TCP_IN = «80,443,899»
# Allow outgoing TCP ports
TCP_OUT = «80,443»
En este caso, agregamos nuestro 899puerto SSH personalizado a la lista de conexiones TCP_IN al final después de configurar 80y 443puertos.
Las mejores prácticas de seguridad siempre sugieren permitir solo IP estáticas públicas confiables o conexiones LAN privadas. Tu puerto SSH nunca debe abrirse a conexiones externas que no sean de confianza.
Deshabilitar el inicio de sesión de root
Además de tener el puerto configurado 22de forma predeterminada, los servidores SSH también incluyen el inicio de sesión de root permitido en la mayoría de los sistemas operativos Linux y Unix.
Esto permite que cualquiera se conecte al puerto 22 y use el usuario root como predeterminado, y luego lance una tonelada de ataques de fuerza bruta contra la IP de tu servidor público.
Si tienes la autenticación de contraseña habilitada en tu servicio SSH y su contraseña de root es débil, las posibilidades de que lo pirateen son bastante altas. Es por eso que deshabilitar el inicio de sesión de root es una de las técnicas más antiguas y más utilizadas para evitar el compromiso del sistema en instalaciones de sistemas operativos nuevos.
Puedes comprobar esto dejando la instalación SSH por defecto, analizar el /var/log/securearchivo y ver cuántos ataques de fuerza bruta recibirás en unas pocas horas; te sorprenderás.
Incluso si estás utilizando contraseñas seguras, siempre se recomienda deshabilitar el inicio de sesión de root y usar un usuario SSH principal en su lugar, por lo que si necesitas obtener acceso de root, puedes hacerlo usando el comando si es necesario.
- Edita el archivo de configuración principal SSH: nano -w /etc/ssh/sshd_config
- Luego busca la variable «PermitRootLogin» y configúrela en no: PermitRootLogin no
- Si no está presente, agrega la variable AllowUsers al archivo y configura tus usuarios permitidos allí: AllowUsers sectrails9
¿Qué sucede si necesitas acceso de root desde determinadas direcciones IP? ¿Hay alguna forma de deshabilitar el acceso de root para todas las direcciones IP y solo permitir algunas específicas?
Sí, se puede hacer agregando los usuarios raíz y las IP dentro de la línea AllowUsers, como puedes ver a continuación:
AllowUsers sectrails9 root@192.168.1.110
En este caso, estamos permitiendo el acceso SSH al usuario del sistema sectrails9, y también al usuario root proveniente de 192.168.1.110la dirección IP.
Inicio de sesión sin contraseña SSH
Los inicios de sesión basados en contraseñas son buenos si tienes un conjunto sólido de caracteres como símbolos, mayúsculas, minúsculas y números; sin embargo, todos tienen el riesgo de romperse por fuerza bruta tarde o temprano.
Lo mejor, en este caso, es reemplazar los inicios de sesión antiguos basados en contraseñas con inicios de sesión basados en claves que aumentarán su seguridad, pero también te permitirán establecer un SSHlogin rápido inmediato sin ningún aviso en el medio, como sucede cuando SSH solicita la contraseña.
El uso de inicios de sesión basados en claves SSH también te permitirá ejecutar tareas automatizadas que requieren conexiones SSH como sincronización de archivos rsync entre servidores, transferencias de archivos específicos, volcados de MySQL remotos, etc.
- Crea su clave SSH usando: ssh-keygen
- Te indicará algunas cosas, presiona enter en todas esas.
¿Cuál es el propósito de usar una frase de contraseña para las claves ssh? Sencillo: cifra tu clave privada /home/sectrails9/.ssh/id_rsa. Entonces, en este caso, si un atacante puede encontrarte, será inútil a menos que conozca la frase de contraseña.
Pero, las frases de contraseña para las claves SSH no son las mejores si necesitas ejecutar tareas automatizadas. Es por eso que la mayoría de las claves ssh no tienen ninguna frase de contraseña establecida.
La solución alternativa para esto es una solución intermedia, como restringir el inicio de sesión SSH mediante claves SSH a una dirección IP en particular.
Contraseñas / frases seguras para usuarios y claves ssh
Si no puedes establecer una clave ssh y aún necesitas usar contraseñas de inicio de sesión, o si decides usar una frase de contraseña en tus claves, asegúrate de usar una combinación de caracteres fuerte.
Trata de incluir:
- Letras mayúsculas y minúsculas
- Símbolos
- Números.
- Hasta 8 caracteres si es posible.
Evitar el uso de:
- Palabras basadas en diccionarios.
- Fechas personales de cumpleaños y aniversario.
- Nombres familiares y de mascotas.
Seguir estos consejos te ayudará a establecer una contraseña / frase de contraseña segura y evitar ser pirateado cuando se produzca un ataque de fuerza bruta.
Establecer intervalo de tiempo de espera inactivo
El valor de tiempo de espera inactivo permite finalizar las sesiones ssh que no se utilizan activamente.
Esta variable se puede editar modificando el ClientAliveIntervalvalor.
nano -w /etc/ssh/sshd_config
Colocar:
ClientAliveInterval 240
En este caso, configuramos 240 que equivale a 4 minutos, una vez que se haya alcanzado el tiempo de espera, la sesión SSH se cerrará automáticamente.
Deshabilita las contraseñas vacías
En Linux y Unix, el sistema permite a los administradores crear usuarios con contraseñas vacías.
Y esto puede ser algo bastante malo si deseas mantener a los atacantes fuera de tus servidores SSH.
Es por eso que lo mejor que puedes hacer es deshabilitar los inicios de sesión remotos para cuentas con una contraseña vacía, esto se puede hacer fácilmente editando el archivo sshd_config.
nano -w /etc/ssh/sshd_config
Luego establece:
PermitEmptyPasswords no
Establecer un banner de advertencia SSH personalizado
Una buena práctica para todos los equipos Linux y Unix es establecer un banner de bienvenida personalizado para las conexiones SSH.
En realidad, esto no es un consejo para reforzar la seguridad, sino solo una advertencia de seguridad para cualquier acceso ilegal a tus sistemas.
Una vez que el usuario haya obtenido acceso, se mostrará un banner de advertencia.
En la mayoría de las distribuciones de Linux, basta con editar el your/etc/motdarchivo.
Si eso no funciona, también puedes descomentar esta línea dentro del archivo sshd_config:
#Banner none
Y establece el camino hacia otra cosa:
Banner /etc/custombanner
Bloquea los ataques de fuerza bruta SSH automáticamente
En esta publicación, mencionamos formas de mitigar los ataques de fuerza bruta varias veces. Sin embargo, la mejor manera de detener un ataque de fuerza bruta una vez detectado es bloquear las direcciones IP infractoras.
¿Cómo se pueden detectar este tipo de ataques contra el servicio SSH de forma automática?
La forma manual es analizar los registros del sistema y verificar quién está intentando conectarse al servidor, y luego bloquearlo usando el firewall del sistema. Sin embargo, existen varias herramientas que pueden realizar esas tareas manuales por ti de una manera eficiente y automatizada.
Hay muchas herramientas para prevenir ataques de fuerza bruta, como SSHGuard, Fail2ban o DenyHosts.
Sin embargo, si estás utilizando CSF Firewall como recomendamos anteriormente, ya tienes un sistema integrado de detección de fuerza bruta llamado LFD.
Edita el csf.confarchivo como ve a continuación:
nano -w /etc/csf/csf.conf
Luego busca estas variables:
# [*]Enable login failure detection of sshd connections
LF_SSHD = «5»
LF_SSHD_PERM = «1»
LF_SSHD set to «5» is the number of max failed connections before blocking the IP address.
LF_SSHD_PERM set to «1» makes this blocking permanent.
Por otro lado, puedes aumentar la protección de fuerza bruta mediante el uso de listas de bloqueo en tiempo real, que es una característica interesante ya incluida en el firewall CSF.
Todas las listas se pueden situar dentro de este archivo: /etc/csf/csf.blocklists, allí encontrarás DShield , Blocklist.de , entre otras listas de bloqueo.
Deshabilite el servidor OpenSSH en las computadoras portátiles y de escritorio
Algunas distribuciones de Linux vienen con OpenSSH Server habilitado de forma predeterminada (y sabes lo que eso significa: inicio de sesión de root habilitado, servicio de escucha en el puerto 22, etc.), y mientras está en servidores Dedicados, VPS y en la nube, el acceso SSH es imprescindible para funcionar. de forma remota. En equipos domésticos como portátiles o PC, no es realmente necesario.
Asegúrate de eliminar el servidor OpenSSH para evitar ataques innecesarios.
Para distribuciones basadas en RHEL:
dnf remove openssh-server
Las distribuciones basadas en Debian / Ubuntu pueden hacer lo mismo usando:
sudo apt-get remove openssh-server
Deshabilitar el reenvío X11
Si estás ejecutando un servidor remoto, tener capacidades de reenvío X11 (servidor de gráficos) no tiene demasiado sentido, ya que siempre te quedarás con tu terminal remoto en blanco y negro.
Para deshabilitar el reenvío X11, sigue estos pasos:
- nano -w /etc/ssh/sshd_config
- Busca esta variable: X11Forwarding yes
- Cámbialo para que sea: X11Forwarding no
Deshabilitar el protocolo X11 te ayudará a prevenir algunos tipos de ataques, ya que nunca se construyó teniendo en cuenta la seguridad, y puede ser utilizado por atacantes malintencionados para abrir un canal al cliente y enviar comandos remotos que pueden terminar realmente mal.
Limita el número máximo de intentos de autenticación
Otra buena forma de protegerse contra los ataques de fuerza bruta es establecer un límite bajo para las veces que un atacante puede intentar iniciar sesión con una contraseña fallida. La variable MaxAuthTries puede ayudarte a mitigar este tipo de ataques.
- nano -w /etc/ssh/sshd_config
- Buscar MaxAuthTries.
- Configúralo en 3, como puedes ver a continuación: MaxAuthTries 3
Habilita las notificaciones de inicio de sesión por correo electrónico
Una de las mejores cosas que puedes hacer para vigilar de cerca tus conexiones SSH entrantes es configurar un script rápido para enviar una alerta una vez que alguien haya iniciado sesión como root a través de SSH.
- nano -w /root/.bashrc
- Pega esto al final del archivo: echo ‘ALERT – Root Shell Access (ServerName) on:’ `date` `who` | mail -s «Alert: Root Access from `who | cut -d'(‘ -f2 | cut -d’)’ -f1`» your@email.com
- Reempláza your@email.com con tu dirección de correo electrónico real.
Para que esto funcione como se esperaba, asegúrate de tener el paquete «mailx» instalado y funcionando. Si no lo tienes, puede instalarlo emitiendo estos comandos:
- Para distribuciones basadas en RHEL: dnf install mailx
- Distribuciones basadas en Debian / Ubuntu: apt-get install mailx
Mantén SSH actualizado
La regla básica que se repetirá una y otra vez: mantén actualizados los paquetes de tu servidor, y eso también incluye OpenSSH.
Para distribuciones basadas en RHEL, puedes usar DNF o yum: dnf update openssh* yum update openssh*
Para distribuciones basadas en Debian / Ubuntu: apt-get update openssh-server
Esto debería ser suficiente para mantener tu servidor OpenSSH parcheado contra nuevas vulnerabilidades.
Seguir estos consejos de seguridad SSH te ayudará a prevenir la mayoría de los ataques SSH más populares en tu sistema operativo Unix / Linux.