Como Configurar uma Armadilha Endlessh no Ubuntu 22.04

O autor selecionou o Fundo 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 encontrar várias tentativas de login malsucedidas de diversos endereços IP. Essas tentativas de login malsucedidas geralmente vêm de um nó em uma botnet que escaneia a web inteira em busca de servidores vulneráveis com credenciais padrão. Embora a maioria das pessoas tenha uma senha segura ou chaves SSH que impeçam os atacantes de acessar seu servidor, alguns servidores podem ser vulneráveis a esse tipo de escaneamento. Embora você possa não conseguir impedir 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 que estejam escaneando seu servidor perceberã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 o 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 escaneiam apenas a porta SSH padrão (22). Ao mover 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 seu 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 do SSH /etc/ssh/sshd_config usando o nano ou seu editor de texto favorito:

  1. sudo nano /etc/ssh/sshd_config

Localize a linha #Port 22. Remova o caractere # para descomentar esta linha e, em seguida, altere a porta para uma porta não utilizada em 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 recorrentes via SSH. Salve e feche o arquivo.

Se o seu servidor estiver usando um firewall, como o ufw, será necessário permitir o tráfego na 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 ativa do SSH a menos que tenha confirmado que pode usar o 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 você não conseguir se conectar ao seu servidor em uma sessão de terminal separada, poderá restaurar suas configurações originais do SSH 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 sucesso e revise as configurações do seu firewall para garantir que a porta 2222 aceite o tráfego tcp.

Depois de verificar se você pode fazer uma nova conexão na 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

Endlessh não possui um pacote oficial, então você irá clonar o repositório para construí-lo manualmente. Você utilizará 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 utilizando 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 utilize 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 para a porta 22 com a flag verbose -v, que irá mostrar o banner infinito sendo transmitido. Em uma nova janela de terminal, faça uma conexão SSH para a 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 resultado 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 ter confirmado que está funcionando ao tentar conectar com uma nova sessão, você pode fechar o novo terminal e parar o Endlessh usando Ctrl+C na sua sessão de terminal original.

Nesta etapa, você baixou e compilou o Endlessh a partir do código-fonte. Em seguida, você o configurará e implantará como um serviço para torná-lo persistente ao sair e reiniciar o 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/

Digite 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ê irá modificar 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ê deseja que o Endlessh se vincule em portas < 1024
## 1) execute: 
##     setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) descomente a seguinte linha
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) comente a seguinte linha
#PrivateUsers=true
...

Salve e saia do arquivo.

Em seguida, 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 em qual porta ele deve ser usado. 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 usada 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 se conectar na porta 22 em uma nova sessão de terminal:

  1. ssh sammy@your_server_ip

Como sua tarpit está em execução, a nova sessão de terminal não poderá se conectar e continuará em perpetuidade até ser interrompida manualmente com Ctrl+C no terminal de conexão.

Se desejar interromper a execução do serviç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 reabilitar 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á sendo executado na porta 22 quando fizer isso.

Conclusão

Você instalou e configurou com sucesso o Endlessh, ajudou a limpar seus registros de autenticação e está preparado 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