
O desafio de ter um site alojado em casa passa por uma segurança reforçada em relação aos serviços disponíveis online. GeoIP é uma forma de proteção que se pode aplicar a um site, restringindo os requests de http(s). GeoIP também pode ser utilizado para redirecionar.
Existem varias formas e métodos de realizar um filtro através da localização geográfica. O serviço Nginx com o modulo http_geoip_module apresenta uma boa forma de o fazer.
O modulo http_geoip_module tem como função ler a base de dados GeoIP, criar a variável do país do visitante e aplicar as regras definidas, que podem ser permitir a visita, bloquear ou redirecionar.
O exemplo é para Debian e pressupõe-se que já se encontra instalado o serviço Nginx com o respectivo modulo http_geoip_module ativo. Caso contrario seguir os passos até “Adicionar a linha do modulo”
Para verificar se o modulo esta presente:
$ sudo nginx -V
Instalação do modulo http_geoip_module:
$ sudo apt-get update
$ sudo apt-get install nginx-module-geoip
Editar o ficheiro de configuração do Nginx:
$ sudo nano /etc/nginx/nginx.conf
Adicionar a linha do modulo:
load_module “modules/ngx_http_geoip_module.so”;
Neste exemplo todos os países ficam interditos com excepção PT, BE e US. O oposto também é possível alterando para “default yes;” e todos os países são aceites com excepção dos declarados PT, BE e US.
Adicionar as variáveis no bloco “http” antes de “includes”:
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default no; PT yes; BE yes; US yes;}
Instalação da base de dados GeoIP:
$ cd /usr/share/GeoIP/
$ sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ sudo gunzip GeoIP.dat.gz
Até agora só criamos o método de detecção da variável do visitante, a leitura da base de dados e as regras aplicar. Para executar estas três condições temos de editar ficheiro VHost do site.
Editar o ficheiro VHost do site:
$ sudo nano /etc/nginx/sites-enabled/omeusite.com.conf
Adicionar as linhas no bloco “server”:
if ($allowed_country = no) { return 444; }
Reiniciar o serviço Nginx:
$ sudo systemctl restart nginx
And that’s pretty much it!! ;)