mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-06-01 21:14:49 +00:00
complete i18n migration to /[locale]/ with EN+ES content
Full rewrite of the docs site under app/[locale]/ with next-intl in localePrefix:"always" mode. Every page now exists at both /en/<path> and /es/<path>; the root / shows a meta-refresh + JS redirect to /<defaultLocale>/ so GitHub Pages serves something on the apex URL. Highlights: - 107 doc pages migrated to file-per-page JSON namespaces under messages/en/ and messages/es/. Spanish content is fully translated (no copy-of-English placeholders). - New documentation for the Active Suppressions section in the Settings tab and the per-event Dismiss dropdown in the Health Monitor modal. - New screenshots: dismiss-duration-dropdown.png and an updated health-suppression-settings.png. - Pagefind integrated for client-side search; index is built on every CI deploy (not committed). - RSS feeds: per-locale at /<locale>/rss.xml plus root /rss.xml for backward compat. - Removed the dead app/[locale]/guides/[slug]/ route — every guide now has its own static page and no markdown source remains. - Fixed orphan link /guides/nvidia -> /guides/nvidia-manual in docs/hardware/nvidia-host. - Removed obsolete components (footer2, calendar, drawer). Verified locally with `npm ci && npm run build`: 2804 files in out/, 231 pages indexed by pagefind, root redirect intact, both locale roots and the new Active Suppressions docs render OK.
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Fail2Ban | ProxMenux Documentation",
|
||||
"description": "Instala Fail2Ban con tres jails afinados para Proxmox (SSH agresivo, Proxmox UI 8006, ProxMenux Monitor 8008). Incluye el arreglo de journald MaxLevelStore, servicios de log propios para fiabilidad, backend nftables/iptables autodetectado y hardening de SSH MaxAuthTries.",
|
||||
"ogTitle": "Fail2Ban | ProxMenux Documentation",
|
||||
"ogDescription": "Protección contra fuerza bruta para SSH y las UIs web de Proxmox, con arreglos específicos de journald y backend para Proxmox."
|
||||
},
|
||||
"header": {
|
||||
"title": "Fail2Ban",
|
||||
"description": "Instala Fail2Ban con una configuración específica para Proxmox: tres jails (SSH agresivo, Proxmox UI en puerto 8006, ProxMenux Monitor en puerto 8008 + proxy inverso), un arreglo del nivel de log de journald para que los eventos de autenticación SSH se almacenen de verdad, dos servicios logger journal-a-archivo que rodean un problema conocido del backend systemd de Fail2Ban, backend de firewall autodetectado y hardening de SSH MaxAuthTries.",
|
||||
"section": "Seguridad"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Instala Fail2Ban desde los repos de Debian y escribe una configuración completa afinada para Proxmox que protege tres superficies de ataque (SSH, Proxmox UI, ProxMenux Monitor) por defecto. Detecta una instalación existente y ofrece un menú de gestión (reinstalar / eliminar) en lugar de volver a ejecutar el instalador."
|
||||
},
|
||||
"firstLaunch": {
|
||||
"heading": "Diálogo de primer lanzamiento",
|
||||
"body": "En un host sin Fail2Ban, el script muestra un diálogo de confirmación que resume todo lo que va a instalar y configurar. Cancelar sale sin cambios; confirmar arranca el flujo de instalación.",
|
||||
"imageAlt": "Diálogo de confirmación de instalación de Fail2Ban listando los tres jails, el arreglo de journald y el hardening de SSH"
|
||||
},
|
||||
"jails": {
|
||||
"heading": "Los tres jails",
|
||||
"headerJail": "Jail",
|
||||
"headerProtects": "Protege",
|
||||
"headerRetries": "Reintentos / Ventana",
|
||||
"headerBan": "Tiempo de ban",
|
||||
"rows": [
|
||||
{
|
||||
"jail": "[sshd]",
|
||||
"protects": "SSH (modo agresivo — cubre ddos, mode, normal)",
|
||||
"retries": "2 / 60 min",
|
||||
"ban": "9 horas"
|
||||
},
|
||||
{
|
||||
"jail": "[proxmox]",
|
||||
"protects": "UI web de Proxmox (puerto 8006)",
|
||||
"retries": "3 / 10 min",
|
||||
"ban": "1 hora"
|
||||
},
|
||||
{
|
||||
"jail": "[proxmenux]",
|
||||
"protects": "ProxMenux Monitor (puerto 8008 + proxy inverso http/https)",
|
||||
"retries": "3 / 10 min",
|
||||
"ban": "1 hora"
|
||||
}
|
||||
],
|
||||
"outro": "Valores por defecto globales de <code>jail.local</code>: <code>ignoreip = 127.0.0.1/8 ::1</code>, <code>ignoreself = true</code>,<code> bantime = 86400</code> (fallback de 24h para jails que no lo sobrescriben), <code>maxretry = 2</code>, <code>findtime = 1800</code>."
|
||||
},
|
||||
"journald": {
|
||||
"heading": "Por qué importa el arreglo de journald",
|
||||
"intro": "Proxmox entrega <code>/etc/systemd/journald.conf</code> con <codeNw>MaxLevelStore=warning</codeNw>. journald descarta cada mensaje de log <em>por debajo</em> de warning antes de almacenarlo. SSH y PAM emiten fallos de autenticación a niveles <em>info</em> / <em>notice</em>, así que:",
|
||||
"diagram": {
|
||||
"sshLabel": "SSH / PAM",
|
||||
"sshDetail": "fallo de autenticación\n(nivel info / notice)",
|
||||
"journaldLabel": "journald",
|
||||
"journaldDetail": "MaxLevelStore=warning\n→ evento descartado en silencio",
|
||||
"fail2banLabel": "Fail2Ban",
|
||||
"fail2banDetail": "no ve nada\n→ nunca banea nada",
|
||||
"arrowLabel": "Proxmox por defecto"
|
||||
},
|
||||
"afterDiagram": "El instalador detecta esto y escribe un drop-in en <codeXs>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</codeXs> subiendo <code>MaxLevelStore</code> y <code>MaxLevelSyslog</code> a <code>info</code>:",
|
||||
"code": "[Journal]\nMaxLevelStore=info\nMaxLevelSyslog=info",
|
||||
"outro": "Después reinicia <code>systemd-journald</code>. El drop-in se elimina al desinstalar, restaurando el valor por defecto original de Proxmox."
|
||||
},
|
||||
"loggers": {
|
||||
"heading": "Por qué dos servicios logger propios",
|
||||
"intro1": "Fail2Ban puede leer directamente del journal de systemd (<code>backend = systemd</code>), pero en Proxmox este backend tiene problemas conocidos de fiabilidad con los procesos worker de <code>pvedaemon</code> (los eventos de autenticación aparecen en el journal pero Fail2Ban no siempre los recoge) e intermitentemente con <code>sshd</code>.",
|
||||
"intro2": "La solución alternativa: ProxMenux crea dos pequeños servicios systemd que hacen <code>journalctl -f</code> de las unidades relevantes y añaden cada línea a un archivo. Fail2Ban entonces lee esos archivos con el sólido como una roca <code>backend = auto</code> (modo archivo):",
|
||||
"headerService": "Servicio",
|
||||
"headerSource": "Unidad origen",
|
||||
"headerOutput": "Archivo de salida",
|
||||
"rows": [
|
||||
{
|
||||
"service": "proxmox-auth-logger.service",
|
||||
"source": "pvedaemon.service",
|
||||
"output": "/var/log/proxmox-auth.log"
|
||||
},
|
||||
{
|
||||
"service": "ssh-auth-logger.service",
|
||||
"source": "ssh.service",
|
||||
"output": "/var/log/ssh-auth.log"
|
||||
}
|
||||
],
|
||||
"outro": "Ambos servicios se declaran <code>PartOf=fail2ban.service</code> para que se reinicien con Fail2Ban y se paren con él. Modo 640 propiedad de <code>root:adm</code> en los archivos de log. El tercer log usado por el jail <code>[proxmenux]</code> (<code>/var/log/proxmenux-auth.log</code>) lo escribe directamente la app Flask del Monitor de ProxMenux — no hace falta servicio logger para ese."
|
||||
},
|
||||
"backend": {
|
||||
"heading": "Autodetección del backend de firewall",
|
||||
"intro": "El instalador sondea el host: si <code>nft list ruleset</code> funciona, elige <code>nftables</code> como acción de ban. Si no, recae en <code>iptables-multiport</code> / <code>iptables-allports</code>. La elección se escribe en <code>jail.local</code>:",
|
||||
"code": "# nftables host\nbanaction = nftables\nbanaction_allports = nftables[type=allports]\n\n# iptables host (fallback)\nbanaction = iptables-multiport\nbanaction_allports = iptables-allports"
|
||||
},
|
||||
"hardening": {
|
||||
"heading": "Hardening de SSH: MaxAuthTries",
|
||||
"intro": "El control de Lynis <strong>SSH-7408</strong> recomienda <code>MaxAuthTries 3</code> en <code>sshd_config</code>. Con el <code>maxretry = 2</code> de Fail2Ban en el jail SSH, un cliente malicioso nunca llega a tres intentos de todas formas — pero el ajuste explícito satisface la auditoría y añade defensa en profundidad (p. ej. si Fail2Ban está parado por mantenimiento).",
|
||||
"installerIntro": "El instalador:",
|
||||
"items": [
|
||||
"Lee el valor actual de <code>MaxAuthTries</code> (o por defecto 6 si está ausente).",
|
||||
"Lo guarda en <code>/usr/local/share/proxmenux/sshd_maxauthtries_backup</code>.",
|
||||
"Edita <code>sshd_config</code> en sitio — reemplaza la línea existente, descomenta la línea comentada o la añade.",
|
||||
"Recarga <code>sshd</code> (reload, no restart, para mantener vivas las sesiones existentes)."
|
||||
],
|
||||
"outro": "Al desinstalar, el valor original guardado se restaura y se recarga <code>sshd</code> otra vez."
|
||||
},
|
||||
"manage": {
|
||||
"heading": "Gestionar una instalación existente",
|
||||
"intro": "Si Fail2Ban ya está instalado cuando abres el menú, el script lo detecta y muestra un menú de gestión en lugar de volver a ejecutar el instalador:",
|
||||
"headerAction": "Acción",
|
||||
"headerWhat": "Qué hace",
|
||||
"rows": [
|
||||
{
|
||||
"action": "Reinstalar",
|
||||
"what": "Vuelve a ejecutar el instalador completo — reescribe todos los jails con los valores por defecto actuales de ProxMenux. Úsalo cuando una actualización de ProxMenux suba los valores recomendados."
|
||||
},
|
||||
{
|
||||
"action": "Eliminar",
|
||||
"what": "Para fail2ban y los dos servicios logger, purga el paquete apt, elimina todos los archivos de jail / filtro, borra el drop-in de journald (restaurando el valor por defecto de Proxmox) y restaura el MaxAuthTries SSH original."
|
||||
}
|
||||
]
|
||||
},
|
||||
"verify": {
|
||||
"heading": "Verifica que funciona",
|
||||
"intro": "Tras la instalación, comandos útiles desde el host:",
|
||||
"code": "# Service status and version\nsystemctl status fail2ban\nfail2ban-client --version\n\n# All active jails\nfail2ban-client status\n\n# Detail on one jail\nfail2ban-client status sshd\nfail2ban-client status proxmox\nfail2ban-client status proxmenux\n\n# Currently banned IPs in a jail\nfail2ban-client status sshd | grep \"Banned IP\"\n\n# Manually unban an IP (use this if you ban yourself)\nfail2ban-client unban 192.0.2.10\n\n# Tail the auth logs Fail2Ban watches\ntail -f /var/log/ssh-auth.log\ntail -f /var/log/proxmox-auth.log\ntail -f /var/log/fail2ban.log"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"neverBansTitle": "Fail2Ban corre pero nunca banea nada",
|
||||
"neverBansBody": "Comprueba que los archivos de log de autenticación reciben entradas de verdad: <code>tail -f /var/log/ssh-auth.log</code> y prueba un intento SSH con contraseña incorrecta desde otra máquina. Si el log se queda vacío, el servicio logger no está corriendo: <code>systemctl status ssh-auth-logger.service</code>. Si está activo pero el log está vacío, comprueba que el drop-in de journald surtió efecto: <code>journalctl --dump-catalog | head</code> — eventos a nivel <em>info</em> deberían ser visibles.",
|
||||
"monitorEmptyTitle": "El jail del Monitor de ProxMenux no tiene entradas ni siquiera tras logins fallidos",
|
||||
"monitorEmptyBody": "El jail <code>[proxmenux]</code> lee <code>/var/log/proxmenux-auth.log</code>, que lo escribe la app Flask del Monitor de ProxMenux — no un logger de journald. Si no usas el Monitor, el archivo se queda vacío y el jail nunca dispara. Eso es lo esperado; la configuración del jail es inocua. Si sí usas el Monitor y el log está vacío, comprueba la configuración de logging de Flask.",
|
||||
"selfBanTitle": "Me he baneado a mí mismo",
|
||||
"selfBanIntro": "Desde una consola / IPMI / iKVM (u otra IP whitelisted):",
|
||||
"selfBanCode": "fail2ban-client unban '<'YOUR_IP'>'\n\n# To prevent it next time, edit /etc/fail2ban/jail.local and add your IP:\nignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42\n\n# Then reload\nfail2ban-client reload",
|
||||
"aptFailTitle": "apt-get falla: ''Unable to locate package fail2ban''",
|
||||
"aptFailBody": "Al host le faltan los repos de Debian (común en instalaciones de Proxmox a pelo). El instalador detecta esto y escribe <code>/etc/apt/sources.list.d/debian.sources</code> con el codename correcto (<code>bookworm</code> / <code>trixie</code>) antes de reintentarlo. Si sigue fallando, comprueba <code>/etc/os-release</code> en busca de <code>VERSION_CODENAME</code> y confirma que la URL del repo es alcanzable.",
|
||||
"lockoutTitle": "SSH me bloquea el acceso tras la instalación",
|
||||
"lockoutBody": "El instalador establece <code>MaxAuthTries=3</code>. Si tu gestor de contraseñas / agente reintenta múltiples claves, puedes superar ese límite en un único intento de conexión. Limita las claves ofrecidas: <code>ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host</code>. O sube temporalmente <code>MaxAuthTries</code> en <code>sshd_config</code> mientras depuras."
|
||||
},
|
||||
"files": {
|
||||
"heading": "Archivos escritos",
|
||||
"code": "/etc/fail2ban/jail.local # global defaults + [sshd]\n/etc/fail2ban/jail.d/proxmox.conf # [proxmox]\n/etc/fail2ban/jail.d/proxmenux.conf # [proxmenux]\n/etc/fail2ban/filter.d/proxmox.conf # auth-failure regex for pvedaemon\n/etc/fail2ban/filter.d/proxmenux.conf # auth-failure regex for Monitor\n/etc/systemd/system/proxmox-auth-logger.service # journal → file (pvedaemon)\n/etc/systemd/system/ssh-auth-logger.service # journal → file (sshd)\n/etc/systemd/journald.conf.d/proxmenux-loglevel.conf # MaxLevelStore=info\n/etc/ssh/sshd_config # MaxAuthTries=3 (in-place edit)\n/var/log/proxmox-auth.log # written by logger service\n/var/log/ssh-auth.log # written by logger service\n/var/log/proxmenux-auth.log # written by Monitor Flask app\n/usr/local/share/proxmenux/sshd_maxauthtries_backup # for restore on uninstall"
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"monitorLabel": "ProxMenux Monitor → pestaña de Seguridad",
|
||||
"monitorTail": " — misma instalación accesible desde el panel, más estado en vivo de los jails, IPs baneadas y ajuste por jail de reintentos / tiempo de ban desde el navegador.",
|
||||
"lynisLabel": "Lynis",
|
||||
"lynisTail": " — ejecuta una auditoría de seguridad antes/después para confirmar que el control SSH-7408 se satisface.",
|
||||
"securityLabel": "Resumen de Seguridad",
|
||||
"securityTail": " — volver al resumen de la sección."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Seguridad de Proxmox — Fail2Ban, auditoría de hardening con Lynis | ProxMenux",
|
||||
"description": "Dos herramientas de seguridad instalables para Proxmox VE: Fail2Ban (prevención de intrusiones para SSH, la UI web de Proxmox y el Monitor de ProxMenux) y Lynis (escáner de auditoría y hardening de seguridad instalado desde GitHub upstream).",
|
||||
"ogTitle": "Seguridad de Proxmox — Fail2Ban, auditoría de hardening con Lynis",
|
||||
"ogDescription": "Fail2Ban y Lynis para Proxmox VE — prevención de intrusiones más una auditoría de hardening instaladas y gestionadas por ProxMenux.",
|
||||
"twitterTitle": "Seguridad de Proxmox | ProxMenux",
|
||||
"twitterDescription": "Fail2Ban y Lynis para Proxmox VE — prevención de intrusiones y auditoría de hardening."
|
||||
},
|
||||
"header": {
|
||||
"title": "Seguridad",
|
||||
"description": "Dos herramientas de seguridad complementarias para Proxmox VE: una defensa activa (Fail2Ban — banea IPs que atacan SSH o las UIs web) y una auditoría offline (Lynis — escanea el sistema en busca de huecos de hardening y da una puntuación 0–100). Ambas se instalan y gestionan mediante su propio menú dedicado, con detección de una instalación existente antes de cualquier acción.",
|
||||
"section": "Seguridad"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Defensa activa vs. auditoría offline",
|
||||
"body": "Estas dos herramientas responden a preguntas distintas. <strong>Fail2Ban</strong> responde a <em>\"¿hay algo atacándonos ahora mismo?\"</em> vigilando los logs de autenticación y baneando las IPs ofensoras. <strong>Lynis</strong> responde a <em>\"¿cómo de hardened está este host?\"</em> ejecutando una auditoría de un tirón e imprimiendo recomendaciones concretas. Úsalas juntas: Lynis te dice qué arreglar, Fail2Ban gestiona el abuso en vivo."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir el menú",
|
||||
"body": "Desde el menú principal de ProxMenux, selecciona <strong>Seguridad</strong>. Verás esto:",
|
||||
"imageAlt": "Menú de Seguridad con opciones de Fail2Ban y Lynis"
|
||||
},
|
||||
"pick": {
|
||||
"heading": "Elige tu herramienta",
|
||||
"body": "Las dos herramientas de seguridad son independientes — instala una, ambas o ninguna. Cada tarjeta de abajo salta a la sección que explica la herramienta en detalle."
|
||||
},
|
||||
"cards": {
|
||||
"fail2ban": {
|
||||
"title": "Fail2Ban",
|
||||
"body": "Prevención de intrusiones activa. Vigila los logs de autenticación de SSH y las UIs web y banea IPs tras fallos repetidos.",
|
||||
"bullets": [
|
||||
"Tres jails: SSH, Proxmox UI (8006), ProxMenux Monitor (8008)",
|
||||
"Arregla los valores por defecto de journald de Proxmox que bloquean los logs de autenticación",
|
||||
"Detección automática de nftables / iptables",
|
||||
"Hardening de SSH: MaxAuthTries=3 (recomendación de Lynis)"
|
||||
]
|
||||
},
|
||||
"lynis": {
|
||||
"title": "Lynis",
|
||||
"body": "Auditor de seguridad offline. Escanea el host e imprime una puntuación de hardening más pistas concretas de remediación.",
|
||||
"bullets": [
|
||||
"Instalado desde el GitHub upstream de CISOfy (siempre el último)",
|
||||
"Puntuación de hardening 0–100 + lista de warnings y sugerencias",
|
||||
"Acciones de ejecutar auditoría y actualizar dentro del menú",
|
||||
"De solo lectura por diseño — nunca cambia el sistema"
|
||||
]
|
||||
}
|
||||
},
|
||||
"workflowTip": {
|
||||
"title": "Flujo de trabajo que usa ambos",
|
||||
"body": "Ejecuta primero una auditoría de Lynis para ver tu puntuación de partida y las recomendaciones principales. Aplica los arreglos que quieras. Después instala Fail2Ban — implementa una de las recomendaciones más comunes de Lynis (protección contra fuerza bruta SSH) automáticamente y ajusta <code>MaxAuthTries</code> en <code>sshd_config</code> para satisfacer el control SSH-7408. Vuelve a ejecutar Lynis después para confirmar que la puntuación mejoró."
|
||||
},
|
||||
"fail2banSection": {
|
||||
"heading": "Fail2Ban",
|
||||
"body": "ProxMenux instala Fail2Ban con una configuración afinada específicamente para Proxmox. Más allá del jail estándar de SSH, añade protección para la UI web de Proxmox y el Monitor de ProxMenux, y rodea dos rarezas específicas de Proxmox: un valor por defecto de journald que descarta eventos de autenticación, y el problema del backend systemd que impide a Fail2Ban leer de forma fiable ciertas fuentes del journal. La página de detalle cubre el flujo de instalación completo, los tres jails, el arreglo de journald, el cambio de hardening SSH y la chuleta de solución de problemas.",
|
||||
"optionTitle": "Fail2Ban — instalar y gestionar",
|
||||
"optionDescription": "Tres jails preconfigurados (sshd agresivo, Proxmox UI puerto 8006, ProxMenux Monitor puerto 8008 + proxy inverso), backend nftables/iptables autodetectado, arreglo de journald y hardening de SSH MaxAuthTries."
|
||||
},
|
||||
"lynisSection": {
|
||||
"heading": "Lynis",
|
||||
"body": "ProxMenux clona Lynis desde <code>github.com/CISOfy/lynis</code> en <code>/opt/lynis</code> y lo expone como <code>/usr/local/bin/lynis</code>. El paquete de Debian se evita intencionadamente porque va varias versiones mayores por detrás de upstream. La página de detalle cubre el flujo de instalar / auditar / actualizar / desinstalar, cómo leer el informe y cómo actuar sobre los hallazgos.",
|
||||
"optionTitle": "Lynis — instalar, auditar y gestionar",
|
||||
"optionDescription": "Instala el último Lynis desde el repo oficial de CISOfy en GitHub (no el paquete más antiguo de Debian), ejecuta auditorías del sistema con puntuación de hardening y actualiza vía git pull."
|
||||
},
|
||||
"componentStatus": {
|
||||
"heading": "Estado de componentes",
|
||||
"body": "Ambos instaladores registran su estado en <code>/usr/local/share/proxmenux/components_status.json</code> bajo la categoría <code>security</code>. ProxMenux usa este archivo para decidir si mostrar el menú de instalar o el de gestionar en ejecuciones sucesivas, y los mismos datos alimentan los paneles en el Monitor de ProxMenux cuando está presente."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Lynis | ProxMenux Documentation",
|
||||
"description": "Instala Lynis desde el repositorio oficial de CISOfy en GitHub (siempre el último), ejecuta una auditoría del sistema con puntuación de hardening 0–100, actualiza vía git pull. De solo lectura por diseño — nunca modifica el sistema.",
|
||||
"ogTitle": "Lynis | ProxMenux Documentation",
|
||||
"ogDescription": "Instala y ejecuta el auditor de seguridad Lynis en Proxmox VE. Instalación desde GitHub upstream, auditoría, actualización."
|
||||
},
|
||||
"header": {
|
||||
"title": "Lynis",
|
||||
"description": "Clona el último Lynis desde el repositorio oficial de CISOfy en GitHub, lo expone como /usr/local/bin/lynis y ofrece acciones de ejecutar auditoría / actualizar / reinstalar / desinstalar desde el menú. Auditor de solo lectura por diseño — nunca modifica el sistema, solo reporta.",
|
||||
"section": "Seguridad"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué hace",
|
||||
"body": "Instala Lynis (el auditor de seguridad de código abierto de CISOfy) desde GitHub upstream en <code>/opt/lynis</code> y crea un wrapper en <code>/usr/local/bin/lynis</code> para que esté en tu <code>PATH</code>. Detecta una instalación existente al arrancar y muestra un menú de gestión (auditoría / actualizar / reinstalar / eliminar) en su lugar."
|
||||
},
|
||||
"manageMenu": {
|
||||
"heading": "Menú de gestión (tras la instalación)",
|
||||
"intro": "Una vez instalado Lynis, cada invocación posterior abre el menú de gestión en lugar de volver a ejecutar el instalador. Desde aquí lanzas una auditoría, actualizas vía git pull, reinstalas o desinstalas:",
|
||||
"imageAlt": "Menú de gestión de Lynis con opciones de auditoría, actualizar, reinstalar y eliminar"
|
||||
},
|
||||
"whyUpstream": {
|
||||
"heading": "Por qué GitHub upstream, no apt",
|
||||
"intro": "Debian entrega Lynis vía apt, pero el paquete suele ir varias versiones mayores por detrás de upstream. Los controles más nuevos, los arreglos para nuevos vectores de ataque y las recomendaciones refinadas solo aterrizan en el repo de GitHub. El propio Lynis es un script de shell autocontenido — sin compilación, sin dependencias más allá de <code>git</code> para la instalación — así que clonar el repo es el método de instalación canónico recomendado por la propia CISOfy.",
|
||||
"headerSource": "Origen",
|
||||
"headerPath": "Ruta de instalación",
|
||||
"headerUpdate": "Método de actualización",
|
||||
"headerFresh": "Frescura de versión",
|
||||
"rows": [
|
||||
{
|
||||
"sourceRich": "<strong>ProxMenux (este script)</strong>",
|
||||
"path": "/opt/lynis/",
|
||||
"update": "git pull (desde el menú)",
|
||||
"fresh": "Última versión upstream"
|
||||
},
|
||||
{
|
||||
"sourceRich": "<strong>Debian apt</strong>",
|
||||
"path": "/usr/bin/lynis",
|
||||
"update": "apt upgrade",
|
||||
"fresh": "A menudo meses / años por detrás"
|
||||
}
|
||||
]
|
||||
},
|
||||
"install": {
|
||||
"heading": "Cómo funciona la instalación",
|
||||
"node1Label": "github.com/CISOfy/lynis",
|
||||
"node1Detail": "git clone\n(instala git primero si falta)",
|
||||
"node2Label": "/opt/lynis/",
|
||||
"node2Detail": "repo completo\nincluyendo script ./lynis",
|
||||
"node3Label": "/usr/local/bin/lynis",
|
||||
"node3Detail": "wrapper:\ncd /opt/lynis && ./lynis $@",
|
||||
"outro": "El wrapper es obligatorio — Lynis insiste en ejecutarse desde su propio directorio porque carga rutas relativas para plugins y datos de perfil. El wrapper oculta ese detalle para que <code>lynis audit system</code> simplemente funcione desde cualquier sitio."
|
||||
},
|
||||
"detection": {
|
||||
"heading": "Rutas de detección",
|
||||
"intro": "Antes de mostrar el menú, el script comprueba tres ubicaciones para decidir si Lynis ya está presente:",
|
||||
"items": [
|
||||
"<code>/usr/local/bin/lynis</code> — wrapper instalado por ProxMenux",
|
||||
"<code>/opt/lynis/lynis</code> — ruta directa (por si el wrapper se eliminó)",
|
||||
"<code>/usr/bin/lynis</code> — versión instalada por apt, si el usuario la instaló así anteriormente"
|
||||
],
|
||||
"outro": "Si se encuentra cualquiera de estas, se abre el menú de gestión. El script <strong>no</strong> desinstala un Lynis instalado por apt — solo el que él mismo gestiona (<code>/opt/lynis</code> + el wrapper)."
|
||||
},
|
||||
"audit": {
|
||||
"heading": "Ejecutar una auditoría",
|
||||
"intro": "Desde el menú de gestión, elige <strong>Ejecutar auditoría de seguridad ahora</strong>. Esto equivale a ejecutar:",
|
||||
"code": "lynis audit system --no-colors",
|
||||
"outro": "La auditoría tarda de 30 segundos a unos minutos según el tamaño del host. La salida fluye directamente al terminal — no hay spinner. Lynis imprime secciones por cada categoría de control, marcando cada test como <ok>[ OK ]</ok>, <warn>[ WARNING ]</warn> o <sugg>[ SUGGESTION ]</sugg>. El resumen al final tiene los números titulares:",
|
||||
"summary": "================================================================================\n\n Lynis security scan details:\n\n Hardening index : 76 [############ ]\n Tests performed : 247\n Plugins enabled : 0\n\n Components:\n - Firewall [V]\n - Malware scanner [X]\n\n Lynis modules:\n - Compliance status [?]\n - Security audit [V]\n - Vulnerability scan [V]\n\n================================================================================"
|
||||
},
|
||||
"report": {
|
||||
"heading": "Leer el informe",
|
||||
"intro": "Las dos secciones importantes son <strong>Warnings</strong> (cosas que deberías arreglar pronto) y <strong>Suggestions</strong> (recomendaciones para mejorar el hardening). Cada item lleva un ID de control como <code>SSH-7408</code> — útil al buscar en la documentación de Lynis la justificación y el arreglo.",
|
||||
"headerMarker": "Marcador",
|
||||
"headerMeaning": "Significado",
|
||||
"headerAction": "Acción",
|
||||
"rows": [
|
||||
{
|
||||
"markerRich": "<strong>OK</strong>",
|
||||
"meaning": "Test superado",
|
||||
"action": "Nada"
|
||||
},
|
||||
{
|
||||
"markerRich": "<strong>WARNING</strong>",
|
||||
"meaning": "Problema real, se recomienda arreglarlo",
|
||||
"action": "Lee la descripción del control, planea un arreglo"
|
||||
},
|
||||
{
|
||||
"markerRich": "<strong>SUGGESTION</strong>",
|
||||
"meaning": "Mejora de hardening disponible",
|
||||
"action": "Aplica si encaja en tu modelo de amenazas"
|
||||
}
|
||||
],
|
||||
"outro": "El informe completo y los datos legibles por máquina se escriben en <code>/var/log/lynis.log</code> y <code>/var/log/lynis-report.dat</code> por el propio Lynis."
|
||||
},
|
||||
"pairFail2ban": {
|
||||
"title": "Combina con Fail2Ban",
|
||||
"body": "SSH-7408 (MaxAuthTries) es uno de los warnings más comunes. Instalar <link>Fail2Ban</link> desde ProxMenux lo limpia automáticamente porque el instalador establece <code>MaxAuthTries=3</code> como parte de su paso de hardening de SSH. Vuelve a ejecutar Lynis después para confirmar que el warning ha desaparecido."
|
||||
},
|
||||
"update": {
|
||||
"heading": "Actualizar Lynis",
|
||||
"body": "Desde el menú de gestión, <strong>Actualizar Lynis a la última versión</strong> ejecuta <code>git pull --quiet</code> dentro de <code>/opt/lynis</code>. Si el directorio existe pero no es un checkout de Git (p. ej. alguien copió los archivos a mano), el script recae en una reinstalación completa."
|
||||
},
|
||||
"reinstall": {
|
||||
"heading": "Reinstalar / desinstalar",
|
||||
"headerAction": "Acción",
|
||||
"headerWhat": "Qué hace",
|
||||
"rows": [
|
||||
{
|
||||
"actionRich": "<strong>Reinstalar</strong>",
|
||||
"whatRich": "Elimina <code>/opt/lynis</code>, vuelve a clonar desde GitHub, recrea el wrapper. Úsalo si el checkout local está corrupto."
|
||||
},
|
||||
{
|
||||
"actionRich": "<strong>Eliminar</strong>",
|
||||
"whatRich": "Borra <code>/opt/lynis</code> y <code>/usr/local/bin/lynis</code>. Los logs en <code>/var/log/lynis*</code> se mantienen (son historial de auditoría). Un Lynis instalado por apt en <code>/usr/bin/lynis</code> se deja sin tocar."
|
||||
}
|
||||
]
|
||||
},
|
||||
"cli": {
|
||||
"heading": "Opciones CLI útiles",
|
||||
"intro": "Una vez instalado, Lynis se puede invocar directamente desde un shell con opciones extra no expuestas por el menú:",
|
||||
"code": "lynis show version # version + build date\nlynis show commands # list every available command\nlynis show details TEST-ID # explain a specific control\nlynis audit system --quick # skip slow tests (e.g. malware scan)\nlynis audit system --pentest # treat host as untrusted (more aggressive)\nlynis update info # check if a newer Lynis is available\n\n# Filter the report log for just the warnings\ngrep \"Warning\" /var/log/lynis.log\n\n# Same, for suggestions only\ngrep \"Suggestion\" /var/log/lynis.log"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"cloneTitle": "git clone falla durante la instalación",
|
||||
"cloneBody": "El host necesita acceso a red y DNS para alcanzar <code>github.com</code>. Desde una consola: <code>curl -sI https://github.com</code> y <code>git ls-remote https://github.com/CISOfy/lynis.git</code> revelarán el error real (DNS, TLS, proxy, URL del repo). Si se requiere un proxy, establece <code>https_proxy</code> en el entorno antes de volver a ejecutar el menú.",
|
||||
"notFoundTitle": "lynis: command not found tras la instalación",
|
||||
"notFoundIntro": "El wrapper en <code>/usr/local/bin/lynis</code> no se creó o se eliminó. Arreglo más rápido: reinstalar desde el menú. Arreglo manual:",
|
||||
"notFoundCode": "cat > /usr/local/bin/lynis <<'EOF'\n#!/bin/bash\ncd /opt/lynis && ./lynis \"$@\"\nEOF\nchmod +x /usr/local/bin/lynis",
|
||||
"sshTitle": "La auditoría imprime \"Warning: Test SSH-7408 — MaxAuthTries set incorrectly\"",
|
||||
"sshIntro": "El demonio SSH permite demasiados intentos de autenticación por conexión. O bien instala <link>Fail2Ban</link> desde ProxMenux (que establece <code>MaxAuthTries=3</code> automáticamente) o edita <code>/etc/ssh/sshd_config</code> a mano:",
|
||||
"sshCode": "sed -i 's/^#?MaxAuthTries.*/MaxAuthTries 3/' /etc/ssh/sshd_config\nsystemctl reload sshd",
|
||||
"scoreTitle": "La puntuación bajó tras una actualización de Proxmox",
|
||||
"scoreBody": "Ejecuta <code>lynis update info</code> primero — una actualización de Lynis puede haber añadido controles nuevos que marcan configuración existente. Actualiza Lynis desde el menú, vuelve a auditar y atiende los nuevos hallazgos."
|
||||
},
|
||||
"files": {
|
||||
"heading": "Archivos escritos",
|
||||
"code": "/opt/lynis/ # full Lynis git checkout\n/usr/local/bin/lynis # wrapper script (cd + exec)\n/var/log/lynis.log # human-readable audit log (Lynis itself)\n/var/log/lynis-report.dat # machine-readable report (Lynis itself)"
|
||||
},
|
||||
"sample": {
|
||||
"heading": "Informe de ejemplo",
|
||||
"intro": "ProxMenux Monitor empaqueta cada ejecución de Lynis en un PDF de varias páginas disponible desde la <link>pestaña de Seguridad</link> en el panel. La primera página es el resumen ejecutivo — puntuación de hardening, info del sistema, vista general de la postura de seguridad. Las páginas siguientes listan cada warning con explicación y cada sugerencia rankeada por impacto, más el inventario de paquetes usado durante la auditoría.",
|
||||
"imageAlt": "Primera página del PDF del Lynis Security Audit Report — resumen ejecutivo con Hardening Index 71/100, bloque de información del sistema y vista general de la postura de seguridad con firewall, escáner de malware y recuento de paquetes instalados",
|
||||
"captionPrefix": "Primera página de un informe de ejemplo. El PDF completo (",
|
||||
"captionLink": "ejemplo",
|
||||
"captionSuffix": ") continúa con warnings detallados, sugerencias y la lista de paquetes instalados.",
|
||||
"cli": "En el lado CLI los mismos datos están en <code>/var/log/lynis-report.dat</code> (archivo plano legible por máquina) y <code>/var/log/lynis.log</code> (log de ejecución legible por humanos). El PDF lo genera bajo demanda ProxMenux Monitor — ejecutar <code>lynis</code> desde la línea de comandos no produce uno."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/monitor/dashboard/security",
|
||||
"label": "ProxMenux Monitor → pestaña de Seguridad",
|
||||
"tail": " — ejecuta la auditoría, navega informes históricos y descarga el PDF directo desde el panel."
|
||||
},
|
||||
{
|
||||
"href": "/docs/security/fail2ban",
|
||||
"label": "Fail2Ban",
|
||||
"tailRich": " — implementa la protección contra fuerza bruta SSH que Lynis recomienda."
|
||||
},
|
||||
{
|
||||
"href": "/docs/security",
|
||||
"label": "Resumen de Seguridad",
|
||||
"tail": " — volver al resumen de la sección."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "HTTPS para ProxMenux Monitor — certificado del host Proxmox o rutas personalizadas | ProxMenux",
|
||||
"description": "Sirve ProxMenux Monitor sobre HTTPS usando o bien el certificado del host Proxmox (autodetectado, incluyendo el certificado Let's Encrypt subido vía la pestaña ACME de Proxmox) o un certificado personalizado en cualquier ruta del disco.",
|
||||
"ogTitle": "HTTPS para ProxMenux Monitor — certificado del host Proxmox o personalizado",
|
||||
"ogDescription": "Habilita HTTPS en el puerto 8008 con el certificado del host Proxmox o cualquier par .pem / .key personalizado."
|
||||
},
|
||||
"header": {
|
||||
"title": "HTTPS para ProxMenux Monitor",
|
||||
"description": "Activa HTTPS para el Monitor (puerto 8008) usando o bien el certificado del host Proxmox que el Monitor autodetecta, o un certificado personalizado ubicado en cualquier sitio del disco. La opción de Proxmox elige de forma transparente el certificado subido por ACME cuando está presente, así que un certificado Let's Encrypt gestionado por la UI de Proxmox se reutiliza sin un trabajo de renovación extra.",
|
||||
"section": "Seguridad"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Qué cubre esta página",
|
||||
"body": "Cómo cambiar el Monitor de HTTP a HTTPS en el panel Settings → Security, a qué apunta realmente cada fuente de certificado en disco, cómo se comporta la opción de Proxmox cuando el host tiene un certificado Let's Encrypt y cómo establecer rutas personalizadas si gestionas certificados fuera de Proxmox."
|
||||
},
|
||||
"wheresetting": {
|
||||
"heading": "Dónde vive el ajuste",
|
||||
"body": "Abre el Monitor y ve a <strong>Settings → Security → HTTPS / SSL</strong>. El panel muestra el estado actual (HTTP o HTTPS), y en un host sin HTTPS aún lista las fuentes de certificado que el Monitor ha podido detectar.",
|
||||
"imageAlt": "Panel Settings → Security → HTTPS / SSL en el Monitor mostrando el estado HTTPS desactivado, el certificado de Proxmox autodetectado (subject, issuer, expiry) y la opción Use Custom Certificate",
|
||||
"caption": "Panel Settings → Security → HTTPS / SSL antes de la activación. El Monitor saca a la luz el certificado que el propio Proxmox está usando y lo ofrece como una fuente de un solo clic."
|
||||
},
|
||||
"twoways": {
|
||||
"heading": "Dos formas de habilitar HTTPS",
|
||||
"proxmox": {
|
||||
"title": "Usar el certificado de Proxmox",
|
||||
"summary": "Un clic. El Monitor reutiliza el certificado que el propio Proxmox VE sirve en el puerto 8006.",
|
||||
"items": [
|
||||
"Autodetectado — no hay ruta que teclear",
|
||||
"Elige el certificado subido por ACME si está presente, recae en el self-signed por defecto",
|
||||
"La renovación pasa por Proxmox; el Monitor sigue automáticamente en el siguiente arranque"
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"title": "Usar un certificado personalizado",
|
||||
"summaryRich": "Apunta el Monitor a un par <code>.pem</code> / <code>.key</code> en cualquier sitio del disco.",
|
||||
"items": [
|
||||
"Solo rutas absolutas (el proceso del Monitor debe poder leer ambos)",
|
||||
"Útil cuando los certificados vienen de <code>certbot</code>, <code>acme.sh</code> o un wildcard",
|
||||
"La renovación es tuya — reinicia el servicio del Monitor tras que el archivo cambie"
|
||||
]
|
||||
}
|
||||
},
|
||||
"proxmoxCert": {
|
||||
"heading": "Certificado de Proxmox — a qué apunta realmente",
|
||||
"intro": "Proxmox VE mantiene dos pares de certificado en <code>/etc/pve/local/</code>:",
|
||||
"table": {
|
||||
"headers": {
|
||||
"file": "Archivo",
|
||||
"origin": "Origen",
|
||||
"when": "Cuándo lo usa el Monitor"
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"fileRich": "<code>pveproxy-ssl.pem</code><br /><code>pveproxy-ssl.key</code>",
|
||||
"originRich": "Certificado personalizado subido vía la UI de Proxmox — incluyendo el certificado Let's Encrypt emitido en <em>Datacenter → Node → Certificates → ACME</em>.",
|
||||
"when": "Preferido siempre que existan ambos archivos. El Monitor seguirá el certificado que el propio Proxmox está sirviendo."
|
||||
},
|
||||
{
|
||||
"fileRich": "<code>pve-ssl.pem</code><br /><code>pve-ssl.key</code>",
|
||||
"originRich": "Certificado self-signed generado en el momento de la instalación por el PKI de Proxmox.",
|
||||
"whenRich": "Fallback cuando no hay <code>pveproxy-ssl.pem</code> presente."
|
||||
}
|
||||
]
|
||||
},
|
||||
"callout": {
|
||||
"title": "Misma prioridad que el propio Proxmox",
|
||||
"bodyRich": "<code>pveproxy</code> usa la misma regla de selección, así que elegir la opción de Proxmox en el Monitor siempre sirve el certificado que la UI web de Proxmox ya está sirviendo en el puerto 8006. Sin copias, sin pipeline de renovación aparte."
|
||||
}
|
||||
},
|
||||
"letsencrypt": {
|
||||
"heading": "Obtener un certificado Let's Encrypt vía Proxmox ACME",
|
||||
"intro": "Proxmox VE entrega su propio cliente ACME. Pulsar <em>\"Order Certificate Now\"</em> escribe el resultado en <code>/etc/pve/local/pveproxy-ssl.pem</code>, que es exactamente lo que el Monitor lee. La receta de cinco pasos de abajo es el mismo procedimiento que la <extlink1>guía oficial de Proxmox</extlink1> — destilada a los comandos que realmente necesitas ejecutar.",
|
||||
"prereqs": {
|
||||
"title": "Prerrequisitos",
|
||||
"items": [
|
||||
"El nodo tiene un nombre DNS real (no solo una IP) apuntándole.",
|
||||
"<strong>O bien</strong> puerto 80 alcanzable desde la internet pública (challenge HTTP-01, el más simple), <strong>o bien</strong> un proveedor de DNS con credenciales API (challenge DNS-01 — funciona detrás de NAT, soporta wildcards).",
|
||||
"Una dirección de email para la cuenta ACME."
|
||||
]
|
||||
},
|
||||
"step1": {
|
||||
"heading": "Paso 1 — Registrar la cuenta ACME",
|
||||
"introRich": "Reemplaza el email por el tuyo. El nombre de cuenta <code>default</code> es solo una etiqueta — puedes usar cualquier cadena.",
|
||||
"code": "pvenode acme account register default you@example.com",
|
||||
"afterRich": "Proxmox te pide aceptar los términos de servicio de Let's Encrypt. Tras eso la cuenta se persiste en <code>/etc/pve/priv/acme/</code> y la pestaña ACME en la GUI la mostrará."
|
||||
},
|
||||
"step2": {
|
||||
"heading": "Paso 2 — Elige un tipo de challenge",
|
||||
"http01Rich": "<strong>HTTP-01</strong> es el más fácil: está integrado, sin plugin extra. Let's Encrypt se conecta a <code>http://<your-host>/.well-known/acme-challenge/...</code> en el puerto 80, así que el puerto 80 debe estar abierto desde la internet pública a tu nodo — típicamente un port forward en tu router.",
|
||||
"dns01Rich": "<strong>DNS-01</strong> funciona sin exponer el puerto 80 (bueno para homelabs detrás de CG-NAT) y es la única opción para certificados wildcard. Añades un plugin DNS una vez con el token API de tu proveedor. Ejemplo con Cloudflare:",
|
||||
"code": "pvenode acme plugin add dns cf \\\n --api cloudflare \\\n --data CF_Token=YOUR_CLOUDFLARE_API_TOKEN",
|
||||
"outroRich": "Para otros proveedores (Gandi, OVH, AWS Route 53, etc.) consulta <code>pvenode acme plugin add dns --help</code> — Proxmox entrega <extlink2>todos los plugins DNS de acme.sh</extlink2>."
|
||||
},
|
||||
"step3": {
|
||||
"heading": "Paso 3 — Asocia el dominio a tu nodo",
|
||||
"http01Rich": "Para HTTP-01 (usa el plugin <code>standalone</code> integrado):",
|
||||
"code1": "pvenode config set --acme domains=host.example.com,account=default",
|
||||
"dns01": "Para DNS-01 con el plugin de Cloudflare del paso 2:",
|
||||
"code2": "pvenode config set --acmedomain0 domain=host.example.com,plugin=cf\npvenode config set --acme account=default",
|
||||
"wildcardRich": "¿Wildcard? Añade <code>domain=*.example.com</code> en una entrada <code>--acmedomainN</code> separada. Los wildcards requieren DNS-01."
|
||||
},
|
||||
"step4": {
|
||||
"heading": "Paso 4 — Pide el certificado",
|
||||
"code": "pvenode acme cert order",
|
||||
"afterRich": "La primera ejecución suele tardar 30–60 segundos mientras el challenge se propaga. En caso de éxito Proxmox escribe <code>/etc/pve/local/pveproxy-ssl.pem</code> + <code>.key</code>, reinicia <code>pveproxy</code> y un cron de renovación se programa automáticamente (los certificados Let's Encrypt son válidos 90 días; Proxmox los renueva a los 60)."
|
||||
},
|
||||
"step5": {
|
||||
"heading": "Paso 5 — Verifica el issuer",
|
||||
"code": "openssl x509 -in /etc/pve/local/pveproxy-ssl.pem -noout -issuer",
|
||||
"afterRich": "Debería imprimir un issuer empezando por <code>O = Let's Encrypt</code>. Si en su lugar pone <code>CN = Proxmox Virtual Environment</code> la orden falló y el archivo sigue siendo el certificado self-signed de PVE — vuelve a ejecutar <code>pvenode acme cert order --debug 1</code> para ver por qué."
|
||||
},
|
||||
"gui": {
|
||||
"title": "¿Prefieres la GUI? Los mismos cinco pasos",
|
||||
"bodyRich": "<em>Datacenter → ACME</em> registra la cuenta, <em>Datacenter → ACME → Plugins</em> añade el plugin DNS, <em>Node → Certificates → ACME</em> asocia el dominio y <em>Order Certificates Now</em> ejecuta el paso 4. Los comandos CLI de arriba son útiles para scriptar y para setups headless / solo CLI."
|
||||
}
|
||||
},
|
||||
"switchToHttps": {
|
||||
"heading": "Cambiar el Monitor a HTTPS",
|
||||
"bodyRich": "Una vez que <code>/etc/pve/local/pveproxy-ssl.pem</code> está firmado por Let's Encrypt, el lado del Monitor es un clic: abre <strong>Settings → Security → HTTPS / SSL</strong>, confirma que el issuer mostrado en el panel del certificado detectado pone <em>Let's Encrypt</em> (y no la CA local de Proxmox) y pulsa <strong>Use Proxmox Certificate</strong>. El servicio del Monitor reinicia y la siguiente carga del navegador es HTTPS en el puerto 8008 — sin warning de certificado, ya que la cadena está confiada públicamente."
|
||||
},
|
||||
"custom": {
|
||||
"heading": "Certificado personalizado — cuándo usarlo",
|
||||
"intro": "Pulsa <strong>Use Custom Certificate</strong> para introducir dos rutas absolutas:",
|
||||
"items": [
|
||||
"<strong>Certificado</strong> — cadena completa en PEM (<code>.pem</code> o <code>.crt</code>).",
|
||||
"<strong>Clave privada</strong> — clave correspondiente en PEM (<code>.key</code>)."
|
||||
],
|
||||
"outro": "Ambos archivos los lee el proceso del Monitor al arrancar. Asegúrate de que se mantengan legibles por el usuario con el que corre la unidad systemd (root por defecto). Ubicaciones comunes cuando ACME se gestiona fuera de Proxmox:",
|
||||
"code": "# certbot\n/etc/letsencrypt/live/<your-host>/fullchain.pem\n/etc/letsencrypt/live/<your-host>/privkey.pem\n\n# acme.sh\n~/.acme.sh/<your-host>_ecc/fullchain.cer\n~/.acme.sh/<your-host>_ecc/<your-host>.key",
|
||||
"symlinkCallout": {
|
||||
"title": "Destinos de symlink vs. archivos",
|
||||
"bodyRich": "<code>certbot</code> almacena los archivos reales en <code>/etc/letsencrypt/archive/</code> y la ruta <code>live/</code> es un symlink. Apunta el Monitor al symlink de <code>live/</code>, no al archivo de <code>archive/</code> — así cada ciclo de renovación simplemente reescribe el destino del symlink y el Monitor toma el nuevo certificado en el siguiente arranque del servicio."
|
||||
}
|
||||
},
|
||||
"afterHttps": {
|
||||
"heading": "Tras habilitar HTTPS",
|
||||
"bodyRich": "Guardar el cambio escribe <code>/etc/proxmenux/ssl_config.json</code> y dispara un reinicio de la unidad systemd <code>proxmenux-monitor</code>. La pestaña del navegador perderá su conexión actual — recárgala en <code>https://<host>:8008/</code>. La primera carga con un certificado Let's Encrypt no debería mostrar warning; con el certificado self-signed de Proxmox el navegador requerirá una excepción, la misma que para el puerto 8006.",
|
||||
"reverse": {
|
||||
"heading": "Proxies inversos y webhooks",
|
||||
"bodyRich": "Cuando el Monitor cambia a HTTPS, las URLs de webhook de Proxmox VE registradas para notificaciones también pasan de <code>http://</code> a <code>https://</code> automáticamente. Las entradas de webhook existentes se reescriben la próxima vez que una regla de notificación se guarda o se vuelve a detectar, así que no hace falta edición manual de la configuración de notificaciones de Proxmox."
|
||||
}
|
||||
},
|
||||
"trustCa": {
|
||||
"heading": "Confiar en la CA self-signed de Proxmox",
|
||||
"intro1Rich": "Si prefieres mantener el certificado por defecto generado por Proxmox (sin ACME), puedes parar el warning del navegador importando la CA raíz del clúster en el almacén de confianza del SO o navegador. El Monitor seguirá autodetectando el mismo <code>/etc/pve/local/pveproxy-ssl.pem</code>; lo único que cambia es que el dispositivo que ve el panel ahora reconoce el issuer.",
|
||||
"intro2Rich": "El archivo de la CA vive en <code>/etc/pve/pve-root-ca.pem</code> en cada nodo. En un clúster la ruta está en el sistema de archivos compartido <code>pmxcfs</code>, así que todos los nodos comparten la misma raíz, y una sola importación cubre el datacenter entero. Cópialo a tu máquina:",
|
||||
"code": "scp root@<your-host>:/etc/pve/pve-root-ca.pem ./pve-root-ca.pem",
|
||||
"thenImport": "Después impórtalo en el lado del cliente:",
|
||||
"items": [
|
||||
"<strong>Linux (todo el sistema):</strong> <code>sudo cp pve-root-ca.pem /usr/local/share/ca-certificates/pve-root-ca.crt</code> seguido de <code>sudo update-ca-certificates</code>. Los navegadores que usan el almacén del sistema (Chromium, Edge) lo toman tras reiniciar; Firefox usa su propio almacén y necesita la importación manual de abajo.",
|
||||
"<strong>macOS:</strong> doble clic en el archivo <code>.pem</code>, se abre Keychain Access → añádelo al keychain del <em>Sistema</em> → establece <em>Trust → Always Trust</em>.",
|
||||
"<strong>Windows:</strong> clic derecho en el archivo → <em>Install Certificate</em> → colócalo en <em>Trusted Root Certification Authorities</em>.",
|
||||
"<strong>Firefox (cualquier SO):</strong> <em>Settings → Privacy y Security → Certificates → View Certificates → Authorities → Import</em>, marca <em>Trust this CA to identify websites</em>."
|
||||
],
|
||||
"standalone": {
|
||||
"title": "Nodos standalone fuera de un clúster",
|
||||
"bodyRich": "Cada host Proxmox no clusterizado tiene su propio <code>pve-root-ca.pem</code>. Si gestionas varios hosts standalone, repite la copia/importación para cada uno, o únelos a un clúster para que compartan una sola raíz."
|
||||
}
|
||||
},
|
||||
"disable": {
|
||||
"heading": "Deshabilitar HTTPS",
|
||||
"bodyRich": "Pulsa <strong>Disable HTTPS</strong> en el mismo panel. El servicio del Monitor reinicia de vuelta en HTTP plano — útil si un archivo de certificado personalizado se vuelve no legible y el servicio no vuelve a levantarse. No hay paso de desinstalación aparte; los propios archivos de certificado no se tocan.",
|
||||
"stateCallout": {
|
||||
"title": "Dónde vive el estado",
|
||||
"bodyRich": "<code>/etc/proxmenux/ssl_config.json</code> almacena las rutas de certificado activas y la fuente (<code>none</code>, <code>proxmox</code>, <code>custom</code>). Borrar el archivo equivale a deshabilitar HTTPS — en el siguiente arranque el Monitor recae en HTTP."
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user