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:
- 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).
- Criar um script para adicionar regras:
- 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.