Como Configurar uma Armadilha Endlessh no Ubuntu 22.04

O autor selecionou o Fundo de Software Livre e de Código Aberto para receber uma doação como parte do programa Escreva para Doações.

Introdução

Ao analisar os registros de autenticação, você pode ver várias tentativas de login falhadas de vários endereços IP. Essas tentativas de login falhadas geralmente vêm de um nó em uma botnet que escaneia toda a web em busca de servidores vulneráveis com credenciais padrão. Embora a maioria das pessoas tenha uma senha segura ou chaves SSH impedindo que invasores acessem seu servidor, alguns servidores serão vulneráveis a esse tipo de escaneamento. Embora você possa não ser capaz de parar esses ataques, você pode retardá-los com tarpits.

Neste tutorial, você irá instalar e configurar o Endlessh, um tarpit que envia lentamente um banner infinitamente longo para qualquer usuário que tente fazer login. Você também irá configurar o serviço SSH para rodar em uma porta diferente, o que tornará seus registros de autenticação mais legíveis.

Após completar este tutorial, você será capaz de se conectar ao seu servidor em uma porta não padrão, enquanto quaisquer bots escaneando seu servidor descobrirão que estão perdendo tempo batendo em uma porta que nunca se abrirá.

Pré-requisitos

Para completar este tutorial, você precisará do seguinte:

Passo 1 – Movendo SSH para uma Porta Não Padrão

Neste passo, você moverá o SSH para uma porta não padrão para liberar uma porta para o Endlessh. Como os botnets não têm recursos infinitos, geralmente eles escaneiam apenas a porta SSH padrão (22). Ao mover o seu SSH para uma porta não padrão, você pode prender o bot na armadilha do Endlessh.

Para começar, faça um backup do arquivo de configuração do SSH do seu servidor com o seguinte comando:

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

Este arquivo pode ser usado para restaurar as configurações originais se algo não funcionar ou se você decidir mover o SSH de volta para a porta padrão.

Abra o arquivo de configuração SSH /etc/ssh/sshd_config usando o nano ou o seu editor de texto favorito:

  1. sudo nano /etc/ssh/sshd_config

Localize a linha #Port 22. Remova o comentário desta linha removendo o # e, em seguida, altere a porta para uma porta não utilizada no seu servidor:

/etc/ssh/sshd_config
...
Port 2222
...

Um exemplo de porta normalmente não utilizada é 2222. Você pode selecionar qualquer porta que desejar para suas conexões SSH recorrentes. Salve e feche o arquivo.

Se o seu servidor estiver usando um firewall, como o ufw, você precisará permitir o tráfego para a nova porta:

  1. sudo ufw allow 2222/tcp

Em seguida, reinicie o serviço SSH:

  1. sudo systemctl restart sshd

Em uma sessão de terminal separada, tente se conectar ao seu servidor usando a nova porta:

  1. ssh sammy@your_server_ip -p 2222

Aviso: Não feche sua sessão SSH ativa, a menos que tenha confirmado que pode usar SSH na nova porta. Se você não conseguir se conectar através da nova porta, corre o risco de perder o acesso ao seu servidor ao fechar a sessão. Se não conseguir se conectar ao seu servidor em uma sessão de terminal separada, você pode restaurar suas configurações SSH originais executando os seguintes comandos:

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

Se encontrar mais problemas, verifique se o sshd reiniciou com êxito e revise as configurações do seu firewall para garantir que a porta 2222 aceite o tráfego TCP.

Depois de verificar que pode fazer uma nova conexão com a porta 2222, pode fechar seu terminal original com segurança. Ao se conectar ao seu servidor no futuro, você sempre precisará especificar a nova porta, assim:

  1. ssh sammy@your_server_ip -p 2222

Agora que você moveu com sucesso o SSH para uma porta não padrão, é hora de configurar o Endlessh.

Passo 2 – Instalando Endlessh

O Endlessh não possui um pacote oficial, então você irá clonar o repositório para construí-lo manualmente. Você usará o Git para clonar o repositório, o pacote build-essential (para compilar o projeto) e o pacote libc6-dev.

Instale os pacotes necessários usando o gerenciador de pacotes apt:

  1. sudo apt install build-essential libc6-dev

Confirme a instalação com y quando solicitado.

Em seguida, clone o repositório Endlessh do GitHub para o seu diretório home:

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

Mova-se para o diretório do projeto e use o comando make para compilar o Endlessh:

  1. cd endlessh
  2. make

Agora você pode iniciar o Endlessh com o seguinte comando:

  1. sudo ./endlessh -v -p 22

Para testar se o Endlessh está funcionando, você pode tentar fazer uma conexão SSH na porta 22 com a flag verbose -v, que mostrará o banner infinito sendo transmitido. Em uma nova janela do terminal, faça uma conexão SSH na porta 22 com um dos seguintes comandos:

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

Quando sua nova sessão SSH tentar se conectar à porta 22, você verá uma sequência de caracteres aleatórios aparecer no terminal de conexão a cada 10 segundos até que a sessão seja fechada, como o exemplo de saída abaixo:

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

Depois de confirmar que está funcionando ao tentar se conectar com uma nova sessão, você pode fechar o novo terminal e parar o Endlessh usando Ctrl+C em sua sessão de terminal original.

Nesta etapa, você baixou e construiu o Endlessh a partir da fonte. Em seguida, você o configurará e implantará como um serviço para torná-lo persistente ao fazer logout e reiniciar seu servidor.

Passo 3 – Configurando o Endlessh

Neste passo, você configurará o Endlessh como um serviço que persistirá após o término da sua sessão e através de reinicializações do sistema.

Mova o arquivo binário compilado para o diretório /usr/local/bin:

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

Informe sua senha, se solicitado.

Copie o arquivo de serviço do projeto para o diretório /etc/systemd/system:

  1. sudo cp util/endlessh.service /etc/systemd/system/

Você alterará ligeiramente o arquivo de serviço para executar o Endlessh em portas abaixo de 1024. Abra o arquivo de serviço no nano ou no seu editor de texto favorito:

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

Encontre a seção sobre a execução do Endlessh em portas abaixo de 1024.

Atualize o arquivo removendo # no início da linha com AmbientCapabilities=CAP_NET_BIND_SERVICE e adicionando # no início da linha PrivateUsers=true, assim:

/etc/systemd/system/endlessh.service
...
## Se você quiser que o Endlessh se ligue em portas < 1024
## 1) execute: 
##     setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) descomente a linha seguinte
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comente a linha seguinte
#PrivateUsers=true
...

Salve e saia do arquivo.

A seguir, você permitirá que o Endlessh seja executado em portas inferiores a 1024, também conhecidas como portas privilegiadas do domínio da internet. Defina essa capacidade para o binário do Endlessh com o comando setcap:

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

Você precisará definir um arquivo de configuração para o Endlessh informando qual porta usar. Crie e abra um arquivo de configuração chamado /etc/endlessh/config:

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

No arquivo de configuração, defina a porta a ser utilizada como 22:

/etc/endlessh/config
Port 22

Salve e feche o arquivo.

Agora você pode iniciar o serviço Endlessh persistentemente:

  1. sudo systemctl --now enable endlessh

Incluir --now enable fará com que o serviço persista após reiniciar o servidor.

Para verificar se o serviço foi iniciado com sucesso, você pode usar o comando systemctl status:

  1. sudo systemctl status endlessh

Se iniciado com sucesso, você verá uma saída 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

Se estiver em execução, você pode tentar conectar na porta 22 em uma nova sessão de terminal:

  1. ssh sammy@your_server_ip

Como sua armadilha está em execução, a nova sessão de terminal não conseguirá se conectar e permanecerá em perpetuidade até ser interrompida manualmente com Ctrl+C no terminal conectado.

Se desejar interromper o serviço em execução, você pode usar o seguinte comando:

  1. sudo systemctl --now disable endlessh

Após interromper o serviço, você pode usar as instruções de restauração do SSH no aviso da Etapa 1 para restaurar a configuração original do seu servidor. Você pode reativar o serviço com sudo systemctl --now enable endlessh sem passar pelo processo de configuração novamente, mas certifique-se de que o SSH não está em execução na porta 22 quando o fizer.

Conclusão

Você instalou e configurou com sucesso o Endlessh, ajudou a limpar os logs de autenticação e se preparou para desperdiçar o tempo de bots SSH aleatórios.

Após configurar sua armadilha Endlessh, revise outras Medidas de Segurança Recomendadas para Proteger seus Servidores.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04