Cómo configurar una trampa de Endlessh en Ubuntu 22.04

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:

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:

  1. sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

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:

  1. sudo nano /etc/ssh/sshd_config

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:

/etc/ssh/sshd_config
...
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:

  1. sudo ufw allow 2222/tcp

A continuación, reinicia el servicio de SSH:

  1. sudo systemctl restart sshd

En una sesión de terminal separada, intenta conectarte a tu servidor usando el nuevo puerto:

  1. ssh sammy@your_server_ip -p 2222

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:

  1. sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
  2. sudo systemctl restart sshd

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:

  1. ssh sammy@your_server_ip -p 2222

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:

  1. sudo apt install build-essential libc6-dev

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:

  1. git clone https://github.com/do-community/endlessh

Muévete al directorio del proyecto y utiliza el comando make para compilar Endlessh:

  1. cd endlessh
  2. make

Ahora puedes iniciar Endlessh con el siguiente comando:

  1. sudo ./endlessh -v -p 22

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:

  1. ssh sammy@your_server_ip -v
  1. ssh sammy@your_server_ip -p 22 -v

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:

Output
debug1: 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:

  1. sudo mv ./endlessh /usr/local/bin/

Ingresa tu contraseña si se te solicita.

Copia el archivo de servicio del proyecto al directorio /etc/systemd/system:

  1. sudo cp util/endlessh.service /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:

  1. sudo nano /etc/systemd/system/endlessh.service

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:

/etc/systemd/system/endlessh.service
...
## 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:

  1. sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh

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:

  1. sudo mkdir /etc/endlessh
  2. sudo nano /etc/endlessh/config

En el archivo de configuración, defina el puerto a utilizar como 22:

/etc/endlessh/config
Port 22

Guarde y cierre el archivo.

Ahora puede iniciar el servicio de Endlessh de manera persistente:

  1. sudo systemctl --now enable endlessh

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:

  1. sudo systemctl status endlessh

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:

  1. ssh sammy@your_server_ip

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:

  1. sudo systemctl --now disable endlessh

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