Dado que el acceso SSH es el punto de entrada más importante para administrar su servidor, se ha convertido en un vector de ataque ampliamente utilizado.
Los pasos básicos para asegurar SSH incluyen: deshabilitar el acceso a la raíz, desactivar la autenticación de contraseña por completo (y usar claves en su lugar) y cambiar los puertos (poco que ver con la seguridad, excepto minimizar los escáneres de puertos comunes y registrar el correo no deseado).
El siguiente paso sería una solución de firewall PF con seguimiento de conexión. Esta solución administraría los estados de conexión y bloquearía cualquier IP que tenga demasiadas conexiones. Esto funciona muy bien y es muy fácil de hacer con PF, pero el demonio SSH todavía está expuesto a Internet.
¿Qué tal hacer SSH completamente inaccesible desde el exterior? Aquí es donde entra en juego spiped . Desde la página de inicio:
Spiped (pronunciado "ess-pipe-dee") es una utilidad para crear canalizaciones simétricamente encriptadas y autenticadas entre direcciones de socket, para que uno pueda conectarse a una dirección (por ejemplo, un socket UNIX en localhost) y tener una conexión transparente establecida a otra dirección (por ejemplo, un socket UNIX en un sistema diferente). Esto es similar a la funcionalidad 'ssh -L', pero no utiliza SSH y requiere una clave simétrica precompartida.
¡Excelente! Afortunadamente para nosotros, tiene un paquete OpenBSD de alta calidad que hace todo el trabajo de preparación para nosotros, por lo que podemos comenzar instalándolo:
sudo pkg_add spiped
Esto también instala un buen script de inicio para nosotros, por lo que podemos seguir adelante y habilitarlo:
sudo rcctl enable spiped
Y finalmente comenzarlo:
sudo rcctl start spiped
El script de inicio se asegura de que la clave se cree para nosotros (que necesitaremos en una máquina local en un momento).
Lo que debemos hacer ahora es deshabilitar la sshd
escucha en la dirección pública, bloquear el puerto 22 y permitir el puerto 8022 (que se usa por defecto en el script de inicio spiped).
Abra el /etc/ssh/sshd_config
archivo y cambie (y descomente) la ListenAddress
línea para leer 127.0.0.1
:
ListenAddress 127.0.0.1
Si está utilizando reglas PF para el bloqueo de puertos, asegúrese de pasar el puerto 8022 (y puede dejar el puerto 22 bloqueado), por ejemplo:
pass in on egress proto tcp from any to any port 8022
Asegúrese de volver a cargar las reglas para activarlo:
sudo pfctl -f /etc/pf.conf
Ahora todo lo que necesitamos es copiar la clave spiped generada ( /etc/spiped/spiped.key
) desde el servidor a una máquina local y ajustar nuestra configuración SSH, algo en las siguientes líneas:
Host HOSTNAME
ProxyCommand spipe -t %h:8022 -k ~/.ssh/spiped.key
Necesitas tener spipe/spiped
instalado también en una máquina local, obviamente. Si ha copiado la clave y ha ajustado los nombres / rutas, entonces debería poder conectarse con esa ProxyCommand
línea en su ~/.ssh/config
archivo.
Después de que haya confirmado que está funcionando, podemos reiniciar sshd
en un servidor:
sudo rcctl restart sshd
¡Y eso es! Ahora ha eliminado por completo un vector de ataque grande, y tiene un servicio menos escuchando en una interfaz pública. Ahora debería parecer que sus conexiones SSH provienen de localhost, por ejemplo:
username ttyp0 localhost Thu Nov 06 07:58 still logged in
Una ventaja de usar Vultr es que cada Vultr VPS ofrece un buen cliente de tipo VNC en línea disponible que podemos usar en caso de que nos bloqueemos accidentalmente. ¡Experimenta lejos!