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.
Las actualizaciones incluyen parches de seguridad y mejoras importantes. Asegúrate de mantener actualizado tanto Grav como todos sus plugins:
Tools > Check for Updates
.bin/gpm self-upgrade
bin/gpm install grav
El panel de administración (/admin
) es una puerta de entrada crítica. Protege este acceso siguiendo estos pasos:
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.
/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
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;
}
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.
Bloquea el acceso directo a carpetas sensibles mediante archivos .htaccess
. Aquí está lo que ya has hecho y algunas sugerencias adicionales:
/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>
/cache
y /logs
Agrega un .htaccess
básico en estas carpetas:
Deny from all
Ejecuta este comando periódicamente:
bin/grav clear-cache
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]
/admin
Añade una capa adicional de seguridad con autenticación HTTP básica. Esto requiere crear un archivo .htpasswd
con credenciales seguras.
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
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;
}
Revisa regularmente los logs del sistema para detectar actividades sospechosas:
/logs
.El modo debug muestra información sensible sobre errores. Desactívelo en producción:
debug:
enabled: false
Solo instala plugins de fuentes confiables y manténlos actualizados. Evita usar plugins innecesarios.
Un firewall añade una capa extra de protección contra ataques malintencionados. Algunas opciones populares incluyen:
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
.
Si usas Matomo, asegúrate de configurarlo sin cookies para cumplir con el RGPD. Verifica que no rastree datos personales.
Activa la protección CSRF en user/config/security.yaml
:
csrf:
enabled: true
Elimina archivos temporales que podrían acumular información sensible:
bin/grav clear-temp
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
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$
Una CDN como Cloudflare mejora el rendimiento y ofrece capas adicionales de seguridad, como protección contra DDoS.
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.