Files
PostfixAdminRS/SECURITY.md
T
2026-11-03 16:52:28 +01:00

51 lines
2.2 KiB
Markdown

# 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.
## 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.