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:
- Um servidor Ubuntu com um usuário não root sudo, um firewall e pelo menos 1GB de RAM, que você pode configurar seguindo o Guia de Configuração Inicial do Servidor com Ubuntu 22.04.
- O Git instalado no seu servidor, o que você pode fazer com o Tutorial de Instalação do Git.
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:
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:
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:
...
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:
Em seguida, reinicie o serviço SSH:
Em uma sessão de terminal separada, tente se conectar ao seu servidor usando a nova porta:
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:
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:
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:
Confirme a instalação com y
quando solicitado.
Em seguida, clone o repositório Endlessh do GitHub para o seu diretório home:
Mova-se para o diretório do projeto e utilize o comando make
para compilar o Endlessh:
Agora você pode iniciar o Endlessh com o seguinte comando:
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:
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:
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
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
:
Digite sua senha, se solicitado.
Copie o arquivo de serviço do projeto para o diretório /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:
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:
...
## 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
:
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
:
No arquivo de configuração, defina a porta a ser usada como 22
:
Port 22
Salve e feche o arquivo.
Agora você pode iniciar o serviço Endlessh persistentemente:
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
:
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:
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:
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