# Security model ## Domyslne zasady - Panel nasluchuje domyslnie tylko na `127.0.0.1`. - Produkcyjny cookie sesji: `Secure`, `HttpOnly`, `SameSite=Strict`. - Kazda mutacja po zalogowaniu wymaga CSRF. - Sesje/challenge MFA maja losowe tokeny kryptograficzne. - Logowanie i recovery sa limitowane per IP + konto. - CSP nie zawiera `unsafe-inline` ani `unsafe-eval`; dodatkowo nosniff, frame deny, no-referrer i ograniczony Permissions-Policy. - Request body i timeout sa limitowane. - Za reverse proxy adres klienta brany jest z `X-Forwarded-For`/`X-Real-IP` tylko od adresow z `security.trusted_proxies` (prawy skrajny niezaufany adres) – klient nie moze podszyc sie pod inny IP. - Sesje sa co `session_revalidate_seconds` sprawdzane w bazie: wylaczone/usuniete konto oraz odebrane domeny dzialaja natychmiast. - Zmiana hasla wylogowuje pozostale sesje konta; zmiana hasla/dezaktywacja przez administratora wylogowuje wszystkie sesje tego konta. - Wygasle sesje, wyzwania MFA i liczniki prob sa okresowo czyszczone z pamieci. - `hsts = true` dodaje `Strict-Transport-Security`. ## Development mock DB `database.dev_mock=true` jest akceptowane tylko z `environment="development"` i SQLite. `dev.sh` tworzy `.dev/postfixadmin-rs.sqlite` z publicznymi testowymi credentialami. Tego pliku ani tych kont nie wolno przenosic do produkcji; `.dev/` jest ignorowane przez Git i nie trafia do paczki release. ## Legacy hasla Formaty MD5, SHA1, DES, cleartext i podobne sa wspierane tylko dla zgodnosci. Nie nalezy automatycznie migrowac mailbox hashy do Argon2, jesli Dovecot/Postfix SASL nie obsluguje tego samego schematu. Weryfikator rozpoznaje samopisujace hashe i moze obslugiwac mieszana baze podczas migracji. Nowe hashe sa generowane przez `password.scheme`. Recovery tokeny sa zawsze Argon2id i nie dziedzicza legacy schematu. Fallback `doveadm pw` nie uzywa shella. Haslo jest przekazywane przez stdin, nie przez argv procesu. ## Hooki Hook to lista `[program, arg1, arg2, ...]`. Program jest wykonywany bez `sh -c`; placeholdery sa podstawiane jawnie. `allow_legacy_shell_hooks` nie wlacza arbitralnej powloki. ## Alias i fetchmail Niebezpieczne cele aliasow (pipe/command) sa domyslnie blokowane. `fetchmail_extra_options=false` blokuje arbitrary MDA/extra options. ## Sekrety Hasla DB/SMTP trzymaj poza TOML, np.: ```bash POSTFIXADMIN_RS__DATABASE__PASSWORD='...' POSTFIXADMIN_RS__SMTP__PASSWORD='...' ``` Nie commituj `.env`. ## Reverse proxy i IP Obecna wersja uzywa bezposredniego TCP peer do rate limit i TOTP exception. Za reverse proxy nie wlaczaj TOTP IP exceptions, dopoki nie ma jawnie skonfigurowanego trusted-proxy header handling. ## Deployment Uruchamiaj jako dedykowany, nieuprzywilejowany user. Przyznaj tylko potrzebny dostep do `doveadm`, `openssl`, `mysqldump`/`pg_dump` i wymaganych socketow/uslug. Nie uruchamiaj jako root.