Files
2026-11-04 08:55:53 +01:00

56 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.