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:
- Um servidor Ubuntu com um usuário não-root com permissões 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 seguindo o Tutorial de Instalação do Git.
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:
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:
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:
...
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:
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 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:
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:
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:
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 use 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 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:
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:
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 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
:
Informe sua senha, se solicitado.
Copie o arquivo de serviço do projeto para o diretório /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:
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ê 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
:
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
:
No arquivo de configuração, defina a porta a ser utilizada 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 conectar na porta 22
em uma nova sessão de terminal:
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:
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