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
geoipupdateoficial 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:
sudo apt update
sudo apt install geoipupdateEdite o arquivo de configuração para inserir sua licença:
# Arquivo: /etc/GeoIP.conf
# Insira sua AccountID e LicenseKey obtidas no painel da MaxMind
AccountID SEU_ID
LicenseKey SUA_CHAVE
EditionIDs GeoLite2-Country GeoLite2-CityExecute a atualização manual para testar:
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:
sudo apt install libapache2-mod-geoip2 && sudo a2enmod geoip2 && sudo systemctl reload apache2Cená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:
<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:
LogFormat "%h %l %u %t \"%r\" %>s %b %{GEOIP_COUNTRY_CODE}e" geoip_log
CustomLog ${APACHE_LOG_DIR}/access.log geoip_log3. 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:
# 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:
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:
# 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.logAtive na sua jail (ex: SSH):
[sshd]
enabled = true
action = iptables-multiport
geoip-logAgora, 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.
- Gere uma lista de IPs (ex: usando scripts como
geoip-shell). - Crie um Set no nftables:
# 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\; }- Adicione a regra de drop:
# Descarta qualquer pacote vindo dos IPs contidos no set "geo_block"
nft add rule inet filter input ip saddr @geo_block dropEsta é 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.
