A veces es necesario el bloquear por país a los visitantes que llegan a un sitio web. Si tenemos acceso a las herramientas necesarias, podemos hacerlo fácilmente.

Ya sea usando un plugin o mediante código.

¿Por qué bloquear por país?

Una de las razones más importantes para bloquear países es para evitar ataques de bots.

Los bots intentan abusar de vulnerabilidades. Buscan por software que no ha sido actualizado. Buscan de cualquier agujero que exista para poder tomar control de un sitio web. Por lo cual bloquear ciertos países puede ayudar a mejorar la seguridad.

Pero a la vez, también se puede bloquear por país debido a cuestiones legales. O simplemente por que no queremos que nadie de dicho país pueda acceder a ciertos recursos, como la zona de administración de WordPress.

Todas estas son razones válidas. Pero, ¿cómo lo podemos lograr?

1. Mediante un plugin

Una de las formas mas sencillas de bloquear por país en WordPress es usando una solución ya desarrollada como un plugin.

Existen multiples soluciones como iQ Block Country o IP2Location Country Blocker. En ambos casos, usan bases de datos que provienen de servicios y que hay que descargar.

Con ambas soluciones, solo necesitas obtener una cuenta en los servicios que usan y descargar la base de datos apropiada. O en su defecto pagar para acceder a los servicios en línea.

Ambos son muy útiles si no existe inconveniente económico. O si no se desea hacer muchos cambios.

Sin embargo, existen otras formas de bloquear por país en WordPress.

2. Con un CDN como Cloudflare

Si el sitio web en WordPress se encuentra detrás de un CDN como CloudFlare, puedes fácilmente limitar el acceso a ciertos países solo agregando un pequeño código al archivo functions.php que usa tu tema o con un plugin a medida.

Así, por ejemplo, se puede usar esa característica usando el siguiente código:

Con ese pequeño código, se bloquearán todos los clientes que visiten páginas dinámicas y que sean de los países en la lista «negra».

Algo muy importante que hay que indicar, es que las soluciones de plugins o de código como el mostrado no funcionarán siempre si hay un plugin de cache activado.

Esto se debe a que los plugins de cache, en la mayoría de los casos, crean páginas estáticas para enviar en vez de las páginas dinámicas.

Debido a esto, el código no se ejecutará. Pero si ese mismo usuario intenta acceder a la página de login, entonces sí será bloqueado.

3. Mediante una consulta a AbuseIPDB

En una entrada anterior hablé de como agregar la lista negra de AbuseIPDB a un servidor. Pero dicho servicio ofrece mucho más que solo la lista negra.

Cuando se consulta una dirección IP a su check endpoint, nosotros obtenemos toda una serie de información del cliente.

Esta información incluye datos como país de origen e incluso una calificación de cual probable es que trate de abusar de algún recurso.

Toda esta información es útil para evitar ataques o incluso fraudes para las tiendas en línea.

Así, con el siguiente script, nosotros podemos bloquear a un visitante tanto por su país como por su puntuación (si esta es mayor a 50):

Igualmente, para evitar realizar consultas de forma constante, guarda los resultados en un transient de WordPress. Así le generamos la menor molestia a los usuarios legitimos.

Pero, como se menciono antes, esto solo funciona en las páginas dinámicas. Aquellas que se encuentran servidas por el caché aún pueden ser visitadas por personas de los países bloqueados.

4. Bloquear por país usando la base de datos de GeoIP2

MaxMind ofrece la base de datos GeoIP2 Lite de forma gratuita. La cual se puede descargar desde su sitio web con tan solo registrarse.

Igualmente, ellos proporcionan un paquete con el cual se puede acceder a su base de datos usando PHP. Con la cual se vuelve muy sencillo el acceder a los datos.

Solo hace falta descargar el archivo phar o usar composer para agregar el proyecto a un plugin. Tras lo cual se puede agregar y usar de la siguiente manera:

De esta forma, estaríamos usando entonces ya usando la base de datos para bloquear a los visitantes de los países deseados.

Plugin de WordPress con GeoIP2

He desarrollado un plugin sencillo, el cual usa la base de datos de GeoIP2 para bloquear a los visitantes de los países seleccionados:

Su uso es extremadamente sencillo y viene tanto en español (España y México) como en ingles.

Para usarlo, solo hace falta instalarlo e ir a Herramientas > Bloquear por país. Solo debes de tener cuidado de no seleccionar el país en el cual te encuentras, o el sistema podría evitar que ingreses.

En caso de encuentres algún problema, puedes ponerte conmigo en contacto.

Conclusiones sobre como bloquear por país

Bloquear por país a un visitantes es relativamente sencillo. Aunque se necesita de herramientas adicionales para poder obtener la información necesaria para hacerlo.

La dirección IP por si misma no aporta esa información. Pero es fácil obtener detalles adicionales si se cuenta con los recursos necesarios.

Hoy en día prácticamente todo está a un API o Base de Datos de distancia.