Guía de tecnologías

AWStats sobre SSL y automatización con cron

7 min read DevOps Actualizado 16 Sep 2025
AWStats sobre SSL y automatización con cron
AWStats sobre SSL y automatización con cron

Introducción

Este artículo explica cómo ejecutar AWStats sobre una conexión SSL y cómo automatizar sus actualizaciones con cron. Incluye los pasos para generar un certificado autofirmado, configurar Apache y AWStats, crear trabajos cron eficientes y evitar sobrecarga en servidores con mucho tráfico.

Importante: los comandos y rutas mostrados están pensados para sistemas CentOS/RHEL y para instalaciones típicas de AWStats; ajusta rutas y permisos según tu distribución y tu layout de ficheros.

1. Preparar el servidor para SSL

Antes de configurar AWStats sobre HTTPS, asegúrate de que tu servidor web tenga soporte SSL activado (módulos y puerto 443 abiertos). A continuación se muestra cómo crear un certificado autofirmado para Apache usando OpenSSL.

1.1 Crear un certificado

OpenSSL debe estar instalado en el servidor. En CentOS/RHEL puedes instalar el módulo SSL y moverte al directorio de certificados:

yum install mod_ssl

Crear una clave privada RSA para el servidor:

# openssl genrsa -des3 -out server.key 1024

Salida esperada (se solicita frase de contraseña):

Generating RSA private key, 1024 bit long modulus  
Enter pass phrase for server.key:  
Verifying - Enter pass phrase for server.key:

Mostrar la información de la clave privada:

# openssl rsa -noout -text -in server.key

Se solicitará la frase de contraseña:

Enter pass phrase for server.key:

Crear una Certificate Signing Request (CSR) usando la clave privada:

# openssl req -new -key server.key -out server.csr

Durante la creación del CSR se te pedirán campos como país, provincia, organización y Common Name (CN). Ejemplo de interacción:

You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank. For some fields, there will be a default value,
If you enter '.', the field will be left blank.

Ejemplo rellenado:

Country Name (2 letter code) [GB]:JO  
State or Province Name (full name) [Berkshire]:State  
Locality Name (eg, city) [Newbury]: Your Location  
Organization Name (eg, company) [My Company Ltd]:My Company  
Organizational Unit Name (eg, section) []:  
Common Name (eg, your name or your server's hostname) []:ns.somewhere.com  
Email Address []: [email protected]  
Please enter the following 'extra' attributes  
to be sent with your certificate request  
A challenge password []: If you hit enter here, it will be empty  
An optional company name []:

Firmar la CSR creando el certificado para 365 días:

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Salida esperada:

Signature ok

subject=/C=JO/ST=State/L=Your Location/O=My Company/CN=ns.somewhere.com/emailAddress= [email protected] Getting Private key

Se volverá a solicitar la frase de la clave privada:

Enter pass phrase for server.key:

Mover los ficheros creados a los directorios de certificados de tu sistema:

# cp server.crt /etc/pki/tls/certs/  
# cp server.key /etc/pki/tls/private/  
# cp server.csr /etc/pki/tls/private

Ajustar permisos para mayor seguridad:

# chmod go-rwx /etc/pki/tls/certs/server.crt  
# chmod go-rwx /etc/pki/tls/private/server.key  
# chmod go-rwx /etc/pki/tls/private/server.csr

Notas de seguridad: guarda la frase de la clave en un lugar seguro o valora retirar la passphrase para que servicios automatizados puedan arrancar sin interacción humana (sólo si está justificado y proteges el archivo de clave con permisos adecuados).

1.2 Configurar Apache para usar el certificado

Edita el httpd.conf (o el archivo de configuración SSL correspondiente) y añade las rutas al certificado y la clave:

SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key

Verifica que Apache escucha en el puerto 443:

netstat -aunt

Salida ejemplo:

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN  
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN  
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN

Si el puerto 443 no aparece en LISTEN, revisa que el módulo SSL esté cargado y que no haya conflictos de VirtualHost.

2. Configurar AWStats para HTTPS

Accede a la interfaz web de AWStats usando https:// en lugar de http://. Al usar un certificado autofirmado el navegador te pedirá aceptar la excepción de seguridad.

En tu archivo .htaccess (o en la configuración de Apache) puedes redirigir las peticiones de AWStats a HTTPS. Ejemplo (modifica la URL según tu instalación):

# redirect awstats to https
RewriteCond %{REQUEST_URI} ^/awstats(.*)
RewriteRule ^/rawe/awstats(.*)$ https://example.com/awstats$1 [R,L]

En el fichero de configuración de AWStats (por ejemplo awstats.site.conf) ajusta la opción UseHTTPSLinkForUrl para que AWStats genere enlaces HTTPS en los informes:

UseHTTPSLinkForUrl
Version : 4.0+
   
# When AWStats build HTML links in its report pages, it starts thoose link
# with "http://". However some links might be HTTPS links, so you can enter
# here the root of all your HTTPS links. If all your site is a SSL web site,
# just enter "/".
# This parameter is not used if ShowLinksOnUrl is 0.
# Example: "/shopping"
# Example: "/"
# Default: ""
#
UseHTTPSLinkForUrl=""

Si tu sitio entero usa SSL, considera poner UseHTTPSLinkForUrl=”/“ o la URL raíz HTTPS para que todos los enlaces sean https.

3. Automatizar actualizaciones de AWStats con cron

Para evitar actualizaciones manuales puedes crear un trabajo cron. Recomiendo actualizar diariamente para evitar carga extra si tu sitio genera gran volumen de logs.

Editar el crontab del usuario adecuado:

$ crontab -e

En VIM, pulsa i para entrar en modo insertar y añade la línea (ejemplo programado a las 09:45 cada día):

45 9 * */usr/bin/awstats_updateall.pl now -confdir="/etc" -awstatsprog="/var/www/awstats/awstats.pl"

Explicación: -confdir=”/etc” apunta a los archivos de configuración de AWStats.

Asegúrate de dejar una línea en blanco al final del crontab. Para salir de VIM pulsa [Escape] y escribe :x o ZZ para guardar y cerrar.

Otra opción es usar logrotate para invocar AWStats tras rotar los logs. Ejemplo en /etc/logrotate.d:

/var/log/httpd/*log {
missingok
notifempty
sharedscripts
prerotate
/var/www/awstats/awstats.pl-update -config=somesite.net
postrotate
/etc/init.d/httpd reload > /dev/null 2>&1 || true
endscript

3.1 Cron para múltiples archivos de configuración

Si tienes muchos ficheros de configuración, en lugar de crear múltiples crons usa awstats_updateall.pl, que actualiza todas las configuraciones encontradas en un directorio:

15 4 * * * perl $HOME/awstats/tools/awstats_updateall.pl now -awstatsprog=$HOME/awstats/cgi-bin/awstats.pl -configdir=$HOME/awstats/cgi-bin/

Asegúrate de que awstats.pl es ejecutable por el usuario que ejecuta el cron:

$ chmod 504 awstats/cgi-bin/awstats.pl

Esto permite que el cron pueda invocar awstats.pl directamente.

4. Complementos y rendimiento: GeoIP y lookup de hostnames

Por defecto AWStats usa resoluciones DNS para obtener nombres de host y ubicación, rellenando dns.txt; en sitios con mucho tráfico esto puede ralentizar Apache y AWStats. Una alternativa es usar el complemento GeoIP (o la base GeoLite2) para mapear direcciones IP a países/ciudades sin consultas DNS on-the-fly.

Recomendación: usar GeoIP o procesos batch para resolver IPs en lugar de lookups DNS sin control. Hay guías específicas para integrar GeoIP con AWStats; busca la documentación oficial o recursos comunitarios sobre “GeoIP Information for AWStats”.

5. Lista de comprobaciones por roles

Administrador de sistemas:

  • Confirmar permisos y propietario de /etc/pki/tls/* y de los ficheros AWStats.
  • Verificar que el puerto 443 está abierto en el firewall.
  • Asegurar que el cron se ejecuta como el usuario correcto.

DevOps/Desarrollador:

  • Revisar RewriteRules y rutas base de AWStats.
  • Comprobar que los enlaces generados por AWStats usan HTTPS cuando corresponde.

Seguridad/Compliance:

  • Revisar retención de logs y requisitos de privacidad (GDPR) antes de transferir o procesar IPs.
  • Evaluar necesidad de cifrar la clave privada con passphrase y su gestión.

6. Mini-metodología: implementación segura y gradual

  1. Probar en un entorno staging con certificado autofirmado.
  2. Validar que Apache sirve páginas AWStats por HTTPS y que los enlaces generados son https.
  3. Habilitar cron en staging y comprobar logs e integridad del informe.
  4. Mover a producción y sustituir certificado autofirmado por uno válido (CA) si procede.

7. Snippets y hoja de trucos (cheat sheet)

  • Instalar mod_ssl: yum install mod_ssl
  • Generar clave y CSR: openssl genrsa…, openssl req -new…
  • Firmar CSR: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  • Copiar certificados: cp server.crt /etc/pki/tls/certs/
  • Permisos: chmod go-rwx /etc/pki/tls/private/server.key
  • Probar netstat: netstat -aunt

8. Decisión rápida (diagrama)

flowchart TD
  A[¿Necesitas HTTPS para AWStats?] -->|Sí| B[Generar certificado]
  A -->|No| C[Usar HTTP]
  B --> D[Configurar Apache con SSL]
  D --> E[Habilitar redirección a HTTPS]
  E --> F[Configurar UseHTTPSLinkForUrl en AWStats]
  F --> G[Automatizar con cron o awstats_updateall.pl]
  G --> H[Considerar GeoIP para rendimiento]

9. Compatibilidad y notas de migración

  • Rutas y comandos mostrados corresponden a CentOS/RHEL; en Debian/Ubuntu los paquetes y rutas pueden diferir (ej. /etc/ssl/ en lugar de /etc/pki/tls/).
  • AWStats versiones 7.x y 8.x mantienen parámetros similares, pero revisa la documentación de tu versión (UseHTTPSLinkForUrl está disponible desde versiones 4.0+ según el fichero de ejemplo).

10. Problemas comunes y soluciones rápidas

  • No aparece 443 en netstat: comprueba que mod_ssl está instalado y habilitado, y que no hay conflictos con otro VirtualHost.
  • Navegador no acepta certificado: es autofirmado; para producción solicita un certificado de una CA reconocida.
  • Cron no actualiza: revisa permisos de awstats.pl, usuario del crontab y PATH del intérprete perl.

11. Seguridad y privacidad

  • Registrar y procesar direcciones IP puede estar sujeto a regulaciones (p. ej. GDPR). Anonimiza o minimiza datos si tu política de privacidad lo exige.
  • Protege la clave privada con permisos restrictivos y considera su almacenamiento seguro (HSM o gestor de secretos) en entornos críticos.

Resumen

  • Genera un certificado y configura Apache para servir AWStats por HTTPS.
  • Ajusta UseHTTPSLinkForUrl para generar enlaces HTTPS en los informes.
  • Automatiza las actualizaciones con cron o awstats_updateall.pl y usa GeoIP para reducir la carga de DNS en sitios muy visitados.

Notas importantes:

  • Sustituye certificados autofirmados por certificados CA válidos en producción.
  • Siempre revisa permisos y ownership de scripts y ficheros sensibles.

Fin. ¡Listo para ejecutar AWStats por HTTPS y mantener las estadísticas actualizadas de forma automática!

Autor
Edición

Materiales similares

Contadores de rendimiento para Apache Tomcat
Monitorización

Contadores de rendimiento para Apache Tomcat

Protégete del clickjacking y doble clickjacking
Seguridad web

Protégete del clickjacking y doble clickjacking

Fondos distintos por pantalla en Android
Android

Fondos distintos por pantalla en Android

Eliminar tus datos de data brokers
Privacidad

Eliminar tus datos de data brokers

Fondo distinto por cada pantalla en Android
Android

Fondo distinto por cada pantalla en Android

Monitoreo y gestión de Apache Tomcat
Monitoreo

Monitoreo y gestión de Apache Tomcat