Como Prender Bots de Força Bruta SSH num Ciclo Infinito: O Endlessh Protege a Porta 22 com Apenas 2MB de Memória RAM
O Zumbido Constante na Porta 22: O Flagelo dos Bots de Força Bruta
Qualquer endereço IP público atribuído a um servidor dedicado, VPS ou máquina em Portugal é alvo de varrimentos automáticos contínuos. Poucos minutos após ligares uma máquina à internet com Debian GNU/Linux, dezenas de redes de computadores infetados começam a bater à porta 22 à procura de palavras-passe fracas.
Espreita os registos de autenticação do teu servidor:
journalctl -u ssh -n 50 --no-pager
Vais encontrar uma torrente ininterrupta de tentativas falhadas:
Oct 19 03:12:01 srv sshd[84920]: Failed password for invalid user admin from 185.220.101.5 port 41202 ssh2
Oct 19 03:12:03 srv sshd[84923]: Failed password for invalid user root from 185.220.101.5 port 41204 ssh2
Oct 19 03:12:06 srv sshd[84928]: Failed password for invalid user test from 185.220.101.5 port 41208 ssh2
Oct 19 03:12:09 srv sshd[84931]: Failed password for invalid user oracle from 185.220.101.5 port 41212 ssh2
O CICLO TRADICIONAL DE UM ATAQUE DE FORÇA BRUTA
- Bot Automatizado de Ataque → Porta 22 (Serviço OpenSSH Real)
-
- O OpenSSH cria um processo filho no Linux (Consome ~6MB de RAM)
-
- Executa a pilha de autenticação PAM e troca chaves criptográficas
-
- Rejeita o utilizador inválido → Grava a falha no disco
-
- O bot desliga-se e tenta a senha seguinte num milissegundo!
- Resultado: 50.000 tentativas por dia. Disco saturado, logs cheios e CPU gasto!
Mesmo que tenhas desligado a autenticação por palavra-passe e uses apenas chaves SSH, o OpenSSH tem de criar um processo, alocar memória e negociar criptografia para cada ligação. Com milhares de ataques diários, gastas recursos de processamento e ficas com os ficheiros de auditoria entupidos.
Em vez de te limitares a rejeitar as tentativas, porque não invertes o jogo e prendes os computadores dos atacantes numa armadilha sem fim?
É para isto que serve o Endlessh.
No nosso serviço de alojamento gerido e nas intervenções de consultoria técnica, instalamos tarpits na porta 22 para neutralizar bots e poupar recursos no servidor.
Como Funciona o Endlessh: Tirar Partido da Norma RFC 4253
Como é que um programa minúsculo consegue segurar um atacante ligado durante 48 horas seguidas sem dar erro de ligação?
O segredo está no documento oficial da norma do protocolo SSH (RFC 4253, Secção 4.2). A especificação diz expressamente:
“O servidor PODE enviar outras linhas de dados antes de enviar a linha de versão do protocolo. Cada linha DEVE terminar com Carriage Return e Line Feed. Estas linhas NÃO DEVEM começar por ‘SSH-’.”
Esta regra foi criada nos anos 90 para permitir aos servidores exibir avisos legais e termos de utilização antes de iniciar a sessão.
A ARMADILHA INFINITA DO ENDLESSH
- Bot Atacante TCP SYN Porta 22 → Armadilha Endlessh
- Bot Atacante → TCP SYN-ACK Armadilha Endlessh
- Bot Atacante ACK (Socket Aberto com Sucesso!) → Armadilha Endlessh
- O Bot Fica à Espera da Versão do Protocolo SSH…
- O Endlessh envia 32 bytes de texto: “Aviso: A aguardar…\r\n” → (Segundo 0)
- O Endlessh fica em pausa silenciosa durante 10 segundos…
- O Endlessh envia 32 bytes de texto: “Servidor nó #4…\r\n” → (Segundo 10)
- O Endlessh fica em pausa silenciosa durante 10 segundos…
- O Endlessh envia 32 bytes de texto: “A validar chaves…\r\n” → (Segundo 20)
- O bot fica PRESO neste ciclo durante horas sem conseguir atacar mais nada!
O Endlessh aceita o pedido TCP na hora e começa a cuspir linhas aleatórias com um compasso de espera premeditado de 10 segundos entre cada linha.
Como chegam dados novos a cada dez segundos, o software do atacante não desliga por inatividade. Mas como a identificação do SSH nunca chega ao fim, o bot não consegue experimentar senhas. Fica com a ligação pendurada, a gastar a memória dele enquanto o teu servidor gasta praticamente zero.
A Arquitetura: Mudar o OpenSSH para a Porta 2222 e o Endlessh para a 22
Para montares esta defesa, passas o teu serviço de acesso administrativo para uma porta alta protegida e deixas a porta 22 pública entregue ao Endlessh:
DIVISÃO DE PORTAS DE ENTRADA NO TEU SERVIDOR
- TRÁFEGO DA INTERNET
- Porta 22 (PÚBLICA) → Endlessh Tarpit (Prende os Bots!)
- Consumo: Menos de 2MB de RAM
- Regista os IPs dos atacantes
- Porta 2222 (PROTEGIDA) → OpenSSH Real (O Teu Acesso Limpo)
- Chaves criptográficas Ed25519
- Zero tráfego de ataques e lixo
1. Muda o OpenSSH para a Porta 2222
Antes de mexeres na porta 22, certifica-te de que não perdes o acesso à máquina. Abre o ficheiro /etc/ssh/sshd_config (ou um ficheiro na diretoria /etc/ssh/sshd_config.d/):
# Muda a porta de escuta do SSH legítimo
Port 2222
# Desliga o acesso direto com senha para root
PermitRootLogin prohibit-password
PasswordAuthentication no
Testa se a configuração está bem escrita antes de recarregares o serviço:
# Valida a sintaxe do ficheiro de configuração
sshd -t
# Reinicia o serviço de SSH seguro
systemctl restart ssh
PASSO OBRIGATÓRIO: Sem fechares a consola atual, abre outro terminal no teu computador e confirma que entras na porta 2222:
ssh -p 2222 admin@oteuservidor.com
Com o acesso confirmado na nova porta, estás pronto para armar a ratoeira.
2. Instalação e Configuração do Endlessh em Debian 12
O Endlessh faz parte dos repositórios oficiais do Debian e do Ubuntu, com código-fonte no GitHub:
# Instala o pacote do Endlessh
apt update && apt install -y endlessh
1. Configura as Opções da Armadilha
Abre o ficheiro de configuração /etc/endlessh/config:
# Porta onde o tarpit vai esperar pelos atacantes
Port 22
# Intervalo entre o envio de cada linha de texto em milissegundos (10s)
Delay 10000
# Tamanho máximo de cada linha de texto aleatório
MaxLineLength 32
# Limite de atacantes mantidos presos em simultâneo
MaxClients 4096
# Nível de detalhe dos registos
LogLevel 1
BindFamily 4
2. Autoriza o Endlessh a Abrir a Porta 22
Como o Endlessh corre sob um utilizador de sistema sem privilégios (nobody), o kernel do Linux não autoriza a abertura de portas abaixo de 1024 por defeito. Concede essa capacidade com o utilitário setcap:
# Dá permissão para escuta em portas privilegiadas
setcap 'cap_net_bind_service=+ep' /usr/bin/endlessh
3. Configuração do Serviço no Systemd
Garante que o ficheiro /lib/systemd/system/endlessh.service está configurado para arrancar de forma segura com o systemd:
[Unit]
Description=Endlessh SSH Tarpit
Documentation=man:endlessh(1)
Requires=network.target
[Service]
Type=simple
Restart=always
RestartSec=30sec
ExecStart=/usr/bin/endlessh -f /etc/endlessh/config
User=nobody
Group=nogroup
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
[Install]
WantedBy=multi-user.target
Ativa o serviço no sistema:
systemctl daemon-reload
systemctl enable --now endlessh
systemctl status endlessh
A Apanhar os Invasores: Resultados e Telemetria em Produção
Depois de ativado, podes testar a armadilha a partir do teu próprio computador:
ssh -v -p 22 localhost
Vais ver a ligação a entrar e a ficar parada, recebendo uma linha de texto a cada dez segundos.
Agora, espreita os registos reais do Endlessh para veres os bots a cair na armadilha:
journalctl -u endlessh -f
Exemplo real de telemetria:
Oct 19 14:15:22 srv endlessh[40912]: ACCEPT host=194.26.29.112 port=48922 fd=3 n=1/4096
Oct 19 14:15:45 srv endlessh[40912]: ACCEPT host=45.154.255.89 port=51204 fd=4 n=2/4096
Oct 19 14:52:10 srv endlessh[40912]: CLOSE host=194.26.29.112 port=48922 time=2208.140 bytes=7072
Repara na última linha: um bot automático esteve preso durante 2.208 segundos (quase 37 minutos), a gastar a largura de banda e os recursos do atacante antes de desistir!
COMPARATIVO DE CONSUMO DE RECURSOS EM PRODUÇÃO
- 500 Ligações Concorrentes de Ataque no OpenSSH Tradicional: Memória: ~3.000 MB de RAM (500 processos bifurcados)
- CPU: Picos de 40% a calcular negociações criptográficas
- Disco: Milhares de linhas inúteis gravadas nos ficheiros de log
- 500 Ligações Concorrentes Presas no Endlessh: Memória: Apenas 1.8 MB de memória residente (Zero processos extra)
- CPU: 0.01% (Um único ciclo de escuta poll)
- Disco: Zero ruído e zero senhas gravadas
Com esta estratégia inteligente, fazes com que as ferramentas dos atacantes trabalhem contra eles próprios. Fiel ao nosso lema de anti-over-engineering, resolves o problema dos ataques de força bruta com uma ferramenta minúscula em C que corre durante anos sem manutenção nem complicações.
No terreno, em conjunto com a experiência acumulada na Webxtek Studio, aplicamos exatamente estes padrões operacionais em setores exigentes como cibersegurança b2b e inteligência corporativa e cibersegurança. Quando alinhas a tua estrutura através de alojamento gerido para websites e aplicações e consultoria técnica antes de construir, transformas boas práticas técnicas numa vantagem competitiva real e mensurável para o teu negócio.
[+] [ INDEX_DIRECTORY ] 17 tópicos ▼
- O Zumbido Constante na Porta 22: O Flagelo dos Bots de Força Bruta
- Como Funciona o Endlessh: Tirar Partido da Norma RFC 4253
- A Arquitetura: Mudar o OpenSSH para a Porta 2222 e o Endlessh para a 22
- 1. Muda o OpenSSH para a Porta 2222
- 2. Instalação e Configuração do Endlessh em Debian 12
- 1. Configura as Opções da Armadilha
- 2. Autoriza o Endlessh a Abrir a Porta 22
- 3. Configuração do Serviço no Systemd
- A Apanhar os Invasores: Resultados e Telemetria em Produção
- Autor
- Perguntas Frequentes
- O que é um SSH tarpit e como funciona o Endlessh na prática?
- Porque é que usar um tarpit é muito melhor do que ter o Fail2ban na porta 22?
- Quanto consome o Endlessh em termos de memória RAM e processador?
- Onde deves colocar o serviço real do OpenSSH se o Endlessh estiver na porta 22?
- Nós Relacionados
- Sequência do Caminho
Perguntas Frequentes
O que é um SSH tarpit e como funciona o Endlessh na prática?
Um tarpit (ou poço de piche) é um mecanismo de defesa em redes que responde propositadamente o mais devagar possível aos atacantes. Quando um bot tenta ligar-se à porta 22, o `endlessh` responde enviando uma linha de boas-vindas aleatória a cada 10 segundos. Como a norma RFC 4253 permite o envio de texto de aviso antes da negociação de chaves, os clientes automatizados ficam presos à espera durante horas ou dias.
Porque é que usar um tarpit é muito melhor do que ter o Fail2ban na porta 22?
O Fail2ban é reativo: lê os registos após falhas de autenticação e cria regras temporárias no firewall, gastando processador e acumulando centenas de linhas no iptables. Se fechares a porta 22, o bot passa a varrer outras portas. O Endlessh prende os sockets e as threads do atacante, consumindo os recursos do criminoso enquanto o teu servidor gasta apenas 2MB de RAM.
Quanto consome o Endlessh em termos de memória RAM e processador?
O Endlessh foi escrito em C puro com recurso à chamada de sistema `poll()`. Funciona numa única thread sem criar processos filhos para cada ligação, conseguindo manter milhares de atacantes pendurados em simultâneo com um consumo insignificante de menos de 2MB de memória residente e 0% de CPU.
Onde deves colocar o serviço real do OpenSSH se o Endlessh estiver na porta 22?
O serviço OpenSSH verdadeiro (`sshd`) deve ser mudado para uma porta alta não padrão (como a `2222` ou outra porta aleatória acima de 1024) protegida por chave SSH e idealmente atrás de uma VPN WireGuard, deixando a porta 22 pública exclusivamente para a armadilha do Endlessh.
[ RELATED_NODES ]
> INICIAR_PROJETO
Precisa de um website que transmita confiança, apareça na pesquisa e dê mais força à sua presença digital? Comece a conversa aqui.