Skip to Content

Discourse

La integración oficial de ProxyTracer para Discourse. Este complemento brinda inteligencia IP empresarial a tu comunidad, detectando de manera automática VPNs conocidas, proxies, centros de datos y nodos de Tor, brindando la opción de evitar que se registren, inicien sesión o vean el foro Discourse en su totalidad.

El complemento se distribuye a través de este repositorio en Github.

Características

  • Control granular que permite a los administradores aplicar validación de IP en registros de nuevos usuarios, inicios de sesión o globalmente para todos los visitantes del sitio.
  • Caché Redis integrada que almacena las evaluaciones recientes de direcciones IP, reduciendo de forma drástica las llamadas API externas y garantizando cero latencia.
  • En caso de que expire el tiempo de espera (timeout) o falle la conexión a internet, el plugin priorizará dar paso al usuario (fail-open) para prevenir cierres involuntarios a gran escala. Esta conducta se puede modificar mediante los ajustes.
  • Soporte incorporado para listas blancas de IPs exactas y rangos CIDR.

Instalación

  1. Accede a tu servidor mediante SSH y dirígete al directorio de tu instalación Discourse:
    cd /var/discourse
  2. Abre el archivo de configuración de tu contenedor para editarlo:
    nano containers/app.yml
  3. Localiza la sección hooks y añade el comando para clonar el repositorio justo debajo de la instalación de docker_manager:
    hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/proxytracer/discourse-proxytracer.git
  4. Guarda el archivo y reconstruye el contenedor de Discourse para compilar e instalar el plugin:
    ./launcher rebuild app

Configuración

  1. Obtén una clave API estándar desde el Panel de ProxyTracer.
  2. Dirígete al panel administrativo de tu Discourse: Admin → Plugins → ProxyTracer para acceder a los ajustes.
  3. Introduce tu clave API en el campo ProxyTracer API Key.
  4. Habilita los parámetros de protección activando las opciones Enabled during Signup (Al registro), Enabled during Login (Al inicio de sesión) y/o Enabled for All Visitors (Para todos los visitantes).
  5. Agrega las IPs confiables o rangos CIDR a la lista blanca Whitelisted IPs.
  6. (Opcional) Ajusta el tiempo de espera de la API y el tiempo de caducidad en Redis para adaptarlos a tus requisitos de tráfico.
  7. (Opcional) Personaliza el mensaje de bloqueo que ven los usuarios restringidos. Por ejemplo, puedes añadir instrucciones de contacto en caso de que alguien considere erróneo el bloqueo y confirme que no utiliza un proxy ni VPN.

Settings Screenshot

Configuración de red: Cloudflare y proxys inversos

Para que ProxyTracer funcione eficazmente, la aplicación Discourse debe recibir la dirección IP real del cliente. Si tu infraestructura utiliza Cloudflare u otro proxy inverso, Discourse podría registrar por defecto la IP del servidor intermedio, haciendo inexacto el funcionamiento de ProxyTracer.

Por favor, sigue la guía de configuración inferior que se adapte a la arquitectura de tu servidor para asegurar un reenvío correcto de la IP.

Integración directa con Cloudflare (instalación estándar)

Esto aplica si tu servidor Discourse se conecta directamente a internet y utiliza Cloudflare exclusivamente como DNS y CDN perimetral. En esta configuración habitual, debes indicarle a Discourse que confíe en los rangos IP de Cloudflare para extraer la IP real de los encabezados entrantes.

  1. Conéctate a tu servidor mediante SSH y edita la configuración de tu contenedor: nano /var/discourse/containers/app.yml
  2. Encuentra el bloque templates: y añade la plantilla oficial de Cloudflare templates/cloudflare.template.yml:
    templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" - "templates/cloudflare.template.yml"
  3. Guarda el archivo de texto y reconstruye el contenedor de Discourse para aplicar todos los cambios: ./launcher rebuild app

Arquitectura de proxy multicapa (Cloudflare + proxy inverso local)

Esto aplica si tu instancia Discourse se enruta a través de un panel de gestión o proxy inverso local (por ejemplo, CloudPanel, Nginx Proxy Manager, Traefik, Plesk) situado tras Cloudflare. En una arquitectura con doble proxy inverso, la plantilla estándar cloudflare.template.yml fallará porque el tráfico es entregado a Discourse desde tu propia interfaz local, no por Cloudflare directamente. No utilices la plantilla de Cloudflare en este caso.

En lugar de ello, debes configurar tu proxy inverso local para extraer la IP real del cliente a partir del encabezado CF-Connecting-IP, pero solo para el tráfico procedente de rangos IP confiables de Cloudflare. Reenviar este encabezado a ciegas sin verificar el origen permitiría a usuarios maliciosos esquivar exclusiones falsificando los datos del encabezado.

Ejemplo con Nginx: Primero, define los rangos IP de Cloudflare como proxies confiables en el bloque de configuración del servidor (fuera de tu bloque location):
# IPv4 Cloudflare IPs, see https://www.cloudflare.com/ips/ set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 108.162.192.0/18; set_real_ip_from 190.93.240.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 162.158.0.0/15; set_real_ip_from 104.16.0.0/13; set_real_ip_from 104.24.0.0/14; set_real_ip_from 172.64.0.0/13; set_real_ip_from 131.0.72.0/22; # IPv6 Cloudflare IPs set_real_ip_from 2405:b500::/32; set_real_ip_from 2405:8100::/32; set_real_ip_from 2803:f800::/32; set_real_ip_from 2c0f:f248::/32; set_real_ip_from 2a06:98c0::/29; real_ip_header CF-Connecting-IP;

Después, busca la directiva location / o @reverse_proxy. Gracias a la configuración anterior, Nginx ahora resolverá $remote_addr como la IP real del cliente solo si la solicitud pasó por Cloudflare. Modifica los encabezados de reenvío en la configuración del siguiente modo:

location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ... }

Guarda el archivo y recarga tu servicio Nginx en el host local. No es preciso reconstruir el contenedor Discourse en este paso.

Validación y Pruebas

Para cerciorarte de que la configuración de tu red transfiere de forma exitosa los datos correctos a ProxyTracer:

  1. Dirígete a tu panel de administración en Discourse: Admin → Users.
  2. Revisa las columnas Registration IP o Last IP para inspeccionar las visitas recientes.
    • Configuración Incorrecta: Si detectas direcciones IP correspondientes a Cloudflare (consulta aquí la lista completa) o IPs de red local (ej. 127.0.0.1, 172.x.x.x), el reenvío de IP ha fallado. ProxyTracer no podrá proteger con precisión tu sitio en este estado.
    • Configuración Correcta: Si observas direcciones IP residenciales estándar y únicas para tus visitantes, la arquitectura de red se ha configurado de modo correcto y ProxyTracer ya supervisa activamente tu tráfico.

Acceso de Emergencia

💡
¿Bloqueado por accidente? Si durante la configuración bloquearas inadvertida tu propia dirección IP (por ejemplo si mantienes activa una VPN), podrás recobrar acceso deshabilitando el complemento a través de una consola SSH:
cd /var/discourse ./launcher enter app rails c SiteSetting.proxytracer_enabled = false exit exit

Licencia

Este complemento se encuentra regulado bajo la licencia GNU Affero General Public License v3.0 (AGPLv3).

Last updated on