Tu sitio web se ejecuta detrás de Bunny CDN y, de vez en cuando, se cae. Los visitantes ven la página "504 Gateway Timeout" de Bunny, que dice: “No pudimos establecer conexión”.”. Inicias sesión en tu servidor y todo parece estar bien: la carga es normal, los registros no muestran errores y los demás sitios del mismo servidor siguen funcionando. Reiniciarlo no soluciona el problema. Después de unas horas, el sitio vuelve a funcionar por sí solo, solo para volver a caerse unos días después.
Nos encontramos con este mismo problema. La causa no era el sitio web, la base de datos ni la carga del servidor. Era el propio software de seguridad del servidor el que bloqueaba a Bunny. Si utilizas CrowdSec, o una herramienta similar que bloquea direcciones IP según su comportamiento, en un servidor detrás de una CDN, esto también te puede ocurrir. Aquí te explicamos cómo reconocerlo, confirmarlo y solucionarlo definitivamente.
Los síntomas
- Los visitantes suelen ver la página de error 504 de Bunny, normalmente después de esperar aproximadamente un minuto.
- El servidor no está ocupado: la CPU, la memoria y la base de datos parecen normales.
- Los registros de su servidor web y de la aplicación no muestran nada inusual, ya que las solicitudes fallidas nunca llegan.
- Otros sitios web alojados en el mismo servidor que no utilizan Bunny siguen funcionando.
- Reiniciar los servicios o reiniciar el servidor no soluciona el problema.
- Las llamadas a la API dirigidas al nombre de host de Bunny fallan, mientras que las mismas llamadas a un nombre de host que llega al servidor directamente o a través de otra CDN siguen funcionando.
- El sitio puede estar caído para algunos visitantes y funcionar correctamente para otros, dependiendo de la ubicación de Bunny que les preste servicio.
Por qué sucede
Detrás de una CDN, tu servidor nunca ve a tus visitantes. Solo ve la CDN. Cada solicitud llega desde uno de los pocos servidores perimetrales de Bunny cercanos al visitante, por lo que para tu servidor, cada servidor perimetral parece un único cliente extremadamente ocupado.
CrowdSec analiza tus registros y bloquea las direcciones IP que se comportan de forma sospechosa, como rastrear muchas páginas rápidamente o buscar rutas inexistentes. Cada bot, raspador y escáner de vulnerabilidades que llega a tu sitio a través de Bunny se contabiliza en la dirección IP del servidor perimetral por el que accedió. Tarde o temprano, se activa uno de los escenarios de CrowdSec, el servidor perimetral se bloquea y el firewall descarta todo su tráfico.
A partir de ese momento, todos los visitantes que se conectan a través de ese servidor perimetral reciben un error 504, mientras que tu servidor funciona perfectamente. Los bloqueos duran horas (cuatro por defecto) y se mantienen tras un reinicio, lo que explica por qué el problema aparece y desaparece, y por qué reiniciar no soluciona nada. Las direcciones IP de Bunny también pueden acabar en la lista negra de la comunidad de CrowdSec, ya que otros usuarios de CrowdSec que utilizan a Bunny ven el mismo patrón.
Cómo diagnosticarlo
Paso 1: compara Bunny con tu servidor
Solicita la misma URL a través de Bunny y directamente desde tu servidor. curl --resolver Esta opción omite el DNS y se conecta directamente a la dirección IP de su servidor, al tiempo que envía el nombre de host correcto:
# A través de Bunny curl -s -o /dev/null -D - -w "status=%{http_code} time=%{time_total}s\n" "https://example.com/robots.txt?nocache=$RANDOM" | grep -iE "^(cdn-cache|status=)" # Directamente a su servidor (reemplace 203.0.113.10 con la dirección IP de su servidor) curl -s -o /dev/null -w "status=%{http_code} time=%{time_total}s\n" --resolve example.com:443:203.0.113.10 "https://example.com/robots.txt""Utilice un archivo estático como robots.txt, para que PHP y la base de datos no intervengan. Compruebe el caché cdn En el primer resultado, si aparece HIT, Bunny respondió desde su caché y la prueba no proporciona información. Dependiendo de la configuración de tu zona de extracción, Bunny podría ignorar la cadena de consulta, así que prueba con otras URL, como una página o un punto final de API que Bunny no almacene en caché, hasta que obtengas un MISS.
Si tu servidor responde en una fracción de segundo mientras que Bunny devuelve un error 504 después de un minuto, el problema no es tu aplicación. Bunny no puede conectarse a tu servidor.
Paso 2: comprueba si CrowdSec ha baneado a Bunny.
Bunny publica las direcciones IP de todos sus servidores perimetrales. Descarga la lista en tu servidor y compárala con las prohibiciones activas de CrowdSec, que CrowdSec denomina decisiones:
curl -s https://bunnycdn.com/api/system/edgeserverlist/plain | tr -d '\r' > /tmp/bunny-ips.txt sudo cscli decisions list --all --limit 0 -o raw | grep -wFf /tmp/bunny-ips.txtAlgunas notas sobre estos comandos:
tr -d '\r''Es necesario porque la lista de Bunny utiliza saltos de línea de Windows. Sin él, no hay coincidencias.--todoincluye prohibiciones de la lista de bloqueo de la comunidad y--límite 0Elimina el límite predeterminado de 100 resultados.grep -wevita coincidencias parciales, por lo que 1.2.3.4 no coincide con 1.2.3.45.
Cualquier resultado indica que CrowdSec está bloqueando a Bunny. Para ver qué escenario provocó las prohibiciones, ejecute lista de alertas de sudo cscli.
La solución
Levantar las prohibiciones actuales
sudo cscli decisions list --all --limit 0 -o raw | grep -woFf /tmp/bunny-ips.txt | sort -u | xargs -r -n1 sudo cscli decisions delete --ipEsto elimina todos los bloqueos activos en un servidor perimetral de Bunny. Debería poder acceder a su sitio web a través de Bunny de inmediato. Repita la prueba desde el paso 1 para comprobarlo.
Servidores perimetrales de Whitelist Bunny
El desbloqueo solo sirve hasta el próximo bloqueo. Para evitar que CrowdSec vuelva a bloquear a Bunny, añade sus direcciones IP a una lista blanca. Bunny añade servidores perimetrales con el tiempo, así que en lugar de crear la lista blanca una sola vez, usa un pequeño script que la reconstruya a partir de la lista actual de Bunny.
#!/bin/sh # Reconstruye la lista blanca de CrowdSec a partir de la lista actual de servidores de borde de Bunny set -e TARGET=/etc/crowdsec/parsers/s02-enrich/bunnycdn-whitelist.yaml IPS=$(curl -sf --max-time 30 https://bunnycdn.com/api/system/edgeserverlist/plain | tr -d '\r' | grep -E '^[0-9.]+$') # Conserva la lista blanca actual si la descarga falló o parece incompleta [ "$(printf '%s\n' "$IPS" | wc -l)" -gt 100 ] || exit 1 { echo 'name: local/bunnycdn-whitelist' echo 'description: "Nunca banear los servidores perimetrales de Bunny CDN"' echo 'whitelist:' echo ' reason: "Bunny CDN edge server"' echo ' ip:' printf '%s\n' "$IPS" | sed 's/.*/ - "&"/' } > "$TARGET.tmp" mv "$TARGET.tmp" "$TARGET" systemctl reload crowdsecGuárdalo como /usr/local/bin/bunny-crowdsec-whitelist.sh, Hazlo ejecutable y ejecútalo una vez:
sudo chmod +x /usr/local/bin/bunny-crowdsec-whitelist.sh sudo /usr/local/bin/bunny-crowdsec-whitelist.sh sudo systemctl status crowdsecEl último comando muestra si CrowdSec se recargó sin errores. Para mantener actualizada la lista blanca, ejecute el script semanalmente desde el crontab de root (sudo crontab -e):
0 4 * * 1 /usr/local/bin/bunny-crowdsec-whitelist.shEl script solo reemplaza la lista blanca cuando la descarga funcionó y contiene un número plausible de direcciones, por lo que una descarga fallida nunca te deja sin una. Cubre IPv4. Si tu servidor también tiene una dirección IPv6, Bunny también puede conectarse a través de IPv6; Bunny publica esas direcciones en bunnycdn.com/api/system/edgeserverlist/ipv6.
Una nota sobre la lista de bloqueo de la comunidad
Esta lista blanca impide que las propias detecciones de CrowdSec bloqueen a Bunny. Los bloqueos que provienen de la lista negra de la comunidad, mostrada con CAPI o listas como su origen en el paso 2, se manejan por separado. Las versiones recientes de CrowdSec ofrecen listas de permisos que también cubren las entradas de la lista negra; ejecute cscli allowlists --help Para comprobar si el tuyo los tiene. En versiones anteriores, ejecuta de nuevo el comando de desbloqueo si Bunny aparece allí.
Si CrowdSec no es el culpable
Si el paso 2 no encuentra nada, hay algo más entre Bunny y tu servidor que está bloqueando el tráfico. Comprueba:
- Otras herramientas de bloqueo, como fail2ban (
sudo fail2ban-client status). - Las reglas del firewall en el servidor (
sudo ufw statusosudo nft list ruleset). - El cortafuegos o la protección DDoS de tu proveedor de alojamiento web, que normalmente se encuentra en su panel de control.
- La dirección de origen en la configuración de la zona de extracción de Bunny, que debe apuntar a la dirección IP o nombre de host actual de su servidor.
Yendo más allá: prohibir el acceso a visitantes que se encuentren detrás de una CDN.
El problema subyacente es que detrás de una CDN, un bloqueo de firewall solo puede afectar a la CDN, nunca al bot o atacante que la utiliza. Si quieres que CrowdSec siga protegiendo esos sitios, haz que tu servidor web registre la dirección IP real del visitante en lugar de la de Bunny. En nginx, puedes hacerlo con establecer_ip_real_desde (listando las direcciones de Bunny) y real_ip_header X-Forwarded-For. CrowdSec detectará entonces a los verdaderos culpables. El bloqueo debe realizarse en algún lugar que vea al visitante real, como el servidor de acceso remoto nginx de CrowdSec o las propias reglas de seguridad de Bunny, ya que su cortafuegos solo ve a Bunny.
No solo Bunny
Lo mismo puede ocurrir detrás de cualquier CDN o proxy inverso, incluido Cloudflare. La mayoría de ellos publican sus direcciones. Cloudflare publica rangos en cloudflare.com/ips-v4 y cloudflare.com/ips-v6, que van bajo cidri: en lugar de IP: en una lista blanca de CrowdSec. De lo contrario, el procedimiento es el mismo: comprueba tus bloqueos con la lista y, a continuación, añádela a la lista blanca.
En breve
- Si Bunny devuelve errores 504 mientras que su servidor funciona correctamente y sus otros sitios web también, sospeche que las direcciones IP de Bunny están bloqueadas.
- Compare una solicitud a través de Bunny con una solicitud directa utilizando
curl --resolve, y asegúrate de que la respuesta de Bunny no sea un acierto de caché. - Comprueba las decisiones de CrowdSec con la lista de servidores perimetrales publicada por Bunny.
- Levanta las prohibiciones, añade las direcciones de Bunny a la lista blanca y actualiza la lista blanca semanalmente.
Última actualización: 5 de octubre de 2026
