Módulo VPSManager para WHMCS con configuración externa, acceso seguro al panel y métricas Graphite para LX.
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

5.4 KiB

Graphite privado con Apache y WHMCS

Esta guía es una propuesta para Apache 2.4. No se ha aplicado ni validado contra el VirtualHost de producción: hay que inspeccionar su configuración actual antes de integrarla. El módulo PHP ya admite las credenciales; el cierre del acceso público se hace en Apache.

1. Cuenta técnica

Crear una cuenta HTTP Basic exclusiva para el servidor WHMCS, por ejemplo whmcs-graphite. No es una cuenta de cliente ni un usuario del panel ISPConfig. No compartirla con clientes: puede acceder a todas las métricas disponibles en Graphite. WHMCS sigue autorizando qué servicio puede visualizar cada cliente antes de solicitar sus datos.

En una instalación tipo Debian/Ubuntu, usar un fichero de contraseñas fuera del DocumentRoot, por ejemplo /etc/apache2/graphite.htpasswd. Estos comandos solicitan la clave de forma interactiva y evitan sobrescribir un fichero ya existente:

if [ -e /etc/apache2/graphite.htpasswd ]; then
    sudo htpasswd -B /etc/apache2/graphite.htpasswd whmcs-graphite
else
    sudo htpasswd -cB /etc/apache2/graphite.htpasswd whmcs-graphite
fi

No usar htpasswd -b ni poner la contraseña en argumentos. -B genera un hash bcrypt; -c se usa solamente al crear el fichero. Darle permisos 0640, propietario administrador y grupo legible por el usuario real de Apache. Adaptar ruta, usuario y grupo al sistema; no usar chmod 777 ni guardar este fichero en Git.

2. Proteger el VirtualHost HTTPS completo

Integrar este bloque en el VirtualHost HTTPS existente de Graphite, conservando su certificado y sus directivas WSGI/proxy/estáticos actuales:

<Location "/">
    AuthType Basic
    AuthName "Graphite privado"
    AuthBasicProvider file
    AuthUserFile /etc/apache2/graphite.htpasswd
    Require user whmcs-graphite
</Location>

Se requieren los módulos auth_basic, authn_file y authz_user. Revisar que ninguna sección más específica (Location, Directory, alias u otro VirtualHost) elimine o sustituya esta protección. Deben quedar protegidas tanto la interfaz como /render/, las APIs de búsqueda de métricas y todas las demás rutas. Proteger únicamente la página de login no basta.

El VirtualHost HTTP debe redirigir a HTTPS sin servir Graphite. El backend WSGI/proxy debe escuchar solo en loopback/red privada protegida; cerrar cualquier puerto/origen/hostname alternativo que permita eludir Apache. Revisar todos los virtual hosts que sirvan el mismo backend. No activar logs que incluyan Authorization ni modo verbose de cURL.

Antes de recargar, comprobar la configuración:

sudo apachectl configtest

Solo después de obtener Syntax OK, recargar Apache con el mecanismo propio del sistema. No se incluye un VirtualHost completo para evitar sustituir o romper el despliegue existente.

3. Configuración privada de WHMCS

En /etc/open6hosting/whmcs-vpsmanager.php, conservar las otras claves y añadir:

'graphite_auth' => 'basic',
'graphite_username' => 'whmcs-graphite',
'graphite_password' => '', // Introducir aquí la clave real, solo en este fichero privado.

Mantener graphite_url como la base HTTPS que ya se utiliza, sin /render/ y sin credenciales o query string. Las claves vacías del ejemplo NO son una configuración válida para Basic: hasta completarlas el módulo muestra el aviso de métricas no disponibles.

La contraseña real debe ser la misma creada en Apache. No copiar el hash bcrypt del fichero htpasswd: cURL necesita el secreto original y Apache verifica su hash. El fichero privado de WHMCS debe ser legible por PHP-FPM, no estar dentro del repositorio/DocumentRoot y no ser escribible por PHP. Restringir igualmente copias de seguridad y acceso administrativo.

4. Orden del cambio y verificación

  1. Preparar la cuenta y el fichero privado de WHMCS.
  2. Instalar esta versión del módulo, manteniendo una copia de seguridad fuera del webroot.
  3. Activar la protección de Apache, validar sintaxis y recargar.
  4. Desde fuera, sin credenciales, comprobar respuesta 401 en interfaz y Render API.
  5. Con contraseña incorrecta, comprobar 401 y que no se devuelve ningún dato.
  6. Desde WHMCS, con la cuenta correcta, comprobar 200 JSON de Render y las tres gráficas.
  7. Con dos clientes WHMCS, comprobar que ninguno puede visualizar el servicio del otro.
  8. Verificar que el backend y los nombres/puertos alternativos no exponen Graphite.

Para una comprobación manual autenticada, curl --user whmcs-graphite solicita la contraseña sin incluirla en los argumentos. Usar la URL HTTPS propia y no activar -v. No probar con credenciales incluidas en la URL ni copiar respuestas de producción a Git.

La cuenta Basic autentica al servidor WHMCS frente a Graphite. La autorización individual por cliente sigue siendo responsabilidad de WHMCS; Apache no filtra targets por UUID. Esta autenticación tampoco protege automáticamente la aplicación independiente Graphs: si esa aplicación consulta Graphite desde su servidor, puede seguir publicando los datos. Mantener su botón desactivado y restringir o corregir esa aplicación por separado.

Referencias