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
-
Accede a tu servidor mediante SSH y dirígete al directorio de tu instalación Discourse:
cd /var/discourse -
Abre el archivo de configuración de tu contenedor para editarlo:
nano containers/app.yml -
Localiza la sección
hooksy añade el comando para clonar el repositorio justo debajo de la instalación dedocker_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 -
Guarda el archivo y reconstruye el contenedor de Discourse para compilar e instalar el plugin:
./launcher rebuild app
Configuración
- Obtén una clave API estándar desde el Panel de ProxyTracer.
- Dirígete al panel administrativo de tu Discourse: Admin → Plugins → ProxyTracer para acceder a los ajustes.
-
Introduce tu clave API en el campo
ProxyTracer API Key. -
Habilita los parámetros de protección activando las opciones
Enabled during Signup(Al registro),Enabled during Login(Al inicio de sesión) y/oEnabled for All Visitors(Para todos los visitantes). -
Agrega las IPs confiables o rangos CIDR a la lista blanca
Whitelisted IPs. - (Opcional) Ajusta el tiempo de espera de la API y el tiempo de caducidad en Redis para adaptarlos a tus requisitos de tráfico.
- (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.

Configuración de red: Cloudflare y proxys inversos
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.
-
Conéctate a tu servidor mediante SSH y edita la configuración de tu contenedor:
nano /var/discourse/containers/app.yml -
Encuentra el bloque
templates:y añade la plantilla oficial de Cloudflaretemplates/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" -
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.
# 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:
- Dirígete a tu panel de administración en Discourse: Admin → Users.
-
Revisa las columnas
Registration IPoLast IPpara 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.
-
Configuración Incorrecta: Si detectas direcciones IP correspondientes a Cloudflare (consulta aquí la lista completa) o IPs de red local (ej.
Acceso de Emergencia
cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exitLicencia
Este complemento se encuentra regulado bajo la licencia GNU Affero General Public License v3.0 (AGPLv3).