Logo
FAQ

Limitar acessos ao Servidor apenas ao Brasil

Para limitar acessos apenas do Brasil usando iptables, você pode usar o módulo geoip ou listas de IPs baseadas em ranges de endereços atribuídos ao Brasil.


O módulo geoip é mais prático, mas nem todos os kernels/sistemas o suportam nativamente.


Vamos testar essa opção primeiro.


1. Usando o módulo geoip com iptables


O módulo geoip permite filtrar pacotes com base no país de origem, usando a base de dados GeoIP.


Instalar o módulo xtables-geoip: No Debian/Ubuntu: 


sudo apt update

sudo apt install xtables-addons-common


No CentOS/RHEL: 


sudo yum install xtables-addons


Baixar e instalar a base de dados GeoIP:


sudo mkdir -p /usr/share/xt_geoip

sudo /usr/lib/xtables-addons/xt_geoip_dl

sudo /usr/lib/xtables-addons/xt_geoip_build


Isso baixa e converte a base de dados GeoIP para o formato usado pelo iptables.


Adicionar regras ao iptables: Para permitir apenas tráfego do Brasil (código do país: BR) em uma porta específica, como HTTP (80): 


sudo iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc BR -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 80 -j DROP


  • A primeira regra permite conexões do Brasil na porta 80.
  • A segunda regra bloqueia todas as outras conexões na porta 80.


Salvar as regras: No Debian/Ubuntu: 


sudo iptables-save > /etc/iptables/rules.v4


No CentOS/RHEL: 


sudo iptables-save > /etc/sysconfig/iptables


Nota: O módulo geoip não é mais mantido pela MaxMind desde 2019, e a base de dados pode estar desatualizada. Considere a abordagem alternativa abaixo para maior confiabilidade.


2. Usando listas de IPs (mais confiável)


Você pode obter listas de ranges de IPs atribuídos ao Brasil e usá-las com iptables. Fontes como a IP2Location ou RIPE NCC fornecem essas listas.


Passos:

  1. Obter a lista de IPs do Brasil:
  • Acesse um provedor como IP2Location ou bgp.he.net.
  • Baixe a lista de ranges de IPs associados ao Brasil (geralmente em formato CIDR, como 200.0.0.0/16).
  1. Criar um script para adicionar regras:
  2. Crie um arquivo (ex.: brazil_ips.txt) com os ranges de IPs, um por linha, como:


200.0.0.0/16

201.0.0.0/16

...


Use um script para carregar essas regras no iptables:


#!/bin/bash

IPTABLES="/sbin/iptables"

BR_IPS="/path/to/brazil_ips.txt"


# Limpar regras existentes

$IPTABLES -F


# Permitir tráfego do Brasil

while read -r ip; do

  $IPTABLES -A INPUT -p tcp --dport 80 -s "$ip" -j ACCEPT

done < "$BR_IPS"


# Bloquear todo o resto

$IPTABLES -A INPUT -p tcp --dport 80 -j DROP



Torne o script executável e rode:


chmod +x script.sh

sudo ./script.sh


Automatizar a atualização:

Configure um cron job para atualizar a lista de IPs periodicamente, baixando-a do provedor escolhido.


Salvar as regras:


Como no método anterior, use iptables-save para persistir as regras.


Considerações


O módulo geoip é mais fácil de configurar, mas depende de uma base de dados que pode estar desatualizada.

Listas de IPs são mais precisas e atualizáveis, mas exigem mais esforço para configurar e manter.


Performance: Adicionar muitos ranges de IPs pode impactar a performance do iptables. Considere usar ipset para gerenciar grandes listas de IPs de forma eficiente:


sudo apt install ipset

ipset create brazil_ips hash:net

while read -r ip; do

  ipset add brazil_ips "$ip"

done < brazil_ips.txt

iptables -A INPUT -p tcp --dport 80 -m set --match-set brazil_ips src -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j DROP


Teste as regras: Antes de bloquear tudo, teste com -j LOG para garantir que apenas o tráfego desejado é permitido.

IPv6: Se você usa IPv6, repita o processo com ip6tables e ranges IPv6 do Brasil.