{
"meta": {
"title": "Autentisering för Proxmox-panelen — 2FA, API-token, profil, omvänd proxy | ProxMenux Monitor",
"description": "Åtkomst och skydd för ProxMenux Monitor: första starten, lösenord med namn och avatar, profil, TOTP 2FA, API-token för skript, HTTPS, exempel för Nginx/Caddy/Traefik, granskningslogg och valfri Fail2Ban-jail.",
"ogTitle": "Proxmox-autentisering — 2FA, API-token, omvänd proxy",
"ogDescription": "Skydda ProxMenux Monitor med lösenord, TOTP 2FA, API-token, HTTPS, exempel för omvänd proxy och valfri Fail2Ban-jail.",
"twitterTitle": "Proxmox Dashboardautentisering | ProxMenux Monitor",
"twitterDescription": "Lösenord + TOTP 2FA, API tokens, HTTPS, Nginx/Caddy/Traefik snippets och revisionslogg."
},
"header": {
"title": "Åtkomst och autentisering",
"description": "Åtkomst till panelen, första starten och skyddslager: lösenord och TOTP, JWT-sessioner, API-token, HTTPS, omvänd proxy, Secure Gateway och valfri Fail2Ban-jail.",
"section": "ProxMenux-övervakning"
},
"intro": {
"title": "Autentisering är valfritt",
"body": "Vid första starten visas dialogen ”Skydda instrumentpanelen?” med knapparna Ja, ange lösenord och Nej, fortsätt utan skydd. Det andra alternativet lämnar API-ändpunkterna öppna på TCP 8008. Det kan fungera i ett isolerat labbnätverk men är farligt i andra miljöer. Tvåfaktorsautentisering (2FA) ingår inte i det första valet, utan ställs in senare på fliken Säkerhet när ett lösenord har angetts."
},
"reaching": {
"heading": "Öppna instrumentpanelen",
"intro": "ProxMenux Monitor binder till 0.0.0.0:8008. Det finns tre vanliga sätt att nå den:",
"outro": "Direktåtkomst motsvarar standardenheten för systemd. Omvänd proxy och Secure Gateway beskrivs nedan. Förtroende för klient-IP i X-Forwarded-For kräver PROXMENUX_TRUST_PROXY=1 och en proxy du kontrollerar. Enbart förekomsten av X-Forwarded-Proto eller X-Forwarded-Host aktiverar inte proxyförtroende. På portarna 80/443 använder frontend relativa /api/*-URL:er; på alla andra portar anropas port 8008 på samma värdnamn."
},
"firstLaunch": {
"heading": "Första starten",
"intro": "När panelen öppnas första gången anropar frontend GET /api/auth/status. Om konfigurationen aldrig har sparats (configured: false) visas ”Skydda instrumentpanelen?” med två val:",
"imageAlt": "Dialogen ”Skydda instrumentpanelen?” med val att ange lösenord eller fortsätta utan skydd",
"imageCaption": "Första valet mellan lösenordsskydd och inget skydd. Visas igen efter nyinstallation eller avaktiverad autentisering i inställningarna.",
"headerButton": "Knapp",
"headerWhat": "Vad händer",
"headerApi": "API-anrop",
"rows": [
{
"button": "Ja, ange lösenord",
"what": "Öppnar ett formulär med obligatoriskt användarnamn och lösenord, samt valfritt visningsnamn och avatarbild. Aktiverar autentisering i auth.json med enabled: true och returnerar ett JWT för inloggning. Valfria profilfält sparas med efterföljande anrop enligt nedan.",
"api": "POST /api/auth/setup"
},
{
"button": "Nej, fortsätt utan skydd",
"what": "Anger declined: true i auth.json. API-ändpunkterna är öppna tills du aktiverar skyddet i inställningarna.",
"api": "POST /api/auth/skip"
}
],
"twofaCalloutTitle": "2FA är konfigurerad senare, inte här",
"twofaCalloutBody": "Den första dialogen gäller endast lösenordsskyddet. Tvåfaktorsautentisering (TOTP) ställs sedan in på fliken Säkerhet efter inloggning med lösenord. Hela anvisningen finns längre ned.",
"createTitle": "Skapa den första användaren",
"createIntro": "Ja, ange lösenord öppnar ett formulär som skapar kontot och kan fylla i profilen, så att avataren visas direkt när du sparar. Fälten är:",
"headerField": "Fält",
"headerRequired": "Krav",
"headerNotes": "Anteckningar",
"fieldRows": [
{
"field": "Användarnamn",
"required": "Ja",
"notes": "Identifierare för inloggning. Kan inte ändras i gränssnittet; du måste redigera auth.json direkt."
},
{
"field": "Lösenord",
"required": "Ja",
"notes": "Minst 10 tecken från minst 3 av 4 kategorier: gemener, versaler, siffror och symboler. Enkla lösenord som password, 12345678 och proxmenux avvisas. Samma regler gäller på servern och kan inte kringgås med curl."
},
{
"field": "Visningsnamn",
"required": "Nej",
"notes": "Namn i menyn i sidhuvudet och på profilsidan. Om det är tomt används användarnamnet. Kan ändras via Avatar → Visa profil."
},
{
"field": "Avatarbild",
"required": "Nej",
"notes": "PNG, JPEG, WebP eller GIF upp till 2 MB. Visas i en cirkel i sidhuvudet och profilen. Utan bild visas första bokstaven i visningsnamnet eller användarnamnet på färgad bakgrund. Bilden kan senare laddas upp, ersättas eller tas bort i profilen."
}
],
"createImageAlt": "Kontoformulär med obligatoriskt användarnamn och lösenord samt valfritt visningsnamn och avatar",
"createImageCaption": "Formulär vid första starten. Namn och avatar är valfria; utan dem skapas kontot med en bokstav i en cirkel i sidhuvudet.",
"saveCalloutTitle": "En sparning, upp till tre API-anrop",
"saveCalloutBody": "Formuläret skickar först POST /api/auth/setup med användarnamn och lösenord. Det nya JWT:t används sedan till PUT /api/auth/profile för namn och POST /api/auth/profile/avatar för bilden, om de angetts. Profilfel avbryter inte kontot; profilen kan slutföras senare.",
"avatarTitle": "Avatar meny och profilsida",
"avatarBody1": "Efter konfigureringen visas avataren uppe till höger, bredvid temaväljaren. Menyn öppnar profil och Säkerhet och har åtgärden Logga ut. Du kan även logga ut från Säkerhet.",
"avatarBody2": "Profilen visar avatar, skrivskyddat användarnamn och redigerbart visningsnamn. Uppladdningar, ersättningar och borttagningar av avataren är atomära; sidhuvudet uppdateras automatiskt efter en lyckad ändring. Kontoformuläret och profilen använder samma ändpunkter som beskrivs nedan.",
"profileImageAlt": "Profil med avatarförhandsvisning, knappar för uppladdning, ersättning och borttagning, skrivskyddat användarnamn och redigerbart visningsnamn",
"profileImageCaption": "Profilsidan. Användarnamnet är skrivskyddat; visningsnamn och avatar kan ändras här utan att öppna Säkerhet.",
"headerEndpoint": "Ändpunkt",
"headerEpWhat": "Vad det gör",
"endpointRows": [
{
"endpoint": "GET /api/auth/profile",
"what": "Returnerar användarnamn, visningsnamn och avatarstatus (has_avatar, avatar_mtime)."
},
{
"endpoint": "PUT /api/auth/profile",
"what": "Uppdaterar visningsnamnet. Begärans innehåll: '{' \"display_name\": \"...\" '}'."
},
{
"endpoint": "GET /api/auth/profile/avatar",
"what": "Returnerar avatarbilden som PNG / JPEG / WebP / GIF med rätt innehållstyp. Kräver Bearer-headern; frontend hämtar en blob och skapar en lokal objekt-URL för visning."
},
{
"endpoint": "POST /api/auth/profile/avatar",
"what": "Laddar upp en ny avatar, högst 2 MB. Innehållstypen ska motsvara filen. Den gamla bilden ersätts atomärt."
},
{
"endpoint": "DELETE /api/auth/profile/avatar",
"what": "Tar bort avataren. Sidhuvudet visar åter en bokstav i en färgad cirkel."
}
],
"reversibleTitle": "Du kan aktivera skyddet senare",
"reversibleBody": "Efter Nej, fortsätt utan skydd visas inte välkomstdialogen igen. Aktivera autentisering på fliken Säkerhet eller redigera /root/.config/proxmenux-monitor/auth.json, ta bort flaggan declined och starta om tjänsten."
},
"password": {
"heading": "Lösenordsautentisering",
"intro": "Efter konfigureringen kräver skyddade API-anrop ett JWT i Authorization: Bearer <token>:",
"items": [
"Sessionstoken: giltigt i 24 timmar, utfärdas av POST /api/auth/login.",
"API-token för integrationer: giltigt i 365 dagar, utfärdas av POST /api/auth/generate-api-token. Se nästa avsnitt."
],
"loginImageAlt": "Inloggningsskärm som visas efter autentisering är konfigurerad - användarnamn och lösenordsfält",
"loginImageCaption": "När autentiseringen är konfigurerad börjar varje besök på instrumentbrädan här. Med 2FA aktiverad ber skärmen om 6-siffrig kod i ett andra steg efter att lösenordet accepteras.",
"loginFlowTitle": "Inloggningsflöde",
"twofaIntro": "Med 2FA returnerar första anropet requires_totp: true. Upprepa det med den sexsiffriga koden:",
"publicTitle": "Offentliga slutpunkter (utan token)",
"publicIntro": "Inloggning, autentiseringsstatus, första konfigurationen och den lätta slutpunkten /api/system-info är offentliga:",
"publicItems": [
"/api/auth/login och /api/auth/status är offentliga. /api/auth/setup skapar första kontot och vägrar skriva över befintliga inloggningsuppgifter.",
"/api/system-info är en offentlig ändpunkt med grundläggande systeminformation, inklusive health.status. Den kräver ingen token. Även /api/auth/status är offentlig och passar för en tillgänglighetskontroll."
],
"cryptoTitle": "Kryptografi och lagring",
"cryptoIntro": "ProxMenux Monitor har öppen källkod. Här beskrivs skyddet för uppgifter på värden så att du kan bedöma det innan du väljer att lita på det. Algoritmerna används i scripts/auth_manager.py; avsnittet beskriver koden.",
"headerAsset": "Uppgift",
"headerAlgo": "Algoritm",
"headerWhere": "Lagringsplats",
"cryptoRows": [
{
"asset": "Lösenord",
"algorithm": "PBKDF2-HMAC-SHA256 med ett slumpmässigt salt per lösenord och många iterationer enligt OWASP 2023+. Lagras som pbkdf2_sha256$<iters>$<salt>$<hash>.",
"where": "auth.json → password_hash"
},
{
"asset": "Sessions-JWT / API-JWT",
"algorithm": "HS256-signering med en hemlighet per installation, skapad vid första starten (secrets.token_urlsafe, ≥48 byte). Token innehåller iss=proxmenux-monitor och aud=api; varje begäran verifierar signaturen med den aktuella hemligheten.",
"where": "Hemlighet: auth.json → jwt_secret. JWT själv: bara på klienten."
},
{
"asset": "Metadata för API-token",
"algorithm": "JWT:ts SHA-256-hash lagras med fingeravtrycket signed_with av använt jwt_secret. Det gör att metadata kan visas och token upptäckas efter byte av signeringshemlighet.",
"where": "auth.json → api_tokens[]"
},
{
"asset": "TOTP-hemlighet för 2FA",
"algorithm": "Standard-TOTP (RFC 6238) med base32-kodad hemlighet. De åtta reservkoderna är engångskoder och lagras som SHA-256-hashar.",
"where": "auth.json → totp_secret + backup_codes[]"
},
{
"asset": "Återkallelser",
"algorithm": "Vid återkallelse läggs tokenets SHA-256-hash i en spärrlista som läses vid varje verifiering. En minnescache på cirka 30 s undviker upprepade diskläsningar.",
"where": "auth.json → revoked_tokens[]"
}
],
"authJsonTitle": "auth.json — innehåll och skydd",
"authJsonBody": "Autentiseringsuppgifterna finns i /root/.config/proxmenux-monitor/auth.json, med läge 0600 och ägare root. Filen innehåller PBKDF2-hashar och kryptografiska hemligheter (jwt_secret, totp_secret), aldrig lösenord i klartext. Kryptera mål för säkerhetskopiering eller replikering och lägg aldrig filen i versionshantering.",
"rotateTitle": "Byte av jwt_secret gör alla befintliga JWT ogiltiga",
"rotateBody": "Om auth.json återskapas eller återställs med en annan hemlighet ändras jwt_secret. Gamla sessions- och API-JWT misslyckas med \"Invalid or expired token\". Gränssnittet visar Ogiltigt — skapa på nytt. Återkalla och ersätt berörda token även i Home Assistant, skript och andra klienter.",
"recoverTitle": "Återställa ett förlorat lösenord",
"recoverIntro": "Lösenordsåterställning kräver skalåtkomst till värden. ProxMenux har en guidad återställning i konfigurationsmenyn så att du slipper redigera auth.json manuellt:",
"survivesTitle": "Vad överlever återställningen",
"survivesBody": "Den interaktiva inloggningen tas bort, men jwt_secret och registrerade api_tokens behålls. Home Assistant och andra skript kan fortsätta med samma token. För att börja om helt med en ny hemlighet, radera auth.json och starta om tjänsten. Alla gamla token blir då ogiltiga.",
"physicalTitle": "Krav på åtkomst till värden",
"physicalBody": "Kräver ett root-skal på värden. Den som kör menu som root styr redan hela maskinen; lösenordsåterställningen ger inga ytterligare rättigheter. Monitor-inloggningen skyddar därför inte mot någon som redan har root-åtkomst."
},
"twofa": {
"heading": "Tvåfaktorsautentisering (TOTP)",
"intro": "2FA lägger till en sexsiffrig kod som ändras var 30:e sekund på telefonen eller i lösenordshanteraren. Enbart lösenordet räcker då inte för inloggning. ProxMenux Monitor använder standardprotokollet TOTP (RFC 6238), som fungerar med autentiseringsappar.",
"pickTitle": "Välj en autentiseringsapp",
"pickIntro": "En befintlig TOTP-app kan användas här. Tabellen visar vanliga alternativ: vissa gratis, andra med abonnemang. Även plattformar och säkerhetskopiering skiljer sig.",
"headerApp": "App",
"headerPlatforms": "Plattformar",
"headerAppNotes": "Anteckningar",
"apps": [
{
"name": "Google Authenticator",
"href": "https://safety.google/authentication/",
"platforms": "iOS, Android",
"notes": "Vanligt val. Valfri molnsäkerhetskopiering via Google-kontot."
},
{
"name": "Microsoft Authenticator",
"href": "https://www.microsoft.com/en-us/security/mobile-authenticator-app",
"platforms": "iOS, Android",
"notes": "Säkerhetskopiering via Microsoft-konto. Hanterar även Microsofts pushmeddelanden för arbete."
},
{
"name": "Authy",
"href": "https://authy.com/",
"platforms": "iOS, Android",
"notes": "Krypterad synkronisering mellan enheter. Skrivbordsappen stöds inte längre sedan den 19 mars 2024."
},
{
"name": "Apple Passwords",
"href": "https://support.apple.com/guide/passwords/welcome/mac",
"platforms": "iOS, iPadOS, macOS, visionOS, Windows (via iCloud)",
"notes": "Inbyggd i Apples system; separat Passwords-app sedan iOS 18 / macOS Sequoia. Sparar TOTP tillsammans med lösenord och synkroniserar via iCloud-nyckelring."
},
{
"name": "Bitwarden",
"href": "https://bitwarden.com/",
"platforms": "iOS, Android, skrivbord, webbläsare",
"notes": "Öppen källkod. TOTP kan lagras tillsammans med lösenord i valvet. Det är bekvämt men håller inte faktorerna på separata enheter."
},
{
"name": "1Password",
"href": "https://1password.com/",
"platforms": "iOS, Android, skrivbord, webbläsare",
"notes": "Samma idé som Bitwarden - TOTP integrerad med lösenordsvalvet. Prenumeration."
},
{
"name": "Aegis Authenticator",
"href": "https://getaegis.app/",
"platforms": "Android",
"notes": "Öppen källkod. Krypterad säkerhetskopia på enheten under din kontroll. Inget moln eller konto krävs."
},
{
"name": "Raivo OTP",
"href": "https://raivo-otp.com/",
"platforms": "iOS, macOS",
"notes": "Öppen källkod. Valfri iCloud-synkronisering. Ett alternativ i Apples ekosystem som liknar Aegis."
},
{
"name": "Ente Auth",
"href": "https://ente.io/auth/",
"platforms": "iOS, Android, skrivbord, webb",
"notes": "Öppen källkod. Molnsynkronisering mellan enheter med totalsträckskryptering."
},
{
"name": "2FAS",
"href": "https://2fas.com/",
"platforms": "iOS, Android, webbläsartillägg",
"notes": "Öppen källkod. Valfri krypterad molnsäkerhetskopia; webbläsartillägget kan fylla i koder automatiskt."
},
{
"name": "FreeOTP+",
"href": "https://github.com/helloworld1/FreeOTPPlus",
"platforms": "Android",
"notes": "Vidareutveckling av FreeOTP för Android med öppen källkod samt import och export. Inget konto krävs."
}
],
"backupTitle": "Varför säkerhetskopior behövs",
"backupBody": "Om autentiseringsenheten försvinner, använd en sparad reservkod eller återställ appen från en säkerhetskopia som du ordnat i förväg. Molnsynkronisering och lokala exporter skiljer sig mellan appar; kontrollera att den valda metoden verkligen återställer TOTP-hemligheterna. Root-åtkomst på värden möjliggör också återställning enligt nedan. Spara en separat, säker kopia.",
"setupTitle": "Ställ in steg för steg från panelen",
"setupImageAlt": "2FA-inställning med QR-kod och återställningskoder",
"setupImageCaption": "Installationsdialogen för 2FA visar en QR-kod, en Base32-hemlighet för manuell inmatning och, efter verifieringen, åtta reservkoder för engångsbruk. Kopiera koderna innan dialogen stängs; de visas inte igen.",
"setupSteps": [
"Installera autentiseringsappen på din telefon (eller öppna din lösenordshanterare). En av apparna från tabellen ovan. Du behöver bara göra det en gång - samma app kommer att hålla koder för varje tjänst du skyddar.",
"Logga in på panelen med användarnamn och lösenord.",
"Öppna fliken Säkerhet i instrumentpanelens sidofält och klicka sedan på Aktivera 2FA och Starta installationen. Dialogen visar en QR-kod och den manuella nyckeln; de åtta reservkoderna visas när koden har verifierats.",
"Lägg till posten i autentiseringsappen:",
"Bekräfta med den aktuella sexsiffriga koden från appen i fältet \"Verifieringskod\" i installationsdialogen och skicka. Koden ändras var 30:e sekund; använd nästa om den hinner löpa ut medan du skriver.",
"Spara reservkoderna. Förvara efter verifieringen alla åtta säkert i en lösenordshanterare, krypterad anteckning eller säker papperskopia. Varje kod fungerar en gång om autentiseringsappen är otillgänglig.",
"Klart. 2FA är aktivt. Nästa inloggning frågar först efter lösenord och sedan den aktuella sexsiffriga koden."
],
"setupStep4Sub": [
"Enkel metod: välj Lägg till konto → Skanna QR-kod i appen och rikta kameran mot koden. Posten får automatiskt ett namn som ProxMenux Monitor (your-username) och visar en sexsiffrig kod som ändras var 30:e sekund.",
"Manuellt alternativ när skanning inte är möjlig, exempelvis på samma telefon: Lägg till konto → Ange inställningsnyckel. Välj ett namn som Proxmox Monitor, klistra in Base32-hemligheten, lämna Typ som Tidsbaserad och spara."
],
"testTitle": "Test innan du loggar ut",
"testBody": "Behåll den nuvarande sessionen och testa en ny inloggning i ett privat fönster omedelbart efter inställningen. Kontrollera serverns och telefonens klockor om koden nekas, innan du loggar ut från den fungerande sessionen. Om åtkomsten redan är förlorad, använd en reservkod eller redigera auth.json från värdens skal.",
"lostTitle": "Förlorad autentiseringsapp",
"lostIntro": "Tre återställningsmetoder, från minst till mest ingripande:",
"lostItems": [
"Använd en reservkod. Ange en av de åtta sparade koderna i TOTP-fältet. Den fungerar en gång; oanvända koder förblir giltiga. Öppna Säkerhet efter inloggningen, välj Inaktivera 2FA och sedan Aktivera 2FA för att få åtta nya koder.",
"Återställ appen från moln eller säkerhetskopia. Med inställd molnsynkronisering kan appen installeras och kontot öppnas på en ny enhet: Google, Microsoft, Authy, Apple Passwords via iCloud-nyckelring, Ente eller 2FAS. Med en exportfil från Aegis, Raivo eller FreeOTP+, installera appen och importera filen.",
"Stäng av 2FA från värdens skal. Om övriga metoder saknas, redigera /root/.config/proxmenux-monitor/auth.json som root via SSH eller konsol. Sätt totp_enabled till false, spara och starta om tjänsten:"
],
"lostShellOutro": "Du kan logga in med användarnamn + lösenord bara, sedan aktivera 2FA från Inställningar.",
"disableTitle": "Inaktivera 2FA",
"disableBody": "Öppna Säkerhet och välj Inaktivera 2FA. POST /api/auth/totp/disable kräver aktuellt lösenord och en giltig TOTP- eller reservkod. TOTP-hemligheten och reservkoderna tas bort. Ta även bort den gamla posten i autentiseringsappen.",
"rejectedTitle": "Den sexsiffriga koden nekas alltid",
"rejectedIntro": "TOTP är tidsbaserat. Serverns och telefonens klockor bör skilja mindre än cirka 30 s. Två kontroller:",
"rejectedItems": [
"Telefon: Inställningar → Datum och tid → aktivera automatisk / nätverkssynkronisering.",
"Proxmox-värd:timedatectl status ska visa \"System clock synchronized: yes\". Kör annars timedatectl set-ntp true och vänta en minut."
],
"rejectedOutro": "När klockorna är synkroniserade accepteras koden inom nästa 30-sekundersintervall."
},
"apiTokens": {
"heading": "API-token med lång giltighetstid",
"intro": "Sessioner löper ut efter 24 timmar. Skapa ett separat API-token giltigt i 365 dagar för Homepage, Home Assistant, Grafana eller Uptime Kuma. JWT:t använder samma signeringshemlighet; fältet token_name gör att det kan identifieras och återkallas separat.",
"imageAlt": "API-tokenlista med namn, prefix, datum för skapande och utgångsdatum",
"imageCaption": "Listan i inställningarna visar namn, prefix med de fyra sista tecknen för identifiering, skapande- och utgångsdatum samt återkallelse.",
"generateTitle": "Generera en token",
"generateIntro": "Från panelen:",
"generateSteps": [
"Öppna Säkerhet → API-åtkomsttoken.",
"Skriv ett beskrivande namn (t.ex. \"Home Assistant\").",
"Skriv in ditt lösenord. Om 2FA är på, även den nuvarande 6-siffriga koden.",
"Välj Generera token. Det visas endast en gång: kopiera direkt."
],
"generateCli": "Från kommandoraden:",
"useTitle": "Använd en token",
"revokeTitle": "Återkalla en token",
"revokeBody": "Varje rad har Återkalla, vilket lägger till hashen i revoked_tokens i auth.json. Tokenet nekas från nästa begäran.",
"cheatTitle": "Snabbguide för tokensäkerhet",
"cheatItems": [
"Spara token i integrationens lagring för hemligheter: Homepage secrets.yaml, Home Assistant !secret eller miljövariabler. Lägg dem aldrig i Git.",
"Ett token per integration, med integrationens namn. Återkalla det när integrationen tas bort.",
"Rotera varje 6-12 månader. Utgången är en hård gräns, inte en rekommendation."
],
"outro": "Lagringsråd och exempel: API-referens → Tokenhantering och Integrationer."
},
"https": {
"heading": "HTTPS",
"intro": "Två vägar till TLS:",
"items": [
"Omvänd proxy rekommenderas. Avsluta TLS på Nginx / Caddy / Traefik och vidarebefordra HTTP till Flask på port 8008. Exempel nedan.",
"Direkt HTTPS i AppImage. Ange certifikat via POST /api/ssl/configure (gränssnitt: Inställningar → SSL). HTTPS använder gevent.pywsgi med standardhanteraren; flask-sock hanterar WebSocket för WSS. Certifikatsökvägar sparas i SSL-konfigurationen."
],
"calloutTitle": "Direkt HTTPS begränsningar",
"calloutBody": "Monitor kan använda ett certifikat hanterat av Proxmox eller egna certifikatsfiler. Det utfärdar inte ACME-certifikat självt. Använd Proxmox ACME eller Caddy, Traefik eller Nginx för automatisk utfärdning och förnyelse, och se till att förnyade certifikat läses in."
},
"gateway": {
"heading": "Säker gateway (Tailscale)",
"intro": "En omvänd proxy möjliggör fjärråtkomst. Secure Gateway ger åtkomst utan att exponera TCP 8008: en Alpine-LXC kör Tailscale som undernätsrouter. Åtkomst till värdens LAN-IP beror på godkända rutter och åtkomstregler i tailnet.",
"calloutTitle": "Varför detta är bekvämt",
"calloutBody": "Använd LAN-adressen http://<proxmox-lan-ip>:8008 via godkänd rutt. Tailscales undernätsroutrar använder SNAT som standard. Monitor ser normalt gatewayens LAN-IP, inte klientens 100.x.y.z. Loggar och Fail2Ban identifierar därför den källadress som faktiskt når värden.",
"deployBody": "Välj LXC-lagring, klistra in en Tailscale-nyckel skapad på login.tailscale.com/admin/settings/keys, välj undernät och distribuera. LXC:n startas på cirka 30 sekunder och registreras i tailnet.",
"outro": "Distribution, undernätsrutter, Tailscale-ACL och Exit Node beskrivs i Panel → Säkerhet → Secure Gateway, där även guiden finns. Här beskrivs åtkomsten."
},
"proxy": {
"heading": "Konfigurationsexempel för omvänd proxy",
"intro": "Använd ett eget värdnamn, exempelvis monitor.example.com, vidarebefordrat till port 8008 på Proxmox-värden. Exemplen följer detta mönster. En undersökväg som example.com/proxmenux-monitor/ behöver anpassningar av frontend och proxy; att ta bort prefixet räcker inte.",
"nginxTitle": "Nginx",
"caddyTitle": "Caddy",
"traefikTitle": "Traefik (etiketter — Docker / Kubernetes)",
"subPathTitle": "Avancerat: distribution under en undersökväg",
"subPathBody": "Frontend saknar en inställd bas för undersökvägar och bygger API-anrop från roten med /api/*. Att ta bort ett prefix som example.com/proxmenux-monitor/ hanterar varken anropen eller alla frontendfiler. Använd ett eget värdnamn. Undersökvägar kräver samordnade ändringar och särskild testning."
},
"audit": {
"heading": "Granskningslogg",
"intro": "Misslyckade inloggningar och varningar om begränsning skrivs radvis till /var/log/proxmenux-auth.log. Denna logger registrerar inte lyckade inloggningar:",
"outro": "Följ loggen med tail -F /var/log/proxmenux-auth.log. Extra konfiguration för logrotate möjliggör rotation; Monitor gör den inte självt."
},
"fail2ban": {
"heading": "Valfritt: Fail2Ban-jail",
"calloutTitle": "Fail2Ban ingår inte i Monitor",
"calloutBody": "Fail2Ban är inte installerad av ProxMenux Monitor själv. Installera den via Säkerhet → Fail2Ban i menyn ProxMenux (eller med standardpaketet Debian). Utan den skriver monitorn fortfarande granskningsloggen ovan – den förbjuder helt enkelt inte återkommande brottslingar automatiskt.",
"intro": "ProxMenux-integrationen innehåller en jail [proxmenux] som:",
"items": [
"Läser /var/log/proxmenux-auth.log",
"Matchar authentication failure; rhost=<ip> mönster med ett dedikerat filter.",
"Blockerar normalt den berörda IP-adressen i kärnans brandvägg.",
"Flasks before_request-hook kontrollerar begäran mot spärrlistan, cachad i 30 s. Bakom en omvänd proxy kräver IP-blockering även PROXMENUX_TRUST_PROXY=1 och en kontrollerad proxy som anger tillförlitliga vidarebefordringshuvuden."
],
"outro": "Konfiguration, spärrtid och upplåsning: Säkerhet → Fail2Ban."
},
"troubleshoot": {
"heading": "Felsökning",
"noScreenTitle": "Den första lanseringsskärmen visas aldrig",
"noScreenBody": "Autentisering är redan inställd (configured: true) eller har hoppats över. För att börja om:",
"noScreenOutro": "Raderar autentisering, TOTP-hemligheter och API-token. Säkerhetskopiera auth.json först om du vill behålla dem.",
"tokenTitle": "HTTP 401 på varje begäran från en fungerande API token",
"tokenBody": "Token gick ut (365 d-gräns) eller kom in i revoked_tokens-listan. Skapa en ny i Inställningar och uppdatera integrationen. För att kontrollera:",
"tokenOutro": "Utgångna eller återkallade tokens returnerar '{'\"error\":\"Invalid or expired token\"'}'.",
"no2faTitle": "Kan inte logga in efter att 2FA aktiverats och appen saknas",
"no2faBody": "Ange en återställningskod i TOTP-fältet. Om ingen finns, redigera /root/.config/proxmenux-monitor/auth.json från värdens skal, sätt totp_enabled till false och starta om tjänsten.",
"wsTitle": "Omvänd proxy fungerar men den terminala fliken kopplar bort varje minut",
"wsBody": "WebSocket-anslutningens tidsgräns för inaktivitet i proxyn. Öka lästiden (Nginx: proxy_read_timeout 86400s; Traefik: idleTimeout i ingångspunkt eller middleware). Kontrollera i Nginx att proxy_set_header Upgrade $http_upgrade och Connection \"upgrade\" finns."
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"label": "API-referens → Tokenhantering",
"href": "/docs/monitor/api",
"tail": " — skapa, lista och återkalla API-token; säkerhet och lagring av hemligheter."
},
{
"label": "Integrationer",
"href": "/docs/monitor/integrations",
"tail": " — Homepage, Home Assistant, Grafana / Prometheus, Uptime Kuma och allmänna cURL-exempel."
},
{
"label": "Dashboard → Säkerhet → Secure Gateway",
"href": "/docs/monitor/dashboard/security",
"tail": " — distribuera Tailscale-gatewayens LXC steg för steg: undernätsrutter, ACL och Exit Node."
},
{
"label": "Säkerhet - Fail2Ban",
"href": "/docs/security/fail2ban",
"tail": " — installera och konfigurera den valfria jailen."
},
{
"label": "Inställningar → ProxMenux Monitor",
"href": "/docs/settings/proxmenux-monitor",
"tail": " — starta och stoppa systemd-tjänsten via ProxMenux TUI."
}
]
}
}