Nginx bloquear peticiones segun ubicacion geografica con GeoIP

hola a todos hoy vemos algo que estaba probando con nginx en un servidor asi que les comparto este experimento.

bueno para que funcione tienes que tener un servidor con nginx ya instalado.

mas informacion esta en el siguiente enlace que les dejo aca click

bueno ahora para ver un ejemplo rapido hacemos lo siguiente.

El módulo GeoIP (ngx_http_geoip_module) necesita unas bases de datos precompiladas de MaxMind que contiene los rangos de IPs por países y ciudades. Para utilizarlas, primero tenemos que descargar las BBDD (bases de datos) en la carpeta /etc/nginx/geoip:

mkdir /etc/nginx/geoip
cd /etc/nginx/geoip

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

gunzip GeoIP.dat.gz
gunzip GeoLiteCity.dat.gz

bueno ahora lo que hacemos es agregar unas lineas de geoip en nginx.conf

http {
 #GeoIP
 geoip_country /etc/nginx/geoip/GeoIP.dat;
 geoip_city /etc/nginx/geoip/GeoLiteCity.dat;
 }

y ahora definimos paises o ciudades a bloquear

http {

 map $geoip_country_code $paises_permitidos {
     default no;
     BO yes;
     # Si quereis añadir mas paises, los podeis añadir aqui
 }

De esta manera, solo estariamos permitiendo el acceso a las IPs de nuestro pais.

$geoip_country_code → es una variable del modulo GeoIP, nos devuelve un codigo de pais de dos letras, por ejemplo, “RU”, “US”

$paises_permitidos → es la variable que estamos creando con los paises permitidos

Si quieres bloquear por ciudades tendrias que utilizar $geoip_city en vez de $geoip_country_code ver la siguiente documentacion

bueno hay muchas mas opciones asi que solo comparto esta parte hasta otro post !