Configurar Correctamente GRAV en Materia de Seguridad

La seguridad es una preocupación fundamental al gestionar cualquier sitio web, especialmente cuando trabajas con un sistema de gestión de contenido como Grav CMS. Aunque Grav es inherentemente más seguro que otras plataformas debido a su arquitectura sin base de datos, siempre es recomendable tomar medidas adicionales para proteger tu sitio. En este artículo, te guiamos paso a paso para configurar correctamente Grav y minimizar riesgos.

Esta guía se basa en mis propios aprendizajes durante el desarrollo de VeleroAzul y en las valiosas recomendaciones proporcionadas por mi asistente IA.


1. Mantén Actualizado tu Sitio

Las actualizaciones incluyen parches de seguridad y mejoras importantes. Asegúrate de mantener actualizado tanto Grav como todos sus plugins:

  • Desde el panel de administración: Tools > Check for Updates.
  • Desde la línea de comandos:
    bin/gpm self-upgrade
    bin/gpm install grav

2. Configura el Acceso al Panel de Administración

El panel de administración (/admin) es una puerta de entrada crítica. Protege este acceso siguiendo estos pasos:

a) Usa Contraseñas Fuertes

Cambia la contraseña predeterminada por una segura (al menos 12 caracteres con letras, números y símbolos). Habilita autenticación de dos factores (2FA) si es posible.

b) Renombra la Ruta /admin

Cambiar la ruta del panel de administración dificulta intentos de acceso no autorizados. Edita user/config/system.yaml:

admin:
    route: /tu-nueva-ruta-secreta

c) Restringir el Acceso por IP

Si navegas desde IPs fijas, restringe el acceso al panel solo desde estas direcciones. Crea un archivo .htaccess en /admin (para Apache):

Order deny,allow
Deny from all
Allow from 123.456.789.012  # Reemplaza con tu dirección IP

Para Nginx, configura en tu archivo de configuración:

location /tu-nueva-ruta-secreta {
    allow 123.456.789.012;  # Reemplaza con tu dirección IP
    deny all;
}

3. Deshabilita Funciones Innecesarias

Elimina o desactiva plugins y funcionalidades que no uses. Cada componente adicional puede ser un vector de ataque potencial. Ve a Plugins en el panel de administración y desactiva lo que no necesites.


4. Protege Archivos Sensibles

Bloquea el acceso directo a carpetas sensibles mediante archivos .htaccess. Aquí está lo que ya has hecho y algunas sugerencias adicionales:

a) Carpeta /user

Protege esta carpeta con un .htaccess personalizado:

<Files "*">
    Order deny,allow
    Deny from all
</Files>

<FilesMatch "\.(yaml|md|txt|json|woff|woff2|ttf|eot|svg|png|jpg|jpeg|gif|css|js)$">
    Allow from all
</FilesMatch>

b) Carpetas /cache y /logs

Agrega un .htaccess básico en estas carpetas:

Deny from all

c) Limpia Cache Regularmente

Ejecuta este comando periódicamente:

bin/grav clear-cache

5. Configura HTTPS

Habilita HTTPS para cifrar toda la comunicación entre el cliente y el servidor. Usa Let's Encrypt para obtener un certificado SSL gratuito. En tu archivo .htaccess principal, redirige todo el tráfico a HTTPS:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. Autenticación HTTP Básica para /admin

Añade una capa adicional de seguridad con autenticación HTTP básica. Esto requiere crear un archivo .htpasswd con credenciales seguras.

Para Apache:

Crea un .htaccess en /admin:

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /ruta/a/tu/archivo/.htpasswd
Require valid-user

Genera el archivo .htpasswd:

htpasswd -c /ruta/a/tu/archivo/.htpasswd tu-usuario

Para Nginx:

Configura en tu archivo de configuración:

location /tu-nueva-ruta-secreta {
    auth_basic "Restricted Area";
    auth_basic_user_file /ruta/a/tu/archivo/.htpasswd;
}

7. Monitorea Logs

Revisa regularmente los logs del sistema para detectar actividades sospechosas:

  • Los logs de Grav están en /logs.
  • Los logs del servidor web (Apache o Nginx) también pueden proporcionar pistas sobre accesos no autorizados.

8. Deshabilita Modo Debug

El modo debug muestra información sensible sobre errores. Desactívelo en producción:

debug:
    enabled: false

9. Restringe el Uso de Plugins de Terceros

Solo instala plugins de fuentes confiables y manténlos actualizados. Evita usar plugins innecesarios.


10. Configura un Firewall

Un firewall añade una capa extra de protección contra ataques malintencionados. Algunas opciones populares incluyen:

  • Cloudflare: Ofrece protección contra DDoS y firewalls gratuitos.
  • Firewall del Servidor: Configura reglas específicas para bloquear tráfico sospechoso.

11. Haz Copias de Seguridad Regulares

Las copias de seguridad son cruciales para recuperarte de fallos o ataques. Usa el plugin oficial de Backup o automatiza copias mediante scripts como rsync.


12. Configura Matomo Analytics sin Cookies

Si usas Matomo, asegúrate de configurarlo sin cookies para cumplir con el RGPD. Verifica que no rastree datos personales.


13. Protege contra Ataques CSRF

Activa la protección CSRF en user/config/security.yaml:

csrf:
    enabled: true

14. Limpia Archivos Temporales

Elimina archivos temporales que podrían acumular información sensible:

bin/grav clear-temp

15. Configura Permisos Correctamente

Establece permisos adecuados para evitar accesos no autorizados:

find /ruta/a/grav -type d -exec chmod 755 {} \;
find /ruta/a/grav -type f -exec chmod 644 {} \;
chmod -R 775 /ruta/a/grav/cache
chmod -R 775 /ruta/a/grav/logs

16. Agrega un Archivo robots.txt

Evita que bots maliciosos indexen partes sensibles de tu sitio. Ejemplo:

User-agent: *
Disallow: /admin/
Disallow: /cache/
Disallow: /logs/
Disallow: /backup/
Disallow: /user/
Allow: /user/pages/
Allow: /user/themes/
Allow: /user/images/
Allow: *.css$
Allow: *.js$

17. Considera una CDN (Opcional)

Una CDN como Cloudflare mejora el rendimiento y ofrece capas adicionales de seguridad, como protección contra DDoS.


Conclusión

Seguir estos pasos garantizará que tu sitio Grav esté bien protegido contra amenazas comunes. Recuerda que la seguridad nunca está completa: revisa regularmente las actualizaciones, monitorea logs y ajusta configuraciones según sea necesario.

Esta guía se basa en mis propios aprendizajes mientras desarrollaba VeleroAzul y en las valiosas recomendaciones proporcionadas por mi asistente IA. Espero que sea útil tanto para ti como para otros usuarios de Grav que busquen mejorar la seguridad de sus sitios.