Commit Graph
23 Commits
Author SHA1 Message Date
eSlider 417e9960c1 Merge pull request 'feat(mail): raise message size cap to 200M for archive import (gator #101)' (#8) from feat/mail-size-limit-archive#101 into main 2026-09-06 02:04:14 +01:00
eSlider c729e026b2 feat(mail): raise message size cap to 200M for archive import (gator #101) 2026-09-06 02:04:08 +01:00
eSlider 58e34615da Merge pull request 'feat(dovecot): incubator owners defacto (gator #101)' (#7) from feat/dovecot-defacto-owners#101 into main 2026-09-06 01:19:16 +01:00
eSlider 8dbfba6be3 feat(dovecot): incubator owners defacto (gator #101) 2026-09-06 01:19:00 +01:00
eSlider 58a57e890e fix(mail): postscreen whitelist LinkedIn senders (450 reject of verification mail) 2026-09-04 09:37:18 +01:00
eSlider 717348db6c feat(dovecot): incubator owner eslider@gmail.com (G-10.3 #100) 2026-09-02 19:22:21 +01:00
eSlider 4e20a92885 Merge pull request 'feat(dovecot): historical-account andriy.oblivantsev@wheregroup.com for wheregroup incubator (#252)' (#6) from feat/historical-wheregroup-account#252 into main 2026-09-02 13:54:29 +01:00
eSlider d2724ec727 chore(dovecot): drop deleted wheregroup@produktor.io A1 pilot box from owner lists (#252) 2026-09-02 13:50:54 +01:00
eSlider 6cdd704aef feat(dovecot): historical-account andriy.oblivantsev@wheregroup.com for wheregroup incubator (#252) 2026-09-02 13:42:58 +01:00
eSlider 8041ab3962 Merge pull request 'feat(dovecot): incubator owner wheregroup@produktor.io + info@ delete access (#251)' (#5) from feat/incubator-wheregroup#251 into main 2026-09-02 12:12:53 +01:00
eSlider a4ab96d025 feat(dovecot): incubator owner wheregroup@ + info@ delete access (#251) 2026-09-02 12:10:51 +01:00
Andriy OblivantsevandeSlider b0dd75b0ff fix(webmail): persist Roundcube sqlite in volume (/var/roundcube/db) 2026-09-01 16:33:40 +01:00
eSlider f424b9d324 Merge pull request 'feat(dovecot): shared mailboxes — info@ reads all accounts (#79)' (#4) from feat/shared-mailboxes#79 into main 2026-09-01 16:03:41 +01:00
eSlider 2bb6ed310e feat(dovecot): shared mailboxes — info@ reads all accounts (#79)
Dovecot ACL + shared namespace (shared/%%u/), acl_shared_dict in mail-state,
idempotent user-patches.sh grants info@ read-only (lookup read) on every
mailbox of ano@, andriy.oblivantsev@, postmaster@ and pre-subscribes the
shared folders so Roundcube's subscribed folder list shows them. Delivery and
passwords untouched; other accounts see no shared folders.
2026-09-01 16:02:52 +01:00
Andriy OblivantsevandeSlider c9bc594031 chore(mail): remove mail-admin (superseded by Dovecot shared folders) (#76) 2026-09-01 15:35:07 +01:00
eSlider 403c79c3e4 Merge pull request 'feat(webmail): Roundcube web UI (#74)' (#2) from feat/webmail#74 into main 2026-09-01 15:09:01 +01:00
eSlider 5a46ba4b33 feat(mail-admin): read-only account view for mail.produktor.io (#74)
- admin/: Go stdlib-only HTTP viewer, lists accounts from
  config/postfix-accounts.cf with per-mailbox message counts (INBOX and
  total, same numbers doveadm reports) and storage; quota from
  dovecot-quotas.cf; Basic Auth from .env; offline tests vs fixtures
  (go test -race ./...)
- compose: mail-admin service, build admin/Dockerfile, publishes
  127.0.0.1:19945 / 172.17.0.1:19945; config and mail-data mounted :ro,
  no docker socket
- NPM proxy host 66: location /admin/ -> 172.17.0.1:19945
- README: account admin section
2026-09-01 15:07:55 +01:00
eSlider e00c6950ed feat(webmail): add Roundcube web UI for mail.produktor.io (#74)
- webmail service (roundcube/roundcubemail) in compose: IMAP/SMTP
  STARTTLS against the DMS container via mail.produktor.io FQDN
  (container alias fails TLS peer-name verification)
- NPM proxy host 66 -> 172.17.0.1:19944, port 19944 published on
  127.0.0.1 + 172.17.0.1
- ROUNDCUBEMAIL_DES_KEY from .env (required)
- README: Web UI section, account list, client settings
2026-09-01 14:21:36 +01:00
eSlider f3ea090501 Merge pull request 'fix(fail2ban): ignoreip docker subnet /20 (#113)' (#1) from fix/fail2ban-ignoreip#113 into main 2026-08-25 22:01:37 +01:00
eSlider 05540c2a8d fix(fail2ban): ignoreip real docker subnet /20 (#113) 2026-08-25 19:58:57 +01:00
eSlider 7d874c5117 TLS: letsencrypt DNS-01 via Dynadot hook; fail2ban ignoreip guard (#114)
- scripts/dynadot-dns.sh: DNS-01 hook (snapshot -> append TXT -> restore);
  set_dns2 wants lowercase record types, ResponseCode checks on deploy/clean
- compose: SSL_TYPE=letsencrypt, mount tls/letsencrypt/<domain> ->
  /etc/letsencrypt/live/<domain>; drop-in jail.d/ignoreip.local so the
  postfix jail can't ban the docker bridge gateway (host self-DoS)
- cert issued for mail.produktor.io (Let's Encrypt, ECDSA); renewal via
  acme.sh cron + reloadcmd (postfix/dovecot reload)
2026-08-22 22:46:24 +01:00
eSlider 8baa303760 test: add internal send->receipt e2e for mail.produktor.io (#104)
Submit info@ -> andriy.oblivantsev@ via SMTP AUTH :587 (openssl s_client),
poll doveadm until arrival (30s), assert DKIM-Signature present on the
delivered copy. Green: submission+receipt+signature all pass.
2026-08-22 14:36:32 +01:00
Andriy Oblivantsev f5fb85be95 docker-mailserver stack for produktor.io (#77) 2026-08-22 12:45:50 +01:00