Como bloquear acesso de um site para outros países

Hoje me deparei com uma situação. Recebi uma solicitação de um cliente que não queria que o site dele abrisse em outros países, eles queriam que somente internautas do Brasil tivessem acesso ao site. Confesso que nunca tinha pegado algo nesse sentido. Fui então investigar sobre o caso e descobri uma forma para realizar o bloqueio de acesso ao usuários de outros países, falo usuário, pois você também pode impedir que os spiders, que são os sistemas de buscas, acessem o seu site ou blog. Esse bloqueio pode ser realizado através da criação de uma lista branca de IPs , por exemplo, se você deseja que somente internautas do Brasil acessem sua página, você precisa então criar uma lista branca de IPs do Brasil, os outros IPs que não constam na lista serão bloqueados. Ok, mas e agora, como vou gerar essa lista? Ela deve ser imensa? Por sorte descobri um site que gera essa lista automaticamente, segue o link http://www.countryipblocks.net/

Como bloquear acesso de um site para outros países

Crie um arquivo htaccess, e insira o ragers de IPS do Brasil com allow, sendo assim os ips que não constarem nessa lista serão bloqueados. Exemplo de configuração para bloquear o acesso de todos os IP's, exceto 200.234.206.251, 200.243.90.2 e 189.53.70.141
Order deny,allow
deny from all
allow from 200.234.206.251
allow from 200.243.90.2
allow from 189.53.70.141
# deny from all é o mesmo que bloqueio para todos, exceto para os que estiverem em 'allow from'
Exemplo para bloquear o acesso somente para os IPs, 200.243.90.2 e 189.53.70.141
Order allow,deny
deny from 200.243.90.2
deny from 189.53.70.141
allow from all
# allow from all é o mesmo que libere para todos, exceto para os que estiverem em 'deny from'
É possível fazer manipulação de ranges de IP's também, ou seja: 200.243.90.*, 189.53.*.* ou 200.*.*.*, conforme exemplos abaixo:
deny from 200.243.90. # Bloquear acesso de todos os IP's entre 200.243.90.0 e 200.243.90.255
allow from 189.53.    # Liberar acesso de todos os IP's entre 189.53.0.0 e 189.53.255.255
# Obs: Tem o ponto depois do número, pois ele indica ao Apache que se trata de range
Dica: Através do site countryipblocks você pode fazer isso de uma forma bem mais fácil via .htaccess:

Para Bloquear:

Caso você queira bloquear poucos países, recomenda-se a opção BLOQUEAR Setembro 2014 - OBS: Countryipblocks está fora do ar, segue endereço alternativo para gerar a lista de IPS http://services.ce3c.be/ciprg/
  • Acesse https://www.countryipblocks.net/country_selection.php
  • Escolha o(s) País(es) que deseja bloquear
  • Selecione a opção ".htaccess Deny"
  • Clique em "Create ACL"
  • Copie o código que irá aparecer no campo ao lado
  • Em seu site, suba o código em um arquivo .htaccess

Para Liberar:

Caso você queira bloquear muitos países, se você usar a opção "BLOQUEAR"  alista de IPs será imensa, então nesse caso recomenda-se a opção Liberar, onde você irá selecionar e gerar a ista de IPs dos Países e que deseja liberar o acesso. Setembro 2014 - OBS: Countryipblocks está fora do ar, segue endereço alternativo para gerar a lista de IPS http://services.ce3c.be/ciprg/
  • Acesse https://www.countryipblocks.net/country_selection.php
  • Escolha o(s) País(es) que deseja Liberar o acesso
  • Selecione a opção ".htaccess Allow"
  • Clique em "Create ACL"
  • Copie o código que irá aparecer no campo ao lado
  • Em seu site, suba o código em um arquivo .htaccess

Loading