{ "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 „Chrániť panel?“ s tlačidlami Áno, nastaviť heslo a Nie, pokračovať bez ochrany. 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) nie je súčasťou tejto úvodnej voľby; nastavuje sa až po vytvorení hesla na karte Zabezpečenie." }, "reaching": { "heading": "Prístup k panelu", "intro": "ProxMenux Monitor sa viaže na 0.0.0.0:8008. 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 X-Forwarded-For vyžaduje PROXMENUX_TRUST_PROXY=1 a proxy pod vašou kontrolou. Samotná prítomnosť X-Forwarded-Proto alebo X-Forwarded-Host dôveru v proxy nezapne. Na portoch 80/443 frontend používa relatívne URL /api/*; 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á GET /api/auth/status. Ak konfigurácia ešte nebola uložená (configured: false), zobrazí sa dialóg „Chrániť panel?“ 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 zobrazovaným menom a obrázkom avatara. Zapne overenie v auth.json pomocou enabled: true 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í declined: true v auth.json. 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. Dvojfaktorové overenie (TOTP) sa nastaví neskôr z karty Zabezpečenie, 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": "Áno, nastaviť heslo 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 auth.json." }, { "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 password, 12345678 a proxmenux 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 Avatar → Zobraziť profil." }, { "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 POST /api/auth/setup s menom a heslom. Nový JWT použije na PUT /api/auth/profile pre meno a POST /api/auth/profile/avatar 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 Odhlásiť sa. 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 (has_avatar, avatar_mtime)." }, { "endpoint": "PUT /api/auth/profile", "what": "Aktualizuje zobrazované meno. Telo požiadavky: '{' \"display_name\": \"...\" '}'." }, { "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 Nie, pokračovať bez ochrany sa už nikdy viac nezobrazí uvítacie dialógové okno. Autentizáciu môžete znova povoliť na karte Zabezpečenie na hlavnom paneli alebo úpravou súboru /root/.config/proxmenux-monitor/auth.json a odstránením príznaku declined a reštartovaním služby." }, "password": { "heading": "Overenie hesla", "intro": "Po nastavení ochrany vyžadujú chránené volania API JWT v Authorization: Bearer <token>:", "items": [ "Token relácie: platí 24 hodín, vydáva ho POST /api/auth/login.", "Token API pre integrácie: platí 365 dní, vydáva ho POST /api/auth/generate-api-token. 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 requires_totp: true. 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 /api/system-info sú verejné:", "publicItems": [ "/api/auth/login a /api/auth/status sú verejné. /api/auth/setup vytvorí prvý účet a odmietne prepísať existujúce prihlasovacie údaje.", "/api/system-info je verejný endpoint so základnými údajmi systému vrátane health.status. 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 scripts/auth_manager.py; 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 pbkdf2_sha256$<iters>$<salt>$<hash>.", "where": "auth.json → password_hash" }, { "asset": "JWT relácie / API", "algorithm": "Podpis HS256 s tajným kľúčom každej inštalácie, vytvoreným pri prvom spustení (secrets.token_urlsafe, ≥48 bajtov). Tokeny obsahujú iss=proxmenux-monitor a aud=api; každý požiadavok overuje podpis aktuálnym kľúčom.", "where": "Tajomstvo: auth.json → jwt_secret. JWT sám: len na klienta." }, { "asset": "API token metaúdaje", "algorithm": "Hash SHA-256 JWT sa ukladá s odtlačkom signed_with použitého jwt_secret. Umožňuje zobraziť metadáta a rozpoznať tokeny ovplyvnené výmenou kľúča.", "where": "auth.json → api_tokens[]" }, { "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": "auth.json → totp_secret + backup_codes[]" }, { "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": "auth.json → revoked_tokens[]" } ], "authJsonTitle": "auth.json — obsah a ochrana", "authJsonBody": "Údaje overenia sú v /root/.config/proxmenux-monitor/auth.json, režim 0600, vlastník root. Súbor obsahuje hashe PBKDF2 a tajné kryptografické údaje (jwt_secret, totp_secret), 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 auth.json s iným kľúčom sa zmení jwt_secret. Staré JWT relácií aj API zlyhajú s \"Invalid or expired token\". Rozhranie ich označí Neplatný — vytvoriť znova. 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ť auth.json:", "survivesTitle": "Čo prežíva reset", "survivesBody": "Vymaže sa interaktívne prihlásenie, ale jwt_secret a registrované api_tokens zostanú. Home Assistant a ostatné skripty môžu používať pôvodné tokeny. Ak chcete úplný reset s novým kľúčom, odstráňte auth.json a reštartujte službu. Všetky staré tokeny potom prestanú platiť.", "physicalTitle": "Predpoklad fyzického prístupu", "physicalBody": "Vyžaduje shell používateľa root na hostiteľovi. Kto spustí menu 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 TOTP (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": [ "Nainštalujte autentifikačnú aplikáciu do telefónu alebo otvorte správcu hesiel. Stačí raz; rovnaká aplikácia môže uchovávať kódy pre všetky chránené služby.", "Prihláste sa do panelu menom a heslom.", "Otvorte kartu Zabezpečenie v bočnom paneli dashboardu a kliknite na Zapnúť 2FA a Spustiť nastavenie. Dialóg zobrazí QR a ručný kľúč; osem záložných kódov sa zobrazí po overení kódu.", "Pridajte položku do autentifikačnej aplikácie:", "Potvrďte aktuálnym šesťmiestnym kódom 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ší.", "Uložte záložné kódy. 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á.", "Hotovo. 2FA je aktívne. Ďalšie prihlásenie vyžiada najprv heslo a potom aktuálny šesťmiestny kód." ], "setupStep4Sub": [ "Jednoduchý postup: v aplikácii vyberte Pridať účet → Naskenovať QR kód a nasmerujte fotoaparát na QR. Položka dostane názov napríklad ProxMenux Monitor (your-username) a zobrazí šesťmiestny kód obnovovaný každých 30 sekúnd.", "Ručná alternatíva, ak nemožno skenovať, napríklad na rovnakom telefóne: Pridať účet → Zadať nastavovací kľúč. Zvoľte názov ako Proxmox Monitor, vložte tajný kľúč Base32, nechajte Typ nastavený na Časový a uložte." ], "testTitle": "Test pred odhlásením", "testBody": "Aktuálnu reláciu nechajte otvorenú a hneď 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 auth.json zo shellu hostiteľa.", "lostTitle": "Stratený autentifikátor", "lostIntro": "Tri spôsoby obnovy, od najmenšieho po najväčší zásah:", "lostItems": [ "Použite záložný kód. 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 Vypnúť 2FA a potom Zapnúť 2FA a získajte osem nových kódov.", "Obnovte aplikáciu z cloudu alebo zálohy. 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.", "Vypnite 2FA zo shellu hostiteľa. Ak iné možnosti nie sú dostupné, upravte /root/.config/proxmenux-monitor/auth.json ako root cez SSH alebo konzolu. Nastavte totp_enabled na false, 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 Zabezpečenie a vyberte Vypnúť 2FA. POST /api/auth/totp/disable 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": [ "Telefón: Nastavenia → Dátum a čas → zapnúť automatickú / sieťovú synchronizáciu.", "Hostiteľ Proxmox: timedatectl status má zobraziť \"System clock synchronized: yes\". Inak spustite timedatectl set-ntp true 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ý token API platný 365 dní. JWT používa rovnaký podpisový kľúč; pole token_name 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 Zabezpečenie → Prístupové tokeny API.", "Zadajte opisný názov, napríklad \"Home Assistant\".", "Zadajte svoje heslo. Ak je zapnutá 2FA, aj súčasný 6-miestny kód.", "Kliknite na Vytvoriť token. Zobrazí sa iba raz: 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 Zrušiť, ktorá pridá hash do revoked_tokens v auth.json. 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 secrets.yaml, Home Assistant !secret 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: Referencia API → Správa tokenov a Integrácie." }, "https": { "heading": "HTTPS", "intro": "Dve cesty k TLS:", "items": [ "Odporúčaný reverzný proxy. Ukončite TLS na Nginx / Caddy / Traefik a posielajte HTTP procesu Flask na port 8008. Príklady sú nižšie.", "Priame HTTPS v AppImage. Certifikát nastavte cez POST /api/ssl/configure (rozhranie: Nastavenia → SSL). HTTPS používa gevent.pywsgi 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. Secure Gateway ponúka prístup bez zverejnenia TCP 8008: vytvorí Alpine LXC s Tailscale 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 http://<proxmox-lan-ip>:8008 cez schválenú trasu. Smerovače Tailscale štandardne používajú SNAT: Monitor obvykle vidí LAN IP brány, nie adresu klienta 100.x.y.z. 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 login.tailscale.com/admin/settings/keys, 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 Panel → Zabezpečenie → Secure Gateway, kde je aj sprievodca. Táto stránka opisuje prístup." }, "proxy": { "heading": "Príklady konfigurácie reverzného proxy", "intro": "Použite samostatný názov hostiteľa, napríklad monitor.example.com, smerujúci na port 8008 Proxmoxu. Príklady používajú tento postup. Podcesta ako example.com/proxmenux-monitor/ 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 /api/*. Odstrániť predponu ako example.com/proxmenux-monitor/ 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 /var/log/proxmenux-auth.log. Tento logger úspešné prihlásenia nezaznamenáva:", "outro": "Sledujte protokol cez tail -F /var/log/proxmenux-auth.log. Dodatočná konfigurácia logrotate 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 nie je nainštalovaný samotným ProxMenux Monitor. Nainštalujte ho cez Zabezpečenie → Fail2Ban 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 [proxmenux], ktorý:", "items": [ "Číta /var/log/proxmenux-auth.log.", "Zodpovedá modelu authentication failure; rhost=<ip> s vyhradeným filtrom.", "Štandardne blokuje príslušnú IP vo firewalle jadra.", "Hook Flask before_request 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 Zabezpečenie → Fail2Ban." }, "troubleshoot": { "heading": "Riešenie problémov", "noScreenTitle": "Obrazovka prvého spustenia sa nikdy neobjaví", "noScreenBody": "Overenie už bolo nastavené (configured: true) 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 auth.json.", "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 revoked_tokens. V nastaveniach vytvorte nový a aktualizujte integráciu. Overenie:", "tokenOutro": "Neplatné alebo zrušené tokeny vrátia '{'\"error\":\"Invalid or expired token\"'}'.", "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 /root/.config/proxmenux-monitor/auth.json z hostiteľa, nastavte totp_enabled na false, 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: proxy_read_timeout 86400s; Traefik: idleTimeout vo vstupnom bode alebo middleware). V Nginx overte proxy_set_header Upgrade $http_upgrade a Connection \"upgrade\"." }, "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." } ] } }