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

HostingFunciona en discos NVMe ultrarrápidos. Apto para sitios web de cualquier complejidad.
Pedir
VPSParámetros ajustables y configuración flexible del SO. Administración gratuita incluida.
Pedir
Servidores dedicadosDisponibles diversas configuraciones Supermicro con procesadores Intel y AMD.
Pedir

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!

¿Necesitas ayuda?Nuestros ingenieros te ayudarán gratuitamente con cualquier pregunta en minutosContáctanos