Filtrado de tráfico en Nginx con GeoIP
Guía paso a paso para restringir el acceso al sitio por país mediante el módulo GeoIP en Nginx.
Al trabajar con Nginx en un VPS o un servidor dedicado, puede ser necesario restringir el acceso al sitio por país. Esto es posible mediante el módulo Nginx GeoIP.
Instalar los paquetes
Para instalar el módulo GeoIP en tu servidor, ejecuta los siguientes comandos según tu sistema operativo.
Debian/Ubuntu
sudo apt-get install nginx-module-geoip
CentOS
yum install nginx-module-geoip
Si tu versión de nginx no dispone de /etc/nginx/modules-enabled, es posible que el módulo no se cargue automáticamente.
En ese caso, añade las siguientes líneas al comienzo de /etc/nginx/nginx.conf (fuera de los bloques http, server y events):
load_module modules/ngx_http_geoip_module.so;
load_module modules/ngx_stream_geoip_module.so;
A continuación, ejecuta:
nginx -s reload
Actualizar la base de datos GeoIP
Para actualizar la base de datos GeoIP, ejecuta los siguientes comandos:
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak
cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
Verificar la compilación de Nginx con soporte al módulo GeoIP
Tras actualizar la base de datos GeoIP, comprueba que Nginx fue compilado con la opción --with-http_geoip_module. Para ello, usa el siguiente comando:
nginx -V
Si Nginx no fue compilado con la opción requerida, deberás realizar la compilación del módulo Nginx.
Nuestros servicios y productos
Configurar Nginx para restringir el acceso por país
En el directorio de archivos de configuración de Nginx, crea un archivo llamado block.map.include con el siguiente contenido:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
CN no;
VN no;
TW no;
}
En este ejemplo, el acceso al sitio está bloqueado para los usuarios de China, Vietnam y Taiwán.
Para permitir el acceso únicamente a usuarios de países específicos, modifica la configuración de la siguiente manera:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
RU yes;
UA yes;
}
En este ejemplo, el sitio solo será accesible para usuarios de Rusia y Ucrania.
Modificar la configuración de Nginx
En el archivo /etc/nginx/nginx.conf, añade la siguiente línea en la sección http:
include include/block.map.include;
A continuación, en la sección server de la configuración de tu host, añade el siguiente bloque:
if ($allowed_country = no) {
return 404;
}
Aplica los cambios reiniciando Nginx:
nginx -s reload
Atención
MaxMind ya no es compatible con el antiguo formato de base de datos .dat y ha eliminado la posibilidad de descargarlo libremente. Ahora el acceso a los archivos solo está disponible previa autenticación y adquisición de una licencia. Actualmente se utiliza el nuevo formato de base de datos .mmdb.
Ayuda
¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!