El autor seleccionó el Fondo de Software Libre y de Código Abierto para recibir una donación como parte del programa Escribe para Donaciones.
Introducción
Cuando observas los registros de autenticación, es posible que veas varios intentos de inicio de sesión fallidos desde diversas direcciones IP. Estos intentos de inicio de sesión fallidos a menudo provienen de un nodo en una botnet que escanea toda la web en busca de servidores vulnerables con credenciales predeterminadas. Si bien la mayoría de las personas tendrán una contraseña segura o claves SSH que eviten que los atacantes inicien sesión en su servidor, algunos servidores serán vulnerables a este escaneo. Aunque es posible que no puedas detener estos ataques, puedes ralentizarlos con tarpits.
En este tutorial, instalarás y configurarás Endlessh, una tarpit que envía lentamente un banner infinitamente largo a cualquier usuario que intente iniciar sesión. También configurarás el servicio SSH para que se ejecute en un puerto diferente, lo que hará que tus registros de autenticación sean más legibles.
Después de completar este tutorial, podrás conectarte a tu servidor en un puerto no estándar, mientras que cualquier bot que escanee tu servidor encontrará que su tiempo se desperdicia al golpear una puerta que nunca se abrirá.
Requisitos previos
Para completar este tutorial, necesitarás lo siguiente:
- Un servidor Ubuntu con un usuario sudo no root, un firewall y al menos 1 GB de RAM, que puedes configurar siguiendo el Inicio de configuración del servidor con Ubuntu 22.04.
- Git instalado en tu servidor, lo cual puedes hacer con el Tutorial de instalación de Git.
Paso 1 – Mover SSH a un puerto no estándar
En este paso, moverás SSH a un puerto no estándar para liberar un puerto para Endlessh. Debido a que las botnets no tienen recursos infinitos, suelen escanear solo el puerto SSH predeterminado (22
). Al mover tu SSH a un puerto no estándar, puedes atrapar al bot en la trampa de Endlessh.
Para empezar, haz una copia de seguridad del archivo de configuración de SSH desde tu servidor con el siguiente comando:
Este archivo se puede usar para restaurar la configuración original si algo no funciona o si decides volver a mover SSH al puerto predeterminado.
Abre el archivo de configuración SSH /etc/ssh/sshd_config
usando nano o tu editor de texto favorito:
Localiza la línea #Port 22
. Descomenta esta línea eliminando el #
, y luego cambia el puerto a un puerto no utilizado en tu servidor:
...
Port 2222
...
Un ejemplo de un puerto normalmente no utilizado es 2222
. Puedes seleccionar cualquier puerto que desees usar para tus conexiones recurrentes de SSH. Guarda y cierra el archivo.
Si tu servidor está utilizando un firewall, como ufw
, deberás permitir el tráfico al nuevo puerto:
A continuación, reinicia el servicio de SSH:
En una sesión de terminal separada, intenta conectarte a tu servidor usando el nuevo puerto:
Advertencia: No cierres tu sesión activa de SSH a menos que hayas confirmado que puedes usar SSH en el nuevo puerto. Si no puedes conectarte a través del nuevo puerto, corres el riesgo de perder el acceso a tu servidor al cerrar la sesión. Si no puedes conectarte a tu servidor en una sesión de terminal separada, puedes restaurar tu configuración original de SSH ejecutando los siguientes comandos:
Si encuentras más problemas, verifica que sshd
se haya reiniciado correctamente y revisa la configuración de tu firewall para asegurarte de que el puerto 2222
acepte el tráfico tcp.
Una vez que hayas verificado que puedes hacer una nueva conexión al puerto 2222
, puedes cerrar tu terminal original de manera segura. Cuando te conectes a tu servidor en el futuro, siempre necesitarás especificar el nuevo puerto, de la siguiente manera:
Ahora que has movido con éxito SSH a un puerto no estándar, es hora de configurar Endlessh.
Paso 2 – Instalación de Endlessh
Endlessh no tiene un paquete oficial, por lo que clonarás el repositorio para compilarlo manualmente. Utilizarás Git para clonar el repositorio, el paquete build-essential
(para compilar el proyecto) y el paquete libc6-dev
.
Instala los paquetes requeridos utilizando el gestor de paquetes apt:
Confirma la instalación con y
cuando se te solicite.
A continuación, clona el repositorio de Endlessh desde GitHub en tu directorio de inicio:
Muévete al directorio del proyecto y utiliza el comando make
para compilar Endlessh:
Ahora puedes iniciar Endlessh con el siguiente comando:
Para probar que Endlessh está funcionando, puedes intentar hacer una conexión SSH al puerto 22
con la bandera de verbosidad -v
, que mostrará el banner infinito transmitido. En una nueva ventana de terminal, haz una conexión SSH al puerto 22
con cualquiera de los siguientes comandos:
Cuando tu nueva sesión SSH intente conectarse al puerto 22
, verás una cadena de caracteres aleatorios aparecer en la terminal de conexión cada 10 segundos hasta que se cierre la sesión, como se muestra a continuación:
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
Una vez que hayas confirmado que funciona al intentar conectarte con una nueva sesión, puedes cerrar la nueva terminal y detener Endlessh usando Ctrl+C
en tu sesión de terminal original.
En este paso, descargaste y construiste Endlessh desde la fuente. A continuación, lo configurarás y lo implementarás como un servicio para que sea persistente al cerrar la sesión y reiniciar el servidor.
Paso 3 – Configuración de Endlessh
En este paso, configurarás Endlessh como un servicio que persistirá después de que finalice tu sesión y a través de reinicios del sistema.
Mueve el archivo binario compilado al directorio /usr/local/bin
:
Ingresa tu contraseña si se te solicita.
Copia el archivo de servicio del proyecto al directorio /etc/systemd/system
:
Cambiarás ligeramente el archivo de servicio para que ejecute Endlessh en puertos por debajo de 1024
. Abre el archivo de servicio en nano o tu editor de texto favorito:
Encuentra la sección sobre la ejecución de Endlessh en puertos por debajo de 1024
.
Actualiza el archivo eliminando #
al principio de la línea con AmbientCapabilities=CAP_NET_BIND_SERVICE
y agregando #
al principio de la línea PrivateUsers=true
, de la siguiente manera:
...
## Si deseas que Endlessh se vincule en puertos < 1024
## 1) ejecuta:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) descomenta la siguiente línea
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comenta la siguiente línea
#PrivateUsers=true
...
Guarda y cierra el archivo.
A continuación, permitirá que Endlessh se ejecute en puertos inferiores a 1024
, también conocidos como puertos privilegiados del dominio de Internet. Establezca esta capacidad para el binario de Endlessh con el comando setcap
:
Necesitará definir un archivo de configuración para Endlessh para indicarle qué puerto usar. Cree y abra un archivo de configuración llamado /etc/endlessh/config
:
En el archivo de configuración, defina el puerto a utilizar como 22
:
Port 22
Guarde y cierre el archivo.
Ahora puede iniciar el servicio de Endlessh de manera persistente:
Incluir --now enable
hará que el servicio persista después de reiniciar su servidor.
Para verificar que el servicio se inició correctamente, puede usar el comando systemctl status
:
Si se inició correctamente, verá una salida como esta:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
Si está en ejecución, puede intentar conectarse en el puerto 22
en una nueva sesión de terminal:
Debido a que su trampa está en ejecución, la nueva sesión de terminal no podrá conectarse y se ejecutará perpetuamente hasta que se detenga manualmente con Ctrl+C
en la terminal de conexión.
Si desea detener el servicio en ejecución, puede usar el siguiente comando:
Después de detener el servicio, puede usar las instrucciones de restauración de SSH en el aviso del Paso 1 para restaurar la configuración original de su servidor. Puede volver a habilitar el servicio con sudo systemctl --now enable endlessh
sin pasar por el proceso de configuración nuevamente, pero asegúrese de que SSH no esté en ejecución en el puerto 22
cuando lo haga.
Conclusión
Has instalado y configurado correctamente Endlessh, has ayudado a limpiar tus registros de autenticación y te has preparado para perder el tiempo de bots SSH aleatorios.
Después de configurar tu trampa Endlessh, revisa otras Medidas de seguridad recomendadas para proteger tus servidores.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04