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
- Probar en un entorno staging con certificado autofirmado.
- Validar que Apache sirve páginas AWStats por HTTPS y que los enlaces generados son https.
- Habilitar cron en staging y comprobar logs e integridad del informe.
- 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!
Materiales similares

Contadores de rendimiento para Apache Tomcat

Protégete del clickjacking y doble clickjacking

Fondos distintos por pantalla en Android

Eliminar tus datos de data brokers

Fondo distinto por cada pantalla en Android
