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

GeoIP no Linux: Filtre o ruído global e blinde seu servidor!

Por
Emanuel Negromonte
Emanuel Negromonte é Jornalista, Mestre em Tecnologia da Informação e atualmente cursa a segunda graduação em Engenharia de Software. Com 14 anos de experiência escrevendo sobre...
10 min

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:

Bash
sudo 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:

Bash
sudo 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:

Bash
sudo 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:

Apache
LogFormat "%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:

Bash
frontend 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)

Compartilhe este artigo
Sair da versão mobile