arnauserver.me
El servidor Linux que sirve esta web, administrado por mí de principio a fin
Una VM Ubuntu 24.04 en Azure con menos de 1 GB de RAM que aloja el portfolio, el blog, una status page pública y un panel de administración propio. Endurecida, monitorizada y con informes de seguridad diarios redactados por IA.
Datos en vivo de /status.json · histórico en status.arnauserver.me
Web rápida y segura
nginx con TLS (renovación automática), HTTP/2 y HTML/CSS/JS precomprimidos en brotli y gzip mediante un hook post-commit de git: la portada de 60 KB viaja en ~12 KB.
CSP estricta, HSTS y demás cabeceras; un servidor por defecto que corta con 444 cualquier petición a un host desconocido y rechaza el handshake TLS si el SNI no es mío.
Rate limiting por IP y Web Vitals reales medidos con sendBeacon hacia un colector propio en Python.
Defensa activa
CrowdSec analiza los logs de nginx y SSH y bloquea en el cortafuegos (nftables), sumando la lista comunitaria con miles de IPs maliciosas. Migré desde fail2ban y lo cuento en el blog.
SSH solo con llave, sin root y con pocos intentos. Resolví un caso curioso: el NAT de la universidad compartía IPs con máquinas listadas como atacantes y me dejaba fuera.
Actualizaciones desatendidas con reinicio automático y auditoría diaria con Lynis.
Observabilidad
Status page pública que el propio servidor actualiza cada 5 minutos: disponibilidad, latencia e IPs bloqueadas.
Panel de administración privado con login por passkeys (WebAuthn, sin contraseñas): estado, seguridad, analítica, gasto de la API y acciones remotas tras una lista blanca con sudo.
Cada mañana Claude me resume por correo lo que ha pasado en seguridad, y cada lunes la salud general del sistema.
IA aplicada con control de costes
El chat «pregúntale a mi CV» de la portada usa la API de Claude con topes de gasto, límites por IP y caché del prompt, y solo responde sobre mi perfil.
Todos los microservicios corren aislados con systemd (DynamicUser, ProtectSystem, MemoryMax) para no comprometer una máquina tan pequeña.