#MundoHacker: Cómo bloquear el acceso a un servicio digital en un país

bloqueo ip

¿Quien me iba a decir a mi que un día iba a estar en el otro lado?… :P.

Recientemente un cliente con el que suelo trabajar me llamaba para pedirme que una web que desarrollé hace ya cerca de un año debía “desaparecer” del Internet de un país específico.

Detrás, como viene ocurriendo habitualmente, hay intereses económicos y políticos. El cliente es una gran multinacional del retail, y aunque no comparto la medida (cualquier bloqueo puede llegar a ser entendido como un tipo de censura), cierto es que:

  • El ámbito de la web tiene poco o nulo interés fuera de España: La web es de carácter puramente informativo. Una serie de eventos que se realizan a nivel local con la marca blanca de este cliente. Por tanto, de poco le va a servir a un usuario que viva en el país elegido, y en definitiva, en cualquier otro país que no sea España.
  • La decisión viene incentivada por una suerte de boicot corporativo a un país donde la libertad de expresión es más bien nula: Que bajo este prisma esta web en particular importa más bien poco (no solo afecta a mi desarrollo, sino en definitiva a cualquier portal creado por y/o en nombre del cliente, muchos de ellos con un impacto considerable en el país), pero que realmente la medida tiene un porqué con el que podría llegar a estar de acuerdo.

Por qué alguien querría bloquear el acceso a su página

En esta santa casa he hablado ya en más de una ocasión de cómo las grandes compañías de Internet y algunos gobiernos bloquean el acceso a X recursos en la red. Y he explicado con pelos y señales cómo defenderse de este tipo de censura indistintamente de cómo haya sido implementada.

También hay que considerar que a veces este tipo de bloqueos no se realizan con el fin de cohibir el acceso a información específica por parte de un grupo de usuarios, sino como una medida de seguridad para bloquear un ataque DDoS que está tirando nuestro servidor, o para evitar un gasto desmedido de peticiones ilícitas (generalmente bots de spam) provenientes de un país o países que no habla el mismo lenguaje que el contenido que tenemos en el servicio digital (y que por ende podemos considerar “despreciable” a nivel de negocio). Como ya sabrá, cada petición que nos llega al servidor tiene un coste (hardware más consumo), y lo interesante es optimizar este coste lo máximo posible de cara a todas las peticiones de usuarios reales, evitando los crawler y bots maliciosos.

En todo caso, fuera por esto, o simplemente porque el cliente le hubiera dado la real gana, lo cierto es que mi deber es ejecutar sus órdenes (ellos pagan y suya es la web).

Como decía, este cliente sí es una gran empresa, pero yo no tengo acceso a los recursos de la misma. La prestación del servicio, como con tantos otros clientes, la hice en base a contratos de externalización, y por ende toda la operativa depende de mi persona, y si fuera el caso, del equipo asignado para su desarrollo.

La duda era entonces cómo podía yo, a nivel de administración web, bloquear las peticiones de conexión de usuarios provenientes de este país.

Barajé varios supuestos, entre los que estaba el bloqueo de IPs, la desindexación de Google y el resto de buscadores, y medidas un tanto más rebuscadas como la implementación de bloqueos mediante geotags o el uso de country-specific URL (EN/los llamados ccTLD que utiliza por ejemplo Blogger para bloquear contenido inapropiado según la legislación de cada país). Y al final la primera ganó, por facilidad y rapidez, a todas las demás.

En efecto, lo más cómodo cuando nuestros recursos son únicamente a nivel de servidor (no controlamos la infraestructura que ofrece conectividad al cliente, como sería el caso de una operadora de telecomunicaciones), pasa por bloquear a nivel de rangos de IPs.

Cada país tiene, al menos en teoría, unos rangos de IPs asociados. Y digo en teoría porque esta lista va variando con el paso del tiempo, y además basta que alguien utilice una VPN para “salirse” del rango de IPs de su país.

Pero es el método más eficaz y sencillo de aplicar. Como la mayoría de usuarios son analfabetos digitalmente hablando, la mayor parte de esa sociedad será incapaz de acceder a los recursos que bloqueemos mediante IP.

Cómo bloquear el acceso a una web o servicio digital desde uno o varios países

Y para ello vamos a hacer uso de servicios online que ya se han dedicado a almacenar y actualizar estas bases de datos. Por aquí tienes algunos:

IP2location

– IP2Location (EN)

Es el que yo he utilizado. Se basa en una página en la que podemos definir la versión de IP (IPv4 o IPv6) que utilizaremos, el tipo de servidor donde vamos a realizar el bloqueo (para generar los comandos adecuados) y el país o países objetivos (a los que podemos permitir el acceso o denegar, según queramos que la web sólo sea accesible por la red de algunos países, o accesible por todos menos algunos países).

Le damos a Download, y nos genera un fichero txt con la lista de IPs a bloquear y los comandos adecuados para el servidor y formato de archivo señalado. En mi caso, y al tratarse de una web desarrollada en WordPress, aposté por hacer la modificación a nivel del fichero .htaccess (prácticamente copiar lo que me tenía ese fichero .txt y pasarlo al .htaccess de la página del cliente).

country ip blocks

– Country IP Blocks (EN)

Es semejante al servicio anterior, solo que tiene una versión gratuita (cuyo listado puede no estar actualizado a la última versión) y una de pago, con opciones más específicas para proyectos avanzados.

Te genera el ACL, que es el documento que tendremos que pegar en nuestro servidor para realizar el bloqueo.

ninjafirewall

– Plugin NinjaFirewall (EN)

Hablamos de un plugin para WordPress que ofrece una suerte de WAF (Web Application Firewall) en este popular CMS, y un plugin casi obligatorio en cualquier desarrollo seguro en el que participo. No tiene, per sé, un listado de IPs a bloquear, pero sí permite bloquear IPs que previamente le hayamos definido (así como su propio bloqueador de fuerza bruta y demás intentos de SQL Injection y compañía que pueda sufrir la página).

Lo comparto por aquí precisamente por esta razón. Porque es probable que algunos de los que lleguéis a esta página no tengáis conocimientos técnicos, y pese a ello, seáis administradores web.

Si estáis en esta tesitura, y necesitáis bloquear las peticiones provenientes de un país específico sin recurrir a modificar algo tan sensible como es el fichero .htaccess, podéis utilizar este plugin gratuito para ello, obteniendo el listado de IPs en los servicios anteriores.

Así que ya sabe. Si necesita bloquear el acceso a un contenido o servicio digital para los usuarios de un país específico, esta es la manera más sencilla de hacerlo sin recurrir a acuerdos con proveedores de infraestructura.

Una medida que elimina de golpe la capacidad de estos usuarios de acceder mediante las IPs de este país a nuestro contenido, y que acabarán por desindexar orgánicamente (conforme Google, Bing y cía se den cuenta del bloqueo) el servicio de los buscadores locales.

No obstante, tengo que avisar que no es 100% efectiva (al basarse en el paradigma de listas blancas y negras es materialmente imposible evitar que haya IPs que en algún momento se nos han escapado, tanto del bloqueo, como bloqueadas sin pertenecer ya al país objetivo), pero se aplica en apenas 5 minutos, se actualiza al momento (no necesita esperar a que se actualicen las DNS globales), y no depende de terceros.

Por supuesto, puede ser fácilmente bypaseada por un usuario que haya instalado una VPN en su dispositivo. Pero es que esto mismo ocurre con la mayoría de bloqueos disponibles, y la tasa de éxito apenas aumenta en muchos de ellos, que además sí requieren recursos muchísimo más difíciles de obtener y costosos que en la implementación del bloqueo por IP.

________

Puede ver más artículos de esta serie en #MundoHacker, donde tratamos en varios tutoriales las medidas para atacar y/o defenderse en el mundo digital.

Y si el contenido que realizo le sirve en su día a día, piense si merece la pena invitarme a lo que vale un café, aunque sea digitalmente.

hazme patrono pabloyglesias