Movistar Bloquea Cloudflare: Impacto en Webs y Solución

Aunque pareciese que no tiene nada que ver una cosa con otra, lo que es cierto es que estas últimas semanas han ido ligadas de la mano, pero de la manera mala. Dejadme que me explique.

El caso es que una de las aplicaciones que mantenemos empezó en un momento dado a recibir incidencias como si estuviese caída. El servidor estaba bien y yo desde mi oficina llegaba perfectamente, después de mucho indagar descubirmos que no se llegaba desde las conexiones Movistar u O2, además, lo que vimos es que había ya quejas de otros servidores que estaban afectados y solo tenían en común una cosa, que estaban detrás de Cloudflare. La cosa es que media internet utiliza los servicios de cloudflare, como CDN o como protección contra ataques DDOS o como proxy para ahorrar ancho de banda. Entendimos que debía ser un problema de enrutamiento de Movistar y desactivamos cloudflare momentaneamente a la espera de que lo solucionasen… Estamos hablando del día 3 de febrero.

Esto estuvo pasando durante toda la tarde, llegado un momento nos dijeron que ya volvía a funcionar (y que todo debería ser una avería, no nos dijeron otra cosa)

Peeero, casualidades de la vida, el día 8 se jugaba el derbi y, mira por donde, resulta que empezamos a recibir incidencias de nuevo… Vuelta a desactivar cloudflare y esperando de nuevo… Pero esta vez no lo arreglaron, el domingo seguía la cosa igual:

Y esto se quedó así hasta el lunes (qué curioso!) sin que nadie se dignase dar ninguna explicación ni disculpa. Miles de negocios perdidos y webs expuestas a ataques sin remedio por alimentar a las alimañas del deporte. Era tan evidente que ya se publicó como noticia en varios medios (https://hipertextual.com/2025/02/movistar-cloudflare-futbol). El caso es que estuvo funcionando bien hasta los partidos de champions en los que se repitieron cortes de 15 minutos alternos (igual esto había cantado demasiado).

¿Qué hacer?

Ahora nos surge el problema de qué hacer el fin de semana. No podemos irnos a descansar porque si nos vuelven a cortar cloudflare tendríamos que volver a desactivarlo a mano, así que, para todos aquellos que tengáis cloudflare os recomiendo usar algo como esto:

import requests
import subprocess
import os

def check_ip_reachable(ip):
    try:
        result = subprocess.run(['ping', '-c', '4', ip], capture_output=True, text=True, timeout=10)
        return result.returncode == 0
    except subprocess.TimeoutExpired:
        return False

def pause_cloudflare(domain, email, api_key):
    headers = {
        'X-Auth-Email': email,
        'X-Auth-Key': api_key,
        'Content-Type': 'application/json'
    }
    
    # Obtener el Zone ID
    zone_response = requests.get(f'https://api.cloudflare.com/client/v4/zones?name={domain}', headers=headers)
    zone_data = zone_response.json()
    
    if not zone_data['success']:
        print("Error al obtener el Zone ID")
        return False
    
    zone_id = zone_data['result'][0]['id']
    
    # Pausar el servicio
    pause_url = f'https://api.cloudflare.com/client/v4/zones/{zone_id}'
    pause_data = {'paused': True}
    
    response = requests.patch(pause_url, headers=headers, json=pause_data)
    result = response.json()
    
    if result['success']:
        print(f"Servicio pausado para el dominio {domain}")
        return True
    else:
        print(f"Error al pausar el servicio: {result['errors']}")
        return False

# Configuración
ip_to_check = "192.168.1.1"  # Reemplaza con la IP que quieres comprobar
domain = "ejemplo.com"  # Reemplaza con tu dominio
cloudflare_email = "[email protected]"  # Reemplaza con tu email de Cloudflare
cloudflare_api_key = "tu_api_key"  # Reemplaza con tu API key de Cloudflare

# Comprobar si la IP está accesible
if not check_ip_reachable(ip_to_check):
    print(f"La IP {ip_to_check} no está accesible. Pausando el servicio en Cloudflare...")
    if pause_cloudflare(domain, cloudflare_email, cloudflare_api_key):
        print("Servicio pausado exitosamente")
    else:
        print("No se pudo pausar el servicio")
else:
    print(f"La IP {ip_to_check} está accesible")

Este programita básicamente lo que hace es comprobar si una IP responde al ping y si no lo hace pone en pausa cloudflare para el dominio que queramos. Para ello solo hay que configurarlo con la IP, el dominio y los datos del API de cloudflare de nuestra cuenta. Lo recomendable es hacer un bucle que lo chequee cada cierto tiempo y (código que todavía no he hecho) que cuando vuelva la conectividad se vuelva a activar cloudflare.

Para mi estas actuaciones son completamente ilegales y atentan contra la neutralidad de la red. ¿Qué será lo siguiente? ¿Evitar que visitemos blogs de ideologías no aprobadas?, ¿Hacer inaccesible el porno? Por desgracia en mi casa usamos O2, pero igual tengo que cambiarme visto lo visto.

Monta un nodo bitcoin en 5 minutos

Bueno, cinco minutos es lo que dedicarás a configurar el software, pero luego tendrá que bajarse todo el blockchain y tardará una eternidad y se comerá todo el disco duro que tengamos disponible, pero bueno, vamos a intentar montar un nodo completo bitcoin para testnet (estamos probando) de manera que podamos hacerle consultas sin tener que llamar a otros servicios.

En un próximo post ya os contaré como hacer un explorador completo (con las mismas restricciones de tiempo que este). Por ahora vamos a preparar los materiales. Vamos a necesitar una máquina con ubuntu (o el sistema operativo de vuestra preferencia) y unos 200Gb de disco (para testnet, si queremos la blockchain de mainnet serán como 800Gb). Yo, en mi caso lo he hecho sobre un contenedor ubuntu en proxmox (ya os contaré qué tal con proxmox cuando tenga un rato).

Para crear mi contenedor he usado un script de la comunidad (aqui) pero vosotros podéis usar un ordenador de casa o una máquina virtual que pueda ejecutar docker y docker compose.

Yo la he configurado con 4 CPUs y 4Gb de memoria y me ha servido perfectamente. No os olvidéis de tener los 200Gb disponibles y montados en algún sitio de vuestra máquina. Una vez que tenemos docker y docker compose instalados y funcionando solo tenemos que crear un docker-compose.yml con este contenido:

services:
  bitcoin-testnet:
    image: bitcoin/bitcoin:28.0rc1
    container_name: bitcoin-testnet
    ports:
      - "18443:18443"
      - "18444:18444"
    command:
      - -printtoconsole
      - -testnet=1
      - -rest
      - -rpcbind=0.0.0.0
      - -rpcallowip=0.0.0.0/0
      - -rpcport=18443
      - -rpcuser=miusuario
      - -rpcpassword=mipass
      - -server
      - -txindex
    volumes:
      - /bitcoin-data:/home/bitcoin/.bitcoin
    restart: always

En este caso nos vamos a bajar una imagen preconfigurada de bitcoin (aunque si no os fiáis siempre podéis compilar la vuestra sacando el Dockerfile de github. Abriremos los puertos 18443 y 18444 para poder acceder al nodo desde fuera (recordad, si tenéis nat hacer una redirección del puerto en el router). Además, tenemos nuestro disco con 200Gb en el directorio /bitcoin-data y lo montamos en /home/bitcoin/.bitcoin en la imagen.

Las siguientes opciones son para ver el log en consola, usar testnet, activar el RPC por rest y enlazarnos con todas las IPs de la imagen. Además, configuramos que se usará un usuario miusuario con password mipass, se ejecutará como servidor y vamos a mantener índices de todo el blockchain…

Y con esto ya podemos lanzarlo:

docker compose up -d

Si todo va bien en unas cuantas (muchas) horas ya tendríamos una copia de la blockchain de testnet y podremos preguntar, por ejemplo, cual es el último bloque (suponiendo que nuestra máquina tenga la IP 192.168.1.55) usando curl, por ejemplo:

curl --user miusuario:mipass --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getblockcount", "params": []}' -H 'content-type: text/plain;' http://192.168.1.55:18443

Que nos devolvería algo como esto (el número de bloque, obviamente) será distinto en vuestro caso:

{"result":3774033,"error":null,"id":"curltest"}

Y, lo dicho, intentaré que el próximo post sea de cómo hacer un explorador de testnet que podamos utilizar via web… Id preparando más disco duro.

Publica en internet como un pro sin contratar hosting

O, para los que quieren saber de qué vamos a hablar aquí, de cómo usar los tuneles de cloudflare para exponer una web al mundo que está corriendo en uno de nuestros ordenadores (sin IP fija ni nada).

Supongamos que acabamos de crear nuestra aplicación (o todavía la estamos creando) y queremos enseñársela al mundo (o a nuestro cliente, que para el caso es lo mismo). Hasta ahora, si no teníamos una IP fija lo más habitual era tener que subir todo a un hosting (más caro o más barato) e ir actualizando allí el código cada vez que hacíamos algún cambio.

Cuando queramos pasar a producción una web con miles de millones de accesos (sic.) pues probablemente no nos importe gastarnos el dinero en un hosting decente, o instalarnos en la nube (AWS, GCE o Azure), pero para hacer experimentos o para ejecutar cosas en nuestra casa esto no hace falta… Y menos si tenemos en cuenta que hay opciones gratuitas para evitarlo.

Vayamos al tajo… Imaginemos que tenemos un ordenador donde estamos trabajando y que tiene la IP 192.168.1.35 y que, obviamente, podemos ver nuestra web en http://localhost (desde nuestro propio ordenador) o desde http://192.168.1.35 desde cualquier otro ordenador de nuestra casa. Supongamos también que hemos comprado un dominio «undominio.org» por ejemplo.

Lo siguiente será crear una cuenta en cloudflare, simplemente accedemos a cloudflare.com y nos registramos, una vez registrados damos de alta el dominio que tenemos (probablemente tendremos que cambiar los dns en nuestro proveedor de dominios, a no ser que lo hayamos comprado en el mismo cloudflare) y cuando nos informe de que ya estamos administrando el dominio podemos empezar con la parte del tunel… Para ello vamos a seleccionar Zero Trust en el panel de la izquierda:

Y esto nos dará acceso (si te pide datos de tarjeta no te preocupes, puedes seleccionar el plan gratuito y no se te cobrará nada) terminarás en esta pantalla:

Ahora seleccionamos redes-> tunnels

Y damos al botón crear nuevo tunel. Nos dará dos opciones y seleccionamos Cloudflared

Nos pedirá asignar un nombre al tunel y luego nos da las opciones para instalar cloudflared. Tienes que seleccionar el sistema operativo en el que tienes la web corriendo y la arquitectura. En mi caso lo tengo corriendo en un linux, así que simplemente tengo que copiar el código y ejecutarlo en una consola:

Una vez instalado y puesto a funcionar en nuestra máquina local, nos aparecerá en la lista de conectores:

Ahora toca elegir un subdominio o ruta para publicar nuestra web y la url local donde se encuentra la web (en mi caso estoy publicando la web de inteligencia artificial que ya montamos en uno de los posts anteriores:

Y con esto ya tenemos publicada la web en https://ia.undominio.org sin haber salido de nuestro ordenador…

La verdad es que esto del Zero trust tiene muchas más utilidades además de los túneles, no dejes de revisar todas las cosas interesantes que se pueden hacer (como verás hasta te has ahorrado el tema de los certificados y demás…)

Así que, ya sabes, anímate a publicar en internet lo que quieras sin tener que migrarte a la nube…

Un AMSTRAD CPC en tu bolsillo

Hace tiempo que no escribo nada de retroinformática y resulta que estos días si que estoy haciendo cositas, así que vamos a dedicar un rato a tachaaaan…. Construirnos un Amstrad CPC con un microcontrolador.

En primer lugar, por si queréis hacerlo vosotros, aunque el microcontrolador que vamos a utilizar es un ESP-32, que ya conocemos de antes (algunas entradas hay en este mismo blog) por facilidad vamos a utilizar un modelo muy concreto que tiene salida de VGA y entrada para teclado, además de un slot para MicroSD que nos será muy, muy util. Es el Lilygo FavGL VGA32 que se puede conseguir por unos 10 Euros en la web del fabricante (un poco más si lo compras desde aliexpress).

El proceso no podría ser más sencillo y el resultado final es como si tuviesemos un CPC 64 / 128 totalmente operativo, pero usando un monitor VGA y un teclado PS/2 (y unos cascos o altavoces para el sonido).

El resultado final debería quedar algo así:

Y ahora paso a paso…

Lo primero de todo es tener un cable microusb y conectar nuestra placa al ordenador en el que estemos, luego (después de haber comprobado que el dispositivo es reconocido como puerto serie) accedemos a esta web:

https://zxespectrum.speccy.org/flash

Seleccionamos CPCESP y pinchamos connect y nos pedirá que elijamos el puerto serie en el que se nos ha reconocido la placa (lo mío es linux, así que seguro que es más sencillo de reconocer que los que usan windows), luego indicamos que queremos instalar CPCESP y lo confirmamos para, finalmente esperar a que se instale.

Por desgracia el código de CPCESP no está publicado todavía, pero han prometido que pronto lo tendremos disponible, para más info podéis consultar este repositorio:

https://github.com/EremusOne/CPCESP_alpha

Ahora toca rebuscar entre tus cosas viejas y conseguir un teclado PS/2 y un monitor con entrada VGA (tengo unos cuantos por aquí, te lo dejo barato si lo necesitas). Inicialmente arranca en el modo 1 del cpc 64, pero puedes cambiarlo de manera muy sencilla. Las teclas para sacar todo el provecho al «invento» son estas:

  • F1 Main menu
  • F2 Load SNA
  • F5 Load DSK
  • F8 CPU stats
  • F9 Volume down
  • F10 Volume up
  • F11 Hard reset
  • F12 Reset ESP32
  • CTRL + F1 Hardware info
  • CTRL + F2 Turbo mode
  • CTRL + F5..F8 Screen centering in CRT 15K/50hz mode
  • Pause Pause

Para poder meter software del CPC solo tenemos que formatear una microsd en FAT16 o FAT32 y dejar ahí todos los .dsk o .sna que tengamos a mano. Luego desde el menú principal ya podréis seleccionarlo y cargarlo… Eso si, siempre que hayáis enchufado la placa a un alimentador, que necesita «chicha» para funcionar.

Y ya para rizar el rizo, lo mejor es meter el invento en una caja… Yo me he impreso una en 3D, pero seguro que se me ocurre alguna mejora:

Bueno, me voy a rememorar mis viejos tiempos… Que tengo más emuladores por ahí pendientes.

Hechos son amores…

Hoy no voy a escribir de informática, lo siento, quizá para la próxima entrada me encuentre con ánimo, pero hoy voy a daros la turra sobre política, así que el que no le interese que vaya abandonando la página. Uno tiene su corazoncito y hay cosas que mejor dejar por escrito antes de que se te pudran dentro, así que hoy vamos a hablar un poco sobre «hechos e intenciones» en la política española.

Cuando le hago una pregunta a mi mujer, p.ej. «¿Qué tiempo hará en la calle?» en lugar de darme una respuesta a la pregunta su cerebro se pone a maquinar a toda prisa buscando la intención con la que le he hecho la pregunta para contraatacar con otra pregunta destinada a desactivar cualquier posible intención, por ejemplo, «¿Es que quieres irte de juerga?» y adornarlo con un posible reproche «con la de cosas que hay por hacer en casa». En ningún caso se plantea decirme, «pues hace frío» o un simple «ni idea», por lo que finalmente estas cosas se las termino preguntando a Alexa que, al menos, no me juzga por mis preguntas (al menos todavía no).

En la política española estamos llegando a unos niveles tales que ya la polarización no nos permite pensar sobre cualquier tema que haya planteado el «contrario» sino que, hoy más que nunca, antes de reaccionar siempre intentamos buscar las intenciones del otro con esa afirmación. Y en ese escenario termina pasando que las intenciones (reales o inventadas) se ponen al mismo nivel que los hechos (si, esas cosas que pasan y que no se puede decir que no han pasado).

Por ejemplo, es un hecho que hay decenas de miles de muertos en Gaza, asesinados por el ejército Israelí. Una hecho incontestable, corroborable y sin lugar a dudas (las cifras podrán bailar, pero nadie puede dudar de ello). Pero si alguien lo menciona automáticamente se cree que la intención es perjudicar a los judíos y se le tacha de antisemita. Es cierto que esto es un éxito de los sionistas, conseguir que la suya sea una guerra religiosa, pero también es cierto que todos los que compran ese argumento no se han parado a pensar ni siquiera un momento si no sería más sencillo arreglar los problemas con unos cuantos miles de muertos menos.

Si en cualquier país civilizado del mundo se descubriese que un cargo público estuviese viviendo en una casa pagada íntegramente con los resultados de un delito fiscal cuando menos el partido de dicho cargo público le pediría explicaciones. En España dicho partido estaba entretenido atacando con argumentos espúreos a la mujer del presidente del gobierno y porteriormente a la fiscalía del estado. Porque el hecho de que el delito sea cierto, que el afectado lo haya confesado y que cientos de miles de euros se hubiesen camuflado en facturas falsas parece que carece de envergadura comparado con la intención de quien lo denunció (malos malísimos que quieren dejar mal a una de los nuestros). La borregada sacó las palomitas y, en lugar de exigir conocer el origen de la fortuna de alguien que, antes de conocer a la presidenta era un mero técnico sanitario, y después compra en efectivo áticos en un Madrid de precios imposibles, se dedica a mirar si el correo que MAR ya envió a los periódicos antes fue filtrado por el fiscal o por el propio PSOE. Vamos, que se está juzgando al mismo nivel el delito real con las intenciones de los que denunciaron el delito.

Si esta actitud de aborregamiento (paso de llamarlo polarización) es preocupante, lo es mucho más cuando afecta a la vida y muerte de muchísimas personas. No solo las 7291 que Ayuso mandó abandonar a una muerte inhumana sino a las más de 200 que se llevó la DANA en Valencia mientras el presidente de la comunidad estaba viviendo la vida loca, ignorando sus deberes por los que cobra de los ciudadanos y luego gestionando lo peor posible esta desgracia. Eso si, como decía cierto alcalde «seremos fascistas pero sabemos gestionar» otra obra maestra del surrealismo, los miles de millones que se van a dejar los ciudadanos, via impuestos, en ayudar a los afectados por la DANA se van a repartir entre empresarios afines que, obviamente, pasarán a financiar las futuras campañas electorales del partido o, incluso, a darle una buena puerta giratoria al inútil de Mazón. Pero esos son hechos y no importan, lo importante es la intención. Si criticas a Mazón es que tu intención es meterte con la derecha y ellos ya se defienden solos. Son unos maestros porque luego echan balones fuera atacando al estado central por no arrebatarles las competencias y así queda todo nivelado.

Y es que la intención cuenta, claro que si, pero que eso no te distraiga de los hechos. Se supone que el poder judicial está para poder determinar si los hechos son constitutivos de delito, no si las intenciones son malvadas. Parece ser que una parte del cuerpo de la judicatura ha decidido que las informaciones de pastiches como okdiario o las habladurías sin verificar pueden ser indicios suficientes para abrir casos. Pero ahora, no puedes decir que se han abierto esos casos con cierta intención (eso sería acusar de lawfare) porque entonces tu intención sería criticar a los jueces y, claro, eso ya es malísimo en si mismo. Además, ahora sale casi gratis mentir. Te puedes inventar la noticia o targiversarla sin que esto suponga el menor problema, mentir ya no está mal visto, según parece eres más listo cuantas más mentiras haces pasar por buenas…

Me disculpo solo por haber destacado aquí casos de un solo signo político. Si queréis podemos hablar de los EREs de andalucía, del caso Koldo o de cualquier otra cosa de otro signo con hechos demostrados, los efectos son los mismos. Siempre estaremos sesgados por la intención con la que hacemos los comentarios y eso ya nos descalifica y, como haría mi mujer, buscaríamos algo con lo que criticarme para neutralizar esas aviesas intenciones.

Esta dinámica tiene graves implicaciones (esto se lo he preguntado a una IA):

  • Dificulta la rendición de cuentas de los cargos públicos.
  • Obstaculiza la resolución efectiva de problemas sociales y políticos.
  • Fomenta la proliferación de noticias falsas y manipulación informativa.

Como conclusión solo puedo decir que es crucial recuperar un enfoque basado en hechos verificables en el debate político. Aunque las intenciones son relevantes, no deben eclipsar la realidad de los acontecimientos. Solo así se podrá mejorar la calidad de la discusión pública y abordar de manera efectiva los desafíos que enfrenta la sociedad española.