La mayor preocupación sería la gente que inicia sesión como administrador de la computadora a través de SSH. Esto se puede hacer por la fuerza bruta si tiene una contraseña fácil de adivinar.
Hay varias medidas de seguridad que puede tomar, a continuación se detallan algunas de las que siempre tomo al configurar un servidor SSH y algunas adicionales.
Use una contraseña segura, que consta de al menos (digamos) 10 letras mayúsculas y minúsculas, números y otros caracteres.
Usuarios de la cárcel a su directorio de inicio. Los usuarios encarcelados no podrán acceder / editar archivos que están fuera de su directorio de inicio. Por lo tanto, su usuario no podrá acceder / editar archivos clave del sistema. Se pueden encontrar muchos tutoriales en línea sobre cómo encarcelar a un usuario. La mayoría de ellos usan JailKit . Un ejemplo de este tutorial se puede encontrar aquí . Alternativamente, también puede usar la ChrootDirectory
directiva nativa del servidor OpenSSH . Un ejemplo de un tutorial sobre esto se puede encontrar aquí .
Instalar Fail2Ban . Fail2Ban es un programa que verifica los registros de autenticación en busca de entradas incorrectas. Cuando se alcanza un cierto límite, agrega un bloqueo de firewall para esa determinada IP durante un período de tiempo predeterminado. También hay varios tutoriales en línea que se encuentran en línea sobre cómo configurar Fail2Ban con SSH, un ejemplo sería este . La página de inicio de Fail2Ban también contiene algunos CÓMOs agradables y completos.
Deshabilite el inicio de sesión raíz a través de SSH. Este es el usuario que tiene acceso a casi todos los archivos en su sistema, por lo tanto, se recomienda deshabilitar su inicio de sesión de shell. En las últimas versiones de Ubuntu, el usuario root se deshabilita automáticamente, pero de todos modos no está de más deshabilitar su acceso SSH. Esto se hace editando el archivo /etc/ssh/sshd_config
. ✝ Busque la siguiente línea y asegúrese de que no haya ningún # delante.
#PermitRootLogin no
Use un puerto no estándar (por ejemplo, no 22) Esto se hace a través del reenvío de puertos en su enrutador (por ejemplo, 16121 -> 22 en lugar de 22 -> 22) o haciendo que el demonio SSH escuche en un puerto diferente. Esto hará que su servicio SSH sea menos fácilmente detectable para usuarios malintencionados. Esto se hace editando el archivo /etc/ssh/sshd_config
. ✝ Busque la siguiente línea y cambie 22 a cualquier puerto que desee. No olvide reenviar el puerto correcto en su enrutador después.
Port 22
No use contraseñas para iniciar sesión. Además de las contraseñas, SSH también permite iniciar sesión mediante el uso de claves privadas. Esto significa que se almacena una clave en su computadora en la que accede a la SSH de la máquina SSH. Cuando se intenta una conexión, el cliente SSH usa la clave para iniciar sesión en el servidor en lugar de mediante la autenticación de contraseña. Las claves de autenticación son mucho más fuertes criptográficamente que las contraseñas y, por lo tanto, no son tan fáciles de descifrar. También hay varios tutoriales en línea que se encuentran en línea sobre cómo configurar la autenticación basada en claves con SSH, un ejemplo sería este . (Si utiliza SSH desde Windows con PuTTY, consulte este enlace para obtener un tutorial de PuTTY). Después de configurar la autenticación basada en claves, puede desactivar la autenticación de contraseña editando el archivo /etc/ssh/sshd_config
. ✝ Busque la siguiente línea y asegúrese de que no haya ningún # delante.
#PasswordAuthentication no
Opcionalmente, como @ Linker3000 mencionó en su comentario, puede configurar un túnel VPN para la PC a la que desea acceder a través de SSH y luego no permitir el acceso a la red no local en el servidor SSH. De esa manera, ningún dispositivo externo sin una conexión VPN podrá acceder a su servidor SSH. Esto puede hacerse negando TODOS los hosts y luego permitiendo que solo las IP de la red local inicien sesión. Esto se hace editando /etc/hosts.deny
y agregando lo siguiente:
sshd: ALL
y para /etc/hosts.allow
agregar lo siguiente:
sshd: 192.168.1.*
donde la IP coincide con la de su red local. *
es un comodín, por 192.168.1.
lo que se aceptarán todas las direcciones IP que comiencen por . Si esto no funciona, su distribución podría usar en ssh
lugar de sshd
. En ese caso, deberías probar ssh: 192.168.1.*
y en su ssh: ALL
lugar.
Solo puede permitir hosts específicos, haga lo mismo con /etc/hosts.allow
y /etc/hosts.deny
como se describe en 6, pero /etc/hosts.allow
agregue la siguiente línea y cada host para permitir separados por espacios:
sshd: {IP OF HOST TO ALLOW 1} {IP OF HOST TO ALLOW 2} {IP OF HOST TO ALLOW 3} {ETC.}
Permita que solo usuarios específicos accedan a su servidor SSH. Esto se hace editando el archivo /etc/ssh/sshd_config
. ✝ Busque la siguiente línea y asegúrese de que no haya ningún # delante. Si no existe, créelo. Por ejemplo, si solo desea permitir a John, Tom y Mary, agregue / edite esta línea:
AllowUsers john tom mary
También puede denegar usuarios específicos, por ejemplo, si desea denegar el acceso a John, Tom y Mary, agregue / edite esta línea:
DenyUsers john tom mary
Solo permita el protocolo SSH2 para las conexiones entrantes. Hay dos versiones del protocolo SSH. SSH1 está sujeto a problemas de seguridad, por lo que se recomienda usar SSH 2. Esto se puede forzar editando el archivo /etc/ssh/sshd_config
. ✝ Busque la siguiente línea y asegúrese de que no haya ningún # delante. Si no existe, créelo.
Protocol 2,1
quite el 1 para que la línea sea
Protocol 2
No permita que los usuarios inicien sesión sin una contraseña establecida. Esto se puede forzar editando el archivo /etc/ssh/sshd_config
. ✝ Busque la siguiente línea y asegúrese de que no haya ningún # delante. Si no existe, créelo.
PermitEmptyPasswords no
Y aunque es simple y tal vez no sea necesario decirlo, pero demostró ser crucial en varios casos, mantenga su software actualizado. Actualice regularmente sus paquetes / software instalados.
dependiendo de qué distribución de Linux esté usando.