mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-01 18:32:13 +00:00
397 lines
32 KiB
JSON
397 lines
32 KiB
JSON
{
|
||
"meta": {
|
||
"title": "Overenie prístupu k panelu Proxmox — 2FA, tokeny API, profil, reverzný proxy | ProxMenux Monitor",
|
||
"description": "Prístup a ochrana ProxMenux Monitor: prvé spustenie, heslo s menom a avatarom, profil, TOTP 2FA, tokeny API pre skripty, HTTPS, príklady Nginx/Caddy/Traefik, protokol auditu a voliteľný jail Fail2Ban.",
|
||
"ogTitle": "Overenie prístupu k panelu Proxmox — 2FA, tokeny API, reverzný proxy",
|
||
"ogDescription": "Zabezpečte ProxMenux Monitor heslom, TOTP 2FA, tokenmi API, HTTPS, príkladmi reverzného proxy a voliteľným jailom Fail2Ban.",
|
||
"twitterTitle": "Overenie prístupu k panelu Proxmox | ProxMenux Monitor",
|
||
"twitterDescription": "Heslo a TOTP 2FA, tokeny API, HTTPS, príklady Nginx/Caddy/Traefik a protokol auditu."
|
||
},
|
||
"header": {
|
||
"title": "Prístup a overenie",
|
||
"description": "Prístup k panelu, prvé spustenie a ochranné vrstvy: heslo a TOTP, relácie JWT, tokeny API, HTTPS, reverzný proxy, Secure Gateway a voliteľný jail Fail2Ban.",
|
||
"section": "ProxMenux Monitor"
|
||
},
|
||
"intro": {
|
||
"title": "Overenie prístupu je voliteľné",
|
||
"body": "Pri prvom spustení panel zobrazí dialóg <em>„Chrániť panel?“</em> s tlačidlami <strong>Áno, nastaviť heslo</strong> a <strong>Nie, pokračovať bez ochrany</strong>. Druhá možnosť ponechá koncové body API otvorené na TCP 8008: v izolovanej laboratórnej LAN to môže byť prijateľné, inde je to nebezpečné. Dvojfaktorové overenie (2FA) <strong>nie je</strong> súčasťou tejto úvodnej voľby; nastavuje sa až po vytvorení hesla na <strong>karte Zabezpečenie</strong>."
|
||
},
|
||
"reaching": {
|
||
"heading": "Prístup k panelu",
|
||
"intro": "ProxMenux Monitor sa viaže na <code>0.0.0.0:8008</code>. Existujú tri bežné spôsoby, ako ju dosiahnuť:",
|
||
"outro": "Priamy prístup zodpovedá predvolenej jednotke systemd. Reverzný proxy a Secure Gateway sú opísané nižšie. Dôvera v IP klientov z <code>X-Forwarded-For</code> vyžaduje PROXMENUX_TRUST_PROXY=1 a proxy pod vašou kontrolou. Samotná prítomnosť <code>X-Forwarded-Proto</code> alebo <code>X-Forwarded-Host</code> dôveru v proxy nezapne. Na portoch 80/443 frontend používa relatívne URL <code>/api/*</code>; na akomkoľvek inom porte volá port 8008 na rovnakom názve hostiteľa."
|
||
},
|
||
"firstLaunch": {
|
||
"heading": "Postup pri prvom spustení",
|
||
"intro": "Pri prvom otvorení panelu frontend zavolá <code>GET /api/auth/status</code>. Ak konfigurácia ešte nebola uložená (<code>configured: false</code>), zobrazí sa dialóg <em>„Chrániť panel?“</em> s dvoma možnosťami:",
|
||
"imageAlt": "Úvodný dialóg „Chrániť panel?“ s voľbami nastaviť heslo alebo pokračovať bez ochrany",
|
||
"imageCaption": "Úvodná voľba ochrany heslom alebo pokračovania bez nej. Zobrazí sa znova po novej inštalácii alebo vypnutí overenia v nastaveniach.",
|
||
"headerButton": "Tlačidlo",
|
||
"headerWhat": "Čo sa stane?",
|
||
"headerApi": "Volanie API",
|
||
"rows": [
|
||
{
|
||
"button": "Áno, nastaviť heslo",
|
||
"what": "Otvorí formulár s povinným používateľským menom a heslom, voliteľným <em>zobrazovaným menom</em> a <em>obrázkom avatara</em>. Zapne overenie v <code>auth.json</code> pomocou <code>enabled: true</code> a vráti JWT na prihlásenie. Voliteľné údaje profilu sa uložia následnými volaniami, ako je opísané nižšie.",
|
||
"api": "POST /api/auth/setup"
|
||
},
|
||
{
|
||
"button": "Nie, pokračovať bez ochrany",
|
||
"what": "Nastaví <code>declined: true</code> v <code>auth.json</code>. Koncové body API zostanú otvorené, kým v nastaveniach nezapnete ochranu.",
|
||
"api": "POST /api/auth/skip"
|
||
}
|
||
],
|
||
"twofaCalloutTitle": "2FA je konfigurovaný neskôr, nie tu",
|
||
"twofaCalloutBody": "Dialóg pri prvom spustení pokrýva iba rozhodnutie o hesle. <strong>Dvojfaktorové overenie (TOTP)</strong> sa nastaví neskôr z <strong>karty Zabezpečenie</strong>, keď sa prihlásite pomocou hesla. Úplný návod TOTP je nižšie na tejto stránke.",
|
||
"createTitle": "Vytvorenie prvého užívateľa",
|
||
"createIntro": "<em>Áno, nastaviť heslo</em> otvorí formulár na vytvorenie účtu a voliteľné vyplnenie profilu, aby sa avatar zobrazil hneď po uložení. Polia:",
|
||
"headerField": "Pole",
|
||
"headerRequired": "Požadované",
|
||
"headerNotes": "Poznámky",
|
||
"fieldRows": [
|
||
{
|
||
"field": "Užívateľské meno",
|
||
"required": "Áno",
|
||
"notes": "Identifikátor na prihlásenie. V rozhraní sa neskôr nedá zmeniť; treba upraviť priamo <code>auth.json</code>."
|
||
},
|
||
{
|
||
"field": "Heslo",
|
||
"required": "Áno",
|
||
"notes": "Aspoň 10 znakov z aspoň 3 zo 4 kategórií: malé písmená, veľké písmená, číslice a symboly. Jednoduché heslá ako <code>password</code>, <code>12345678</code> a <code>proxmenux</code> sú odmietnuté. Rovnaké pravidlá platia na serveri a volanie curl ich neobíde."
|
||
},
|
||
{
|
||
"field": "Zobrazované meno",
|
||
"required": "Nie",
|
||
"notes": "Meno v ponuke hlavičky a v profile. Ak chýba, použije sa používateľské meno. Zmeniť ho môžete cez <strong>Avatar → Zobraziť profil</strong>."
|
||
},
|
||
{
|
||
"field": "Obrázok Avatar",
|
||
"required": "Nie",
|
||
"notes": "PNG, JPEG, WebP alebo GIF až do 2 MB. Vykreslený ako kruh v hlavičke a na stránke profilu. Keď je prázdna, hlavička zobrazuje prvé písmeno zobrazovaného mena (alebo používateľského mena) vo farebnom kruhu. Dá sa nahrať, nahradiť alebo odstrániť neskôr zo stránky profilu."
|
||
}
|
||
],
|
||
"createImageAlt": "Formulár účtu s povinným menom a heslom, voliteľným zobrazovaným menom a nahratím avatara",
|
||
"createImageCaption": "Úvodný formulár účtu. Meno profilu a avatar sú voliteľné; bez nich sa účet vytvorí a hlavička zobrazí iniciálu v kruhu.",
|
||
"saveCalloutTitle": "Jedno uloženie, až tri volania API",
|
||
"saveCalloutBody": "Formulár najprv odošle <code>POST /api/auth/setup</code> s menom a heslom. Nový JWT použije na <code>PUT /api/auth/profile</code> pre meno a <code>POST /api/auth/profile/avatar</code> pre obrázok, ak boli zadané. Chyba profilu nezruší účet; profil môžete dokončiť neskôr.",
|
||
"avatarTitle": "Ponuka avatara a stránka profilu",
|
||
"avatarBody1": "Po nastavení overenia sa avatar objaví vpravo hore vedľa prepínača témy. Ponuka vedie na profil a Zabezpečenie a obsahuje <strong>Odhlásiť sa</strong>. Reláciu možno ukončiť aj na karte Zabezpečenie.",
|
||
"avatarBody2": "Profil zobrazuje avatar, používateľské meno iba na čítanie a upraviteľné zobrazované meno. Nahratie, nahradenie a odstránenie avatara sú atómové; hlavička sa po úspechu aktualizuje bez obnovenia stránky. Úvodný formulár a profil používajú rovnaké koncové body opísané nižšie.",
|
||
"profileImageAlt": "Profil s náhľadom avatara, tlačidlami Nahrať / Nahradiť / Odstrániť, menom iba na čítanie a upraviteľným zobrazovaným menom",
|
||
"profileImageCaption": "Stránka profilu. Používateľské meno je iba na čítanie; zobrazované meno a avatar možno meniť tu bez otvorenia karty Zabezpečenie.",
|
||
"headerEndpoint": "Koncový bod",
|
||
"headerEpWhat": "Čo to robí?",
|
||
"endpointRows": [
|
||
{
|
||
"endpoint": "GET /api/auth/profile",
|
||
"what": "Vráti používateľské meno, zobrazované meno a stav avatara (<code>has_avatar</code>, <code>avatar_mtime</code>)."
|
||
},
|
||
{
|
||
"endpoint": "PUT /api/auth/profile",
|
||
"what": "Aktualizuje zobrazované meno. Telo požiadavky: <code>'{' \"display_name\": \"...\" '}'</code>."
|
||
},
|
||
{
|
||
"endpoint": "GET /api/auth/profile/avatar",
|
||
"what": "Vráti obrázok PNG / JPEG / WebP / GIF so správnym typom obsahu. Vyžaduje hlavičku Bearer; frontend stiahne blob a vytvorí miestnu objektovú URL na zobrazenie."
|
||
},
|
||
{
|
||
"endpoint": "POST /api/auth/profile/avatar",
|
||
"what": "Nahrá nový avatar (max 2 MB). Typ obsahu musí zodpovedať súboru. Starý avatar je nahradený atómovo."
|
||
},
|
||
{
|
||
"endpoint": "DELETE /api/auth/profile/avatar",
|
||
"what": "Odstráni avatar. Hlavička opäť zobrazí iniciálu vo farebnom kruhu."
|
||
}
|
||
],
|
||
"reversibleTitle": "Ochranu môžete zapnúť neskôr",
|
||
"reversibleBody": "Po kliknutí na <em>Nie, pokračovať bez ochrany</em> sa už nikdy viac nezobrazí uvítacie dialógové okno. Autentizáciu môžete znova povoliť na <strong>karte Zabezpečenie</strong> na hlavnom paneli alebo úpravou súboru <code>/root/.config/proxmenux-monitor/auth.json</code> a odstránením príznaku <code>declined</code> a reštartovaním služby."
|
||
},
|
||
"password": {
|
||
"heading": "Overenie hesla",
|
||
"intro": "Po nastavení ochrany vyžadujú chránené volania API JWT v <code>Authorization: Bearer <token></code>:",
|
||
"items": [
|
||
"<strong>Token relácie:</strong> platí 24 hodín, vydáva ho <code>POST /api/auth/login</code>.",
|
||
"<strong>Token API pre integrácie:</strong> platí 365 dní, vydáva ho <code>POST /api/auth/generate-api-token</code>. Podrobnosti sú v ďalšej časti."
|
||
],
|
||
"loginImageAlt": "Prihlasovacia obrazovka po nastavení overenia s poľami mena a hesla",
|
||
"loginImageCaption": "Po nastavení overenia sa tu začína prihlásenie. Pri zapnutom 2FA sa po prijatí hesla vyžiada šesťmiestny kód.",
|
||
"loginFlowTitle": "Prihlasovací tok",
|
||
"twofaIntro": "Pri 2FA prvé volanie vráti <code>requires_totp: true</code>. Zopakujte ho so šesťmiestnym kódom:",
|
||
"publicTitle": "Verejné koncové body (bez tokenu)",
|
||
"publicIntro": "Prihlásenie, stav overenia, počiatočné nastavenie a ľahký koncový bod <code>/api/system-info</code> sú verejné:",
|
||
"publicItems": [
|
||
"<code>/api/auth/login</code> a <code>/api/auth/status</code> sú verejné. <code>/api/auth/setup</code> vytvorí prvý účet a odmietne prepísať existujúce prihlasovacie údaje.",
|
||
"<code>/api/system-info</code> je verejný endpoint so základnými údajmi systému vrátane <code>health.status</code>. Nevyžaduje token. Aj /api/auth/status je verejný a hodí sa na kontrolu dostupnosti."
|
||
],
|
||
"cryptoTitle": "Kryptografia a ukladanie",
|
||
"cryptoIntro": "ProxMenux Monitor má otvorený zdrojový kód. Táto časť vysvetľuje ochranu prihlasovacích údajov uložených na hostiteľovi, aby ste sa mohli rozhodnúť, či jej dôverujete. Uvedené algoritmy používa <code>scripts/auth_manager.py</code>; ide o opis kódu, nie marketingový sľub.",
|
||
"headerAsset": "Údaj",
|
||
"headerAlgo": "Algoritmus",
|
||
"headerWhere": "Umiestnenie",
|
||
"cryptoRows": [
|
||
{
|
||
"asset": "Heslo",
|
||
"algorithm": "PBKDF2-HMAC-SHA256 s náhodnou soľou na heslo a vysokým počtom iterácií (OWASP 2023+ východisková hodnota). Uložené ako <code>pbkdf2_sha256$<iters>$<salt>$<hash></code>.",
|
||
"where": "<code>auth.json</code> → <code>password_hash</code>"
|
||
},
|
||
{
|
||
"asset": "JWT relácie / API",
|
||
"algorithm": "Podpis HS256 s tajným kľúčom každej inštalácie, vytvoreným pri prvom spustení (<code>secrets.token_urlsafe</code>, ≥48 bajtov). Tokeny obsahujú <code>iss=proxmenux-monitor</code> a <code>aud=api</code>; každý požiadavok overuje podpis aktuálnym kľúčom.",
|
||
"where": "Tajomstvo: <code>auth.json</code> → <code>jwt_secret</code>. JWT sám: len na klienta."
|
||
},
|
||
{
|
||
"asset": "API token metaúdaje",
|
||
"algorithm": "Hash SHA-256 JWT sa ukladá s odtlačkom <code>signed_with</code> použitého <code>jwt_secret</code>. Umožňuje zobraziť metadáta a rozpoznať tokeny ovplyvnené výmenou kľúča.",
|
||
"where": "<code>auth.json</code> → <code>api_tokens[]</code>"
|
||
},
|
||
{
|
||
"asset": "Tajný kľúč TOTP pre 2FA",
|
||
"algorithm": "Štandardný TOTP (RFC 6238) s tajným kľúčom v base32. Osem jednorazových záložných kódov sa ukladá ako hashe SHA-256.",
|
||
"where": "<code>auth.json</code> → <code>totp_secret</code> + <code>backup_codes[]</code>"
|
||
},
|
||
{
|
||
"asset": "Zrušenie",
|
||
"algorithm": "Pri odvolaní tokenu alebo relácie sa ich SHA-256 pridá do zoznamu zablokovaných hodnôt, ktorý sa kontroluje pri každom overení. Zoznam sa uchováva v pamäti približne 30 s, aby sa pri častých požiadavkách zbytočne nečítal disk.",
|
||
"where": "<code>auth.json</code> → <code>revoked_tokens[]</code>"
|
||
}
|
||
],
|
||
"authJsonTitle": "auth.json — obsah a ochrana",
|
||
"authJsonBody": "Údaje overenia sú v <code>/root/.config/proxmenux-monitor/auth.json</code>, režim <code>0600</code>, vlastník <code>root</code>. Súbor obsahuje <em>hashe</em> PBKDF2 a <em>tajné kryptografické údaje</em> (<code>jwt_secret</code>, <code>totp_secret</code>), nikdy heslo v otvorenom texte. Cieľ zálohovania alebo replikácie šifrujte a súbor nikdy nepridávajte do systému správy verzií.",
|
||
"rotateTitle": "Výmena jwt_secret zneplatní všetky existujúce JWT",
|
||
"rotateBody": "Pri novom vytvorení alebo obnove <code>auth.json</code> s iným kľúčom sa zmení <code>jwt_secret</code>. Staré JWT relácií aj API zlyhajú s \"Invalid or expired token\". Rozhranie ich označí <strong>Neplatný — vytvoriť znova</strong>. Zrušte ich a nahraďte aj v Home Assistant, skriptoch a ostatných klientoch.",
|
||
"recoverTitle": "Obnovenie strateného hesla",
|
||
"recoverIntro": "Obnova hesla vyžaduje prístup k shellu hostiteľa. ProxMenux ponúka sprievodcu resetovaním v konfiguračnej ponuke, aby ste nemuseli ručne upravovať <code>auth.json</code>:",
|
||
"survivesTitle": "Čo prežíva reset",
|
||
"survivesBody": "Vymaže sa interaktívne prihlásenie, ale <code>jwt_secret</code> a registrované <code>api_tokens</code> zostanú. Home Assistant a ostatné skripty môžu používať pôvodné tokeny. Ak chcete úplný reset s novým kľúčom, odstráňte <code>auth.json</code> a reštartujte službu. Všetky staré tokeny potom prestanú platiť.",
|
||
"physicalTitle": "Predpoklad fyzického prístupu",
|
||
"physicalBody": "Vyžaduje <strong>shell používateľa root na hostiteľovi</strong>. Kto spustí <code>menu</code> ako root, už ovláda celý systém; reset hesla mu nepridáva práva. Prihlásenie do Monitora preto nechráni pred osobou s prístupom root."
|
||
},
|
||
"twofa": {
|
||
"heading": "Dvojfaktorové overenie (TOTP)",
|
||
"intro": "2FA pridáva k heslu šesťmiestny kód, ktorý sa mení každých 30 sekúnd v telefóne alebo správcovi hesiel. Samotné heslo na prihlásenie nestačí. ProxMenux Monitor používa štandardný protokol <strong>TOTP</strong> (RFC 6238), kompatibilný s autentifikačnými aplikáciami.",
|
||
"pickTitle": "Vyberte autentifikačnú aplikáciu",
|
||
"pickIntro": "Existujúcu aplikáciu TOTP môžete použiť aj tu. Tabuľka uvádza bežné možnosti: niektoré sú zadarmo, iné na predplatné. Líšia sa aj platformy a spôsoby zálohovania.",
|
||
"headerApp": "Aplikácie",
|
||
"headerPlatforms": "Platformy",
|
||
"headerAppNotes": "Poznámky",
|
||
"apps": [
|
||
{
|
||
"name": "Google Authenticator",
|
||
"href": "https://safety.google/authentication/",
|
||
"platforms": "iOS, Android",
|
||
"notes": "Bežná voľba. Voliteľné cloudové zálohovanie cez účet Google."
|
||
},
|
||
{
|
||
"name": "Microsoft Authenticator",
|
||
"href": "https://www.microsoft.com/en-us/security/mobile-authenticator-app",
|
||
"platforms": "iOS, Android",
|
||
"notes": "Zálohovanie cez účet Microsoft. Podporuje aj pracovné push oznámenia Microsoft."
|
||
},
|
||
{
|
||
"name": "Authy",
|
||
"href": "https://authy.com/",
|
||
"platforms": "iOS, Android",
|
||
"notes": "Šifrovaná synchronizácia medzi zariadeniami. Podpora desktopovej aplikácie sa skončila 19. marca 2024."
|
||
},
|
||
{
|
||
"name": "Apple Passwords",
|
||
"href": "https://support.apple.com/guide/passwords/welcome/mac",
|
||
"platforms": "iOS, iPadOS, macOS, visionOS, Windows (cez iCloud)",
|
||
"notes": "Súčasť systémov Apple; samostatná aplikácia Passwords od iOS 18 / macOS Sequoia. Ukladá TOTP pri hesle a synchronizuje cez iCloud Kľúčenku."
|
||
},
|
||
{
|
||
"name": "Bitwarden",
|
||
"href": "https://bitwarden.com/",
|
||
"platforms": "iOS, Android, desktop, prehliadač",
|
||
"notes": "Otvorený zdrojový kód. TOTP možno uložiť pri heslách v trezore. Je to pohodlné, ale neoddeľuje to faktory na dve zariadenia."
|
||
},
|
||
{
|
||
"name": "1Password",
|
||
"href": "https://1password.com/",
|
||
"platforms": "iOS, Android, desktop, prehliadač",
|
||
"notes": "Podobne ako Bitwarden: TOTP v trezore hesiel. Predplatné."
|
||
},
|
||
{
|
||
"name": "Aegis Authenticator",
|
||
"href": "https://getaegis.app/",
|
||
"platforms": "Android",
|
||
"notes": "Otvorený zdrojový kód. Šifrovaný záložný súbor v zariadení máte pod kontrolou. Bez cloudu a účtu."
|
||
},
|
||
{
|
||
"name": "Raivo OTP",
|
||
"href": "https://raivo-otp.com/",
|
||
"platforms": "iOS, macOS",
|
||
"notes": "Otvorený zdrojový kód. Voliteľná synchronizácia iCloud. Alternatíva k Aegis v ekosystéme Apple."
|
||
},
|
||
{
|
||
"name": "Ente Auth",
|
||
"href": "https://ente.io/auth/",
|
||
"platforms": "iOS, Android, počítač, web",
|
||
"notes": "Otvorený zdrojový kód. Cloudová synchronizácia zariadení s koncovým šifrovaním."
|
||
},
|
||
{
|
||
"name": "2FAS",
|
||
"href": "https://2fas.com/",
|
||
"platforms": "iOS, Android, rozšírenie prehliadača",
|
||
"notes": "Otvorený zdrojový kód. Voliteľná šifrovaná cloudová záloha; rozšírenie prehliadača môže automaticky vypĺňať kódy."
|
||
},
|
||
{
|
||
"name": "FreeOTP+",
|
||
"href": "https://github.com/helloworld1/FreeOTPPlus",
|
||
"platforms": "Android",
|
||
"notes": "Odvodená aplikácia FreeOTP s otvoreným kódom pre Android, s importom a exportom. Bez povinného účtu."
|
||
}
|
||
],
|
||
"backupTitle": "Prečo sú zálohy dôležité",
|
||
"backupBody": "Pri strate overovacieho zariadenia použite uložený záložný kód alebo obnovte aplikáciu z vopred nastavenej zálohy. Cloudová synchronizácia a lokálne exporty sa líšia podľa aplikácie; overte, že zvolený spôsob naozaj obnoví tajné kľúče TOTP. Prístup root na hostiteľovi umožňuje aj obnovu opísanú nižšie. Uchovajte samostatnú bezpečnú zálohu.",
|
||
"setupTitle": "Nastavenie krok za krokom z panelu",
|
||
"setupImageAlt": "Nastavovacia obrazovka 2FA s QR kódom a záložnými kódmi",
|
||
"setupImageCaption": "Dialóg nastavenia 2FA zobrazuje QR, tajný kľúč Base32 na ručné zadanie a po overení osem jednorazových záložných kódov. Kódy skopírujte pred zatvorením dialógu; už sa nezobrazia.",
|
||
"setupSteps": [
|
||
"<strong>Nainštalujte autentifikačnú aplikáciu do telefónu</strong> alebo otvorte správcu hesiel. Stačí raz; rovnaká aplikácia môže uchovávať kódy pre všetky chránené služby.",
|
||
"<strong>Prihláste sa do panelu</strong> menom a heslom.",
|
||
"<strong>Otvorte kartu Zabezpečenie</strong> v bočnom paneli dashboardu a kliknite na <strong>Zapnúť 2FA</strong> a <strong>Spustiť nastavenie</strong>. Dialóg zobrazí QR a ručný kľúč; osem záložných kódov sa zobrazí po overení kódu.",
|
||
"<strong>Pridajte položku do autentifikačnej aplikácie:</strong>",
|
||
"<strong>Potvrďte aktuálnym šesťmiestnym kódom</strong> z aplikácie v poli \"Overovací kód\" dialógu nastavenia a odošlite. Mení sa každých 30 sekúnd; ak počas písania vyprší, použite ďalší.",
|
||
"<strong>Uložte záložné kódy.</strong> Po overení všetkých osem bezpečne uložte do správcu hesiel, šifrovanej poznámky alebo na zabezpečenú tlačenú kópiu. Každý funguje raz, keď overovacia aplikácia nie je dostupná.",
|
||
"<strong>Hotovo.</strong> 2FA je aktívne. Ďalšie prihlásenie vyžiada najprv heslo a potom aktuálny šesťmiestny kód."
|
||
],
|
||
"setupStep4Sub": [
|
||
"<em>Jednoduchý postup:</em> v aplikácii vyberte <em>Pridať účet</em> → <em>Naskenovať QR kód</em> a nasmerujte fotoaparát na QR. Položka dostane názov napríklad <code>ProxMenux Monitor (your-username)</code> a zobrazí šesťmiestny kód obnovovaný každých 30 sekúnd.",
|
||
"<em>Ručná alternatíva</em>, ak nemožno skenovať, napríklad na rovnakom telefóne: <em>Pridať účet</em> → <em>Zadať nastavovací kľúč</em>. Zvoľte názov ako <em>Proxmox Monitor</em>, vložte tajný kľúč Base32, nechajte <em>Typ</em> nastavený na <em>Časový</em> a uložte."
|
||
],
|
||
"testTitle": "Test pred odhlásením",
|
||
"testBody": "Aktuálnu reláciu nechajte otvorenú a <em>hneď</em> po nastavení otestujte nové prihlásenie v súkromnom okne. Ak je kód odmietnutý, pred odhlásením z funkčnej relácie skontrolujte hodiny servera a telefónu. Ak je prístup už stratený, použite záložný kód alebo upravte <code>auth.json</code> zo shellu hostiteľa.",
|
||
"lostTitle": "Stratený autentifikátor",
|
||
"lostIntro": "Tri spôsoby obnovy, od najmenšieho po najväčší zásah:",
|
||
"lostItems": [
|
||
"<strong>Použite záložný kód.</strong> Jeden z ôsmich uložených kódov zadajte do poľa TOTP. Funguje raz; nepoužité kódy zostanú platné. Po prihlásení otvorte Zabezpečenie, vyberte <strong>Vypnúť 2FA</strong> a potom <strong>Zapnúť 2FA</strong> a získajte osem nových kódov.",
|
||
"<strong>Obnovte aplikáciu z cloudu alebo zálohy.</strong> Pri nastavenej synchronizácii ju nainštalujte na nové zariadenie a prihláste sa: Google, Microsoft, Authy, Apple Passwords cez iCloud Kľúčenku, Ente alebo 2FAS. Pri exporte z Aegis, Raivo alebo FreeOTP+ nainštalujte aplikáciu a importujte súbor.",
|
||
"<strong>Vypnite 2FA zo shellu hostiteľa.</strong> Ak iné možnosti nie sú dostupné, upravte <code>/root/.config/proxmenux-monitor/auth.json</code> ako root cez SSH alebo konzolu. Nastavte <code>totp_enabled</code> na <code>false</code>, uložte a reštartujte službu:"
|
||
],
|
||
"lostShellOutro": "Môžete sa prihlásiť iba s užívateľským menom + heslom a potom znovu zapnúť 2FA z Nastavenia.",
|
||
"disableTitle": "Vypnúť 2FA",
|
||
"disableBody": "Otvorte <strong>Zabezpečenie</strong> a vyberte <strong>Vypnúť 2FA</strong>. <code>POST /api/auth/totp/disable</code> vyžaduje aktuálne heslo a platný TOTP alebo záložný kód. Odstráni tajný kľúč TOTP aj záložné kódy. Starú položku odstráňte aj z overovacej aplikácie.",
|
||
"rejectedTitle": "Šesťmiestny kód je vždy odmietnutý",
|
||
"rejectedIntro": "TOTP závisí od času. Rozdiel hodín servera a telefónu má byť najviac približne 30 s. Dve kontroly:",
|
||
"rejectedItems": [
|
||
"<strong>Telefón:</strong> Nastavenia → Dátum a čas → zapnúť automatickú / sieťovú synchronizáciu.",
|
||
"<strong>Hostiteľ Proxmox:</strong> <code>timedatectl status</code> má zobraziť \"System clock synchronized: yes\". Inak spustite <code>timedatectl set-ntp true</code> a minútu počkajte."
|
||
],
|
||
"rejectedOutro": "Po synchronizácii hodín sa kód prijme v nasledujúcom 30-sekundovom intervale."
|
||
},
|
||
"apiTokens": {
|
||
"heading": "API tokeny (dlhodobé)",
|
||
"intro": "Relácie prehliadača platia 24 hodín. Pre Homepage, Home Assistant, Grafana či Uptime Kuma vytvorte samostatný <strong>token API</strong> platný 365 dní. JWT používa rovnaký podpisový kľúč; pole <code>token_name</code> umožňuje sledovať a jednotlivo zrušiť token.",
|
||
"imageAlt": "Panel tokenov API znázorňujúci zoznam tokenov s názvom, predponou, vytvoreným dátumom a expiráciou",
|
||
"imageCaption": "Zoznam tokenov v nastaveniach: názov, predpona s poslednými štyrmi identifikačnými znakmi, dátum vytvorenia a platnosť, možnosť zrušenia.",
|
||
"generateTitle": "Generovať token",
|
||
"generateIntro": "Z panelu:",
|
||
"generateSteps": [
|
||
"Otvorte <strong>Zabezpečenie → Prístupové tokeny API</strong>.",
|
||
"Zadajte opisný názov, <em>napríklad \"Home Assistant\"</em>.",
|
||
"Zadajte svoje heslo. Ak je zapnutá 2FA, aj súčasný 6-miestny kód.",
|
||
"Kliknite na <strong>Vytvoriť token</strong>. Zobrazí sa <strong>iba raz</strong>: hneď ho skopírujte."
|
||
],
|
||
"generateCli": "Z príkazového riadku:",
|
||
"useTitle": "Použitie tokenu",
|
||
"revokeTitle": "Zrušiť token",
|
||
"revokeBody": "Každý riadok má voľbu <strong>Zrušiť</strong>, ktorá pridá hash do <code>revoked_tokens</code> v <code>auth.json</code>. Token sa odmietne pri ďalšej požiadavke.",
|
||
"cheatTitle": "Prehľad bezpečnosti tokenov",
|
||
"cheatItems": [
|
||
"Tokeny uložte do úložiska tajných údajov integrácie: Homepage <code>secrets.yaml</code>, Home Assistant <code>!secret</code> alebo premenné prostredia. Nikdy ich nepridávajte do Gitu.",
|
||
"Jeden token pre každú integráciu, pomenovaný podľa nej. Pri odstránení integrácie ho samostatne zrušte.",
|
||
"Tokeny vymieňajte každých 6–12 mesiacov. Koniec platnosti je pevný limit."
|
||
],
|
||
"outro": "Odporúčania a príklady: <apiLink>Referencia API → Správa tokenov</apiLink> a <intLink>Integrácie</intLink>."
|
||
},
|
||
"https": {
|
||
"heading": "HTTPS",
|
||
"intro": "Dve cesty k TLS:",
|
||
"items": [
|
||
"<strong>Odporúčaný reverzný proxy.</strong> Ukončite TLS na Nginx / Caddy / Traefik a posielajte HTTP procesu Flask na port 8008. Príklady sú nižšie.",
|
||
"<strong>Priame HTTPS v AppImage.</strong> Certifikát nastavte cez <code>POST /api/ssl/configure</code> (rozhranie: <strong>Nastavenia → SSL</strong>). HTTPS používa <code>gevent.pywsgi</code> so štandardným handlerom; flask-sock obsluhuje WebSocket pre WSS. Cesty certifikátov sa uložia v konfigurácii SSL."
|
||
],
|
||
"calloutTitle": "Priame obmedzenia HTTPS",
|
||
"calloutBody": "Monitor môže použiť certifikát spravovaný Proxmoxom alebo vlastné súbory. Sám certifikáty ACME nevydáva. Na automatické vydávanie a obnovu použite Proxmox ACME alebo proxy Caddy, Traefik či Nginx a zabezpečte načítanie obnovených certifikátov."
|
||
},
|
||
"gateway": {
|
||
"heading": "Zabezpečená brána (Tailscale)",
|
||
"intro": "Reverzný proxy umožňuje vzdialený prístup. <strong>Secure Gateway</strong> ponúka prístup bez zverejnenia TCP 8008: vytvorí Alpine LXC s <a>Tailscale</a> ako smerovačom podsiete. Prístup k LAN IP hostiteľa závisí od schválených trás a pravidiel tailnetu.",
|
||
"calloutTitle": "Prečo je to pohodlné",
|
||
"calloutBody": "Použite LAN URL <code>http://<proxmox-lan-ip>:8008</code> cez schválenú trasu. Smerovače Tailscale štandardne používajú SNAT: Monitor obvykle vidí LAN IP brány, nie adresu klienta <code>100.x.y.z</code>. Protokoly a Fail2Ban tak určia zdrojovú adresu, ktorú hostiteľ skutočne prijme.",
|
||
"deployBody": "Celé nasadenie sa nastavuje na jednej obrazovke: vyberte úložisko LXC na hostiteľovi, vložte kľúč Tailscale auth-key vytvorený na <a>login.tailscale.com/admin/settings/keys</a>, určte podsiete, ktoré má brána oznamovať, a kliknite na Nasadiť. Inicializácia LXC trvá približne 30 sekúnd a kontajner sa automaticky zaregistruje do siete tailnet.",
|
||
"outro": "Nasadenie, trasy podsietí, ACL Tailscale a režim Exit Node sú opísané v <link>Panel → Zabezpečenie → Secure Gateway</link>, kde je aj sprievodca. Táto stránka opisuje prístup."
|
||
},
|
||
"proxy": {
|
||
"heading": "Príklady konfigurácie reverzného proxy",
|
||
"intro": "Použite <strong>samostatný názov hostiteľa</strong>, napríklad <code>monitor.example.com</code>, smerujúci na port 8008 Proxmoxu. Príklady používajú tento postup. Podcesta ako <code>example.com/proxmenux-monitor/</code> potrebuje úpravy frontendu aj proxy; odstránenie predpony nestačí.",
|
||
"nginxTitle": "Nginx",
|
||
"caddyTitle": "Caddy",
|
||
"traefikTitle": "Traefik (štítky — Docker / Kubernetes)",
|
||
"subPathTitle": "Pokročilé: nasadenie pod podcestou",
|
||
"subPathBody": "Frontend nemá nastavený základ podcesty a zostavuje volania od koreňa cez URL <code>/api/*</code>. Odstrániť predponu ako <code>example.com/proxmenux-monitor/</code> nestačí pre tieto volania ani všetky súbory frontendu. Použite samostatný názov hostiteľa. Podcesta vyžaduje spoločné úpravy a osobitné testovanie."
|
||
},
|
||
"audit": {
|
||
"heading": "Auditný záznam",
|
||
"intro": "Neúspešné prihlásenia a upozornenia na limit sa zapisujú po riadkoch do <code>/var/log/proxmenux-auth.log</code>. Tento logger úspešné prihlásenia nezaznamenáva:",
|
||
"outro": "Sledujte protokol cez <code>tail -F /var/log/proxmenux-auth.log</code>. Dodatočná konfigurácia <code>logrotate</code> umožní jeho rotáciu; Monitor ju sám nevykonáva."
|
||
},
|
||
"fail2ban": {
|
||
"heading": "Voliteľné: jail Fail2Ban",
|
||
"calloutTitle": "Fail2Ban nie je súčasťou Monitora",
|
||
"calloutBody": "Fail2Ban <strong>nie je</strong> nainštalovaný samotným ProxMenux Monitor. Nainštalujte ho cez <link>Zabezpečenie → Fail2Ban</link> v menu ProxMenux (alebo pomocou štandardného balíka Debian). Bez toho Monitor stále zapisuje vyššie uvedený protokol auditu – iba automaticky nezablokuje recidivistov.",
|
||
"intro": "Integrácia ProxMenux obsahuje jail <code>[proxmenux]</code>, ktorý:",
|
||
"items": [
|
||
"Číta <code>/var/log/proxmenux-auth.log</code>.",
|
||
"Zodpovedá modelu <code>authentication failure; rhost=<ip></code> s vyhradeným filtrom.",
|
||
"Štandardne blokuje príslušnú IP vo firewalle jadra.",
|
||
"Hook Flask <code>before_request</code> porovnáva požiadavky so zoznamom blokovaní uloženým v cache na 30 s. Za reverzným proxy vyžaduje blokovanie IP aj PROXMENUX_TRUST_PROXY=1 a riadený proxy nastavujúci dôveryhodné hlavičky."
|
||
],
|
||
"outro": "Konfigurácia, ladenie času zákazu a procedúry odblokovania sú v <link>Zabezpečenie → Fail2Ban</link>."
|
||
},
|
||
"troubleshoot": {
|
||
"heading": "Riešenie problémov",
|
||
"noScreenTitle": "Obrazovka prvého spustenia sa nikdy neobjaví",
|
||
"noScreenBody": "Overenie už bolo nastavené (<code>configured: true</code>) alebo ho niekto preskočil. Ak chcete začať znova:",
|
||
"noScreenOutro": "Vymaže stav overenia, tajné kľúče TOTP aj tokeny API. Ak ich chcete zachovať, najprv zálohujte <code>auth.json</code>.",
|
||
"tokenTitle": "HTTP 401 pri každej požiadavke s predtým funkčným tokenom API",
|
||
"tokenBody": "Token vypršal po 365 dňoch alebo je v <code>revoked_tokens</code>. V nastaveniach vytvorte nový a aktualizujte integráciu. Overenie:",
|
||
"tokenOutro": "Neplatné alebo zrušené tokeny vrátia <code>'{'\"error\":\"Invalid or expired token\"'}'</code>.",
|
||
"no2faTitle": "Po zapnutí 2FA sa nedá prihlásiť a autentifikátor nie je dostupný",
|
||
"no2faBody": "Použite záložný kód v TOTP poli. Ak sú preč, editujte <code>/root/.config/proxmenux-monitor/auth.json</code> z hostiteľa, nastavte <code>totp_enabled</code> na <code>false</code>, reštartujte službu.",
|
||
"wsTitle": "Reverzný proxy funguje, ale záložka terminálu sa odpojí každú minútu",
|
||
"wsBody": "Časový limit nečinnosti WebSocket v proxy. Zvýšte limit čítania (Nginx: <code>proxy_read_timeout 86400s</code>; Traefik: <code>idleTimeout</code> vo vstupnom bode alebo middleware). V Nginx overte <code>proxy_set_header Upgrade $http_upgrade</code> a <code>Connection \"upgrade\"</code>."
|
||
},
|
||
"whereNext": {
|
||
"heading": "Kam ďalej",
|
||
"items": [
|
||
{
|
||
"label": "Referencia API → Správa tokenov",
|
||
"href": "/docs/monitor/api",
|
||
"tail": " — tvorba, zoznam a zrušenie tokenov API; bezpečnosť a ukladanie tajných údajov."
|
||
},
|
||
{
|
||
"label": "Integrácie",
|
||
"href": "/docs/monitor/integrations",
|
||
"tail": " — Homepage, Home Assistant, Grafana / Prometheus, Uptime Kuma a všeobecné príklady cURL."
|
||
},
|
||
{
|
||
"label": "Dashboard → Bezpečnosť → Bezpečná brána",
|
||
"href": "/docs/monitor/dashboard/security",
|
||
"tail": " — nasadenie LXC brány Tailscale krok za krokom: trasy podsietí, ACL a režim Exit Node."
|
||
},
|
||
{
|
||
"label": "Bezpečnosť → Fail2Ban",
|
||
"href": "/docs/security/fail2ban",
|
||
"tail": " — inštalácia a konfigurácia voliteľného jailu."
|
||
},
|
||
{
|
||
"label": "Nastavenie → ProxMenux Monitor",
|
||
"href": "/docs/settings/proxmenux-monitor",
|
||
"tail": " — spustenie a zastavenie služby systemd cez TUI ProxMenux."
|
||
}
|
||
]
|
||
}
|
||
}
|