O que é o GoAccess

O GoAccess e uma ferramenta open-source de análise de logs de servidores web que roda diretamente no terminal ou gera um dashboard HTML interativo em tempo real. Desenvolvida em C, ela processa arquivos de log do Apache, NGINX, Amazon S3, Cloudflare e dezenas de outros formatos, entregando estatisticas completas de acesso com latência mínima.

Para equipes de segurança e sysadmins, o GoAccess se tornou indispensavel porque combina velocidade de processamento com visualização clara dos dados: em poucos segundos você ve quais IPs estão fazendo mais requisições, quais user-agents são suspeitos, quais rotas estão sendo varridas e qual a distribuição geografica do tráfego.

Diferente de soluções centralizadas como o ELK Stack ou o Splunk, o GoAccess pode ser executado sem nenhuma infraestrutura adicional: basta ter o arquivo de log e o binário da ferramenta. Isso o torna ideal para servidores pequenos, VPS, ambientes de produção sem budget para SIEM comercial e análises forenses rapidas pos-incidente.

Como funciona

O GoAccess le o arquivo de log linha por linha, faz o parse conforme o formato configurado (Common Log Format, Combined Log Format, W3C, JSON ou custom), e popula estruturas de dados internas com contadores por IP, URI, metodo HTTP, código de status, user-agent, referrer e hora.

O processamento e incremental e pode ser feito em modo de streaming via WebSocket: o dashboard HTML atualiza automaticamente conforme novos registros chegam ao log, sem recarregar a página. Isso e possível porque o GoAccess abre um servidor WebSocket embutido (porta 7890 por padrão) e injeta atualizações no cliente a cada tick.

Em modo terminal (TUI), a navegação e feita com teclas de atalho, expandindo cada painel de IPs, URIs, browsers, sistemas operacionais e paises para ver o detalhamento completo. Todo o processamento ocorre em memoria RAM, sem banco de dados externo, o que elimina dependências e reduz a superficie de ataque da própria ferramenta de monitoramento.

Para logs comprimidos (gzip, bz2), o GoAccess aceita pipes diretamente via linha de comando. Isso permite analisar logs históricos sem descompactar em disco.

Quem usa e para que serve na prática de segurança

Do ponto de vista de segurança, o GoAccess resolve problemas concretos que afetam qualquer servidor web exposto a internet:

  • Detecção de varreduras (scanning): quando um IP faz centenas de requisições a URIs inexistentes (404 em massa), o GoAccess lista esse IP no topo do painel de Enderecos IP com o total de hits.
  • Identificação de bots maliciosos: o painel de user-agents revela bots que tentam se passar por browsers legítimos mas com padrões incompatíveis.
  • Ataques de brute-force: requisições repetidas a /wp-login.php, /admin, /api/auth/login com status 401 ou 429 aparecem no painel de URIs. Combinado com o painel de IPs, você identifica a origem em segundos.
  • Análise pos-incidente: após um comprometimento, você processa o log do período suspeito e ve exatamente quais URIs foram acessadas, em que sequência e de quais IPs.

Como identificar ameacas nos paineis do GoAccess

Ao abrir o GoAccess, os 10 paineis principais exibem dados agregados. Para detecção de ameacas, foque em:

Painel de IPs: ordene por hits. IPs com volume desproporcional ao restante do tráfego são candidatos a bloqueio imediato. Expanda o IP para ver quais URIs ele acessou.

Painel de URIs requisitadas: URIs com alto volume de erro 404 indicam scanning. Caminhos como /.env, /config.php, /actuator/env são alvos clássicos de scanners automatizados.

Painel de status HTTP: uma proporção alta de 401/403/429 indica tentativas de acesso não autorizado. Erros 500 em massa podem indicar exploração de vulnerabilidade.

Painel de user-agents: strings como Nuclei, sqlmap, Nikto ou Python-requests com volume alto são sinais claros de ferramentas de scanning ou exploração.

Painel de metodos HTTP: metodos como PUT, DELETE, PATCH ou TRACE em URIs que não deveriam aceita-los indicam tentativas de exploração.

Como se proteger e usar o GoAccess para resposta a incidentes

A integração do GoAccess no fluxo de resposta a incidentes e direta.

Instalação: No Ubuntu/Debian, use sudo apt install goaccess. No CentOS/RHEL, use sudo yum install goaccess.

Análise básica do NGINX: Execute sudo goaccess /var/log/nginx/access.log --log-format=COMBINED para ver o dashboard interativo no terminal.

Dashboard HTML em tempo real: Adicione os parâmetros --real-time-html e --output=/var/www/html/report.html para gerar um dashboard web com atualização automática via WebSocket.

Filtragem por período: Use awk para filtrar o log pelo intervalo de tempo suspeito antes de passar para o GoAccess. Isso reduz drasticamente o volume de dados a analisar e acelera a investigação forense.

Após identificar IPs suspeitos, bloqueie via iptables: sudo iptables -A INPUT -s IP_SUSPEITO -j DROP. Ou no NGINX, adicione deny IP_SUSPEITO; no bloco do servidor.

Comparação com alternativas

  • GoAccess vs ELK Stack: o ELK e muito mais poderoso para correlação de eventos, mas exige pelo menos 4GB de RAM e configuração complexa. O GoAccess roda em qualquer VPS de 512MB e entrega resultado em 30 segundos.
  • GoAccess vs Grafana + Loki: a combinação Grafana/Loki e excelente para visualização e alertas, mas exige infraestrutura dedicada. O GoAccess e ideal para análise ad-hoc e investigações rapidas.
  • GoAccess vs AWStats: o AWStats gera relatorios estáticos HTML. O GoAccess e mais rapido, tem interface mais moderna e suporta modo real-time.
  • GoAccess vs fail2ban: o fail2ban bloqueia IPs automaticamente. O GoAccess e uma ferramenta de visibilidade, não de ação automática. As duas ferramentas são complementares.

Análise técnica: como o GoAccess processa logs com segurança

Sem escrita em disco por padrão: em modo terminal, toda a análise ocorre em memoria RAM. Não ha banco de dados, não ha arquivos temporarios com dados sensiveis.

Dashboard HTML sem dependências externas: o arquivo HTML gerado e completamente auto-contido, incluindo todo o JavaScript e CSS embutido. Pode ser servido em um servidor isolado sem acesso a internet externa.

WebSocket com suporte a TLS: no modo real-time, o GoAccess pode usar WSS (WebSocket Secure) quando configurado atras de um proxy reverso NGINX com SSL.

GeoIP via MaxMind GeoLite2: quando compilado com suporte a GeoIP, o GoAccess carrega o banco de dados local, sem consultas externas. Nenhuma informação de log e enviada a terceiros.

Auditoria do código-fonte: o código do GoAccess está disponível publicamente no GitHub com mais de 11.000 estrelas, permitindo auditoria independente.

Impacto e consequencias de não monitorar logs

A ausencia de monitoramento de logs e uma das principais razoes pelas quais incidentes de segurança passam despercebidos por semanas ou meses. Dados do Verizon Data Breach Investigations Report indicam que a maioria das violações e descoberta por terceiros antes que a própria organização perceba o comprometimento.

Sem visibilidade sobre o que está acontecendo no servidor web:

  • Scanners automatizados encontram vulnerabilidades antes que você as corrija, mantendo a janela de exposição aberta.
  • Ataques de brute-force continuam por horas sem acionar nenhum alerta.
  • Bots de scraping consomem bandwidth e CPU sem que o responsável saiba.
  • Em caso de incidente, a forense fica comprometida porque os logs podem ter sido rotacionados sem análise previa.

O custo de instalar e configurar o GoAccess e de minutos. O custo de um incidente não detectado pode ser de meses de trabalho de recuperação, multas por violação de dados (LGPD: até 2% do faturamento) e danos reputacionais severos.

Dicas práticas e boas práticas

  1. Configure rotação de logs com retenção adequada: o logrotate padrão do NGINX mantem apenas 7 dias. Para segurança, aumente para 30 ou 90 dias.
  2. Monitore os logs de erro em paralelo: use tail -f /var/log/nginx/error.log para ver erros do servidor em tempo real enquanto analisa o access log no GoAccess.
  3. Crie alertas para volumes anomalos: combine o GoAccess com um cron job que verifica o número de requisições nas últimas horas e envia alerta se ultrapassar um threshold.
  4. Valide configurações de segurança: após aplicar uma regra de bloqueio no NGINX ou iptables, verifique no GoAccess se o IP bloqueado ainda aparece no log.
  5. Integre com o fail2ban: configure o fail2ban para monitorar os mesmos logs que o GoAccess processa. O GoAccess da visibilidade; o fail2ban age automaticamente.
  6. Use o modo real-time durante manutenções: mantenha o GoAccess em modo real-time durante deploys para ver imediatamente se a mudanca causou erros inesperados ou atraiu tráfego anomalo.

Conclusao: o que fazer agora

O GoAccess e uma das ferramentas de segurança mais acessíveis e imediatamente úteis que um sysadmin ou desenvolvedor pode adotar. Ela não substitui um SIEM completo, mas preenche uma lacuna crítica: a visibilidade rapida sobre o que está acontecendo no seu servidor web agora.

Para começar hoje: instale o GoAccess no seu servidor com sudo apt install goaccess, aponte para o access log do NGINX ou Apache, e passe os próximos 10 minutos explorando os paineis. Com alta probabilidade, você vai encontrar pelo menos um IP realizando scanning, um bot não identificado ou um padrão de requisições que merece investigação.

Combine o GoAccess com o fail2ban para bloqueio automático, com o TrustSiteMonitor para monitoramento continuo de vulnerabilidades na camada de aplicação, e com alertas de log para criar uma estrategia de defesa em profundidade que funciona mesmo sem budget para ferramentas comerciais.

Segurança não e sobre ter as ferramentas mais caras; e sobre ter visibilidade suficiente para detectar o problema antes que ele se torne um incidente.