Como usar GeoIP no Linux: Bloqueio por país e análise de tráfego [Guia 2026]

Como usar GeoIP no Linux: Bloqueio por país e análise de tráfego [Guia 2026]

O GeoIP é uma ferramenta fundamental para administradores de sistemas que precisam filtrar tráfego indesejado, analisar a origem dos visitantes ou aplicar regras de conformidade regional. Se você não está monitorando a geografia do seu tráfego, está operando no escuro.

GeoIP é o processo de correlacionar um endereço IP a uma localização física (País, Cidade, ASN). Em servidores Linux, isso é feito localmente através de bancos de dados otimizados (como o formato .mmdb da MaxMind), permitindo decisões de segurança e roteamento em milissegundos, sem adicionar latência de rede externa.

Resumo executivo do guia:

  • Instalação: Como configurar o geoipupdate oficial da MaxMind.
  • Servidores Web: Integração prática com Apache e HAProxy para ACLs.
  • Segurança: Uso avançado com Fail2ban e Firewall (nftables).

Status: Atualizado para 2026 | Versão Testada: Ubuntu 24.04 LTS / Debian 13

1. Instalação e atualização dos bancos de dados

Antes de integrar com qualquer serviço, você precisa dos dados brutos. Em 2026, o padrão da indústria continua sendo o MaxMind GeoLite2.

ALERTA: Desde as mudanças de política da MaxMind, você precisa de uma conta gratuita e uma chave de licença para baixar as atualizações.

Instale o atualizador no Debian/Ubuntu:

Bashsudo apt update sudo apt install geoipupdate

Edite o arquivo de configuração para inserir sua licença:

Bash# Arquivo: /etc/GeoIP.conf # Insira sua AccountID e LicenseKey obtidas no painel da MaxMind AccountID SEU_ID LicenseKey SUA_CHAVE EditionIDs GeoLite2-Country GeoLite2-City

Execute a atualização manual para testar:

Bashsudo geoipupdate # Os arquivos serão salvos em /usr/share/GeoIP/ ou /var/lib/GeoIP/

DICA: O geoipupdate geralmente cria um cron job automático na instalação. Verifique em /etc/cron.d/geoipupdate para garantir que seus dados não fiquem obsoletos.

2. GeoIP no Apache: Logs e bloqueios

O Apache pode usar o GeoIP para duas funções principais: enriquecer logs (para saber de onde vêm os ataques) ou bloquear acesso diretamente na camada de aplicação.

Instalação do módulo

Para sistemas modernos, utilize a biblioteca compatível com o formato GeoIP2:

Bashsudo apt install libapache2-mod-geoip2 && sudo a2enmod geoip2 && sudo systemctl reload apache2

Cenário A: Bloqueio por país (Allow/Deny)

Este método é ideal se você tem um site focado em uma região específica e quer economizar recursos bloqueando o resto do mundo ou países específicos de alto risco.

Edite a configuração do seu VirtualHost:

Apache<VirtualHost *:80> ServerName exemplo.com.br <IfModule mod_geoip2.c> # Habilita o lookup GeoIPEnable On # Define regra para bloquear China (CN) e Rússia (RU) SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry SetEnvIf GEOIP_COUNTRY_CODE RU BlockCountry # Nega acesso se a variável BlockCountry for verdadeira Deny from env=BlockCountry </IfModule> </VirtualHost>

Cenário B: Enriquecimento de logs

Se você prefere não bloquear, mas quer visibilidade, adicione o código do país aos seus logs de acesso.

Adicione ao apache2.conf ou configuração global:

ApacheLogFormat "%h %l %u %t \"%r\" %>s %b %{GEOIP_COUNTRY_CODE}e" geoip_log CustomLog ${APACHE_LOG_DIR}/access.log geoip_log

3. GeoIP no HAProxy: Performance e balanceamento

O HAProxy é o local mais eficiente para aplicar regras de GeoIP, pois ele bloqueia a conexão antes que ela atinja seus servidores de aplicação (backend).

Verifique se o HAProxy tem suporte a GeoIP2 e aponte o banco de dados na configuração global:

Bash# Arquivo: /etc/haproxy/haproxy.cfg global # Carrega o banco de dados na memória http-client resolvers mydns set-var-fmt proc.geoip.country str(GeoLite2-Country.mmdb)

Crie ACLs (Listas de Controle de Acesso) no Frontend:

Bashfrontend http-in bind *:80 # Captura o país do IP de origem http-request set-var(req.country) src,map_ip(/usr/share/GeoIP/GeoLite2-Country.mmdb) # Define regras de bloqueio acl is_china var(req.country) -m str CN acl is_russia var(req.country) -m str RU # Rejeita a requisição http-request deny if is_china http-request deny if is_russia default_backend servidores_web

VEREDITO: Use o HAProxy para bloqueio massivo. Ele lida com milhares de requisições por segundo muito melhor que o Apache ou Nginx fazendo a mesma tarefa.

4. Integração com Fail2ban

O Fail2ban padrão olha apenas para “tentativas falhas”. Adicionar contexto geográfico permite que você tome decisões mais inteligentes, como banir IPs de países “desconhecidos” mais rapidamente do que IPs locais.

Como o Fail2ban não suporta GeoIP nativamente na lógica de decisão, usamos ele para notificação e contexto.

Crie uma action personalizada para enriquecer o log de banimento:

Bash# Arquivo: /etc/fail2ban/action.d/geoip-log.conf [Definition] actionban = echo "BANIDO: <ip> País: $(geoiplookup <ip> | head -n 1 | cut -d: -f2 | xargs)" >> /var/log/fail2ban-geoip.log

Ative na sua jail (ex: SSH):

Bash[sshd] enabled = true action = iptables-multiport geoip-log

Agora, ao analisar /var/log/fail2ban-geoip.log, você verá:

BANIDO: 192.168.1.50 País: Brazil

5. Firewall moderno com nftables

Em 2026, o iptables é considerado legado. O nftables é a ferramenta padrão e permite criar “Sets” (conjuntos) de IPs de alta performance.

Como o nftables não lê arquivos .mmdb diretamente, a estratégia é converter os ranges de IP de um país para um formato que o firewall entenda.

  1. Gere uma lista de IPs (ex: usando scripts como geoip-shell).
  2. Crie um Set no nftables:
Bash# Cria uma tabela e um conjunto (set) para bloqueio nft add table inet filter nft add set inet filter geo_block { type ipv4_addr\; flags interval\; }
  1. Adicione a regra de drop:
Bash# Descarta qualquer pacote vindo dos IPs contidos no set "geo_block" nft add rule inet filter input ip saddr @geo_block drop

Esta é a camada mais drástica. O pacote é descartado no nível do kernel, economizando CPU do servidor.

Conclusão: Qual camada devo usar?

A segurança deve ser feita em camadas (Defense in Depth). Não confie apenas em uma ferramenta.

  • Firewall (nftables): Para ataques volumétricos ou países com zero potencial de negócios para você.
  • Load Balancer (HAProxy): Para regras de negócio e roteamento inteligente.
  • Aplicação (Apache/Nginx): Para logs e auditoria.

O GeoIP não é uma bala de prata (VPNs existem), mas reduz drasticamente o ruído nos seus logs e superfície de ataque.

Qual destas implementações traria o maior alívio imediato para a segurança do seu servidor hoje?

Perguntas frequentes (FAQ)

O banco de dados GeoIP é 100% preciso?

Não. Ele é uma estimativa (heurística). Usuários via VPN, redes móveis ou provedores com roteamento complexo podem aparecer com localização incorreta. Nunca use GeoIP como único fator para autenticação crítica.

O uso de GeoIP deixa o servidor lento?

O impacto é mínimo. As consultas são feitas em bancos de dados locais (arquivos no disco ou carregados na RAM), levando microssegundos. É muito mais rápido do que processar uma requisição HTTP completa de um bot malicioso.

Posso bloquear todos os países exceto o Brasil?

Tecnicamente sim, mas é arriscado (“Allow-list”). Se você viajar ou usar um serviço de nuvem estrangeiro para monitoramento, perderá acesso. A abordagem de “Block-list” (bloquear apenas ofensores conhecidos) costuma ser mais segura para a disponibilidade.