Jak se pošta centralizuje
Co se dozvíte v článku
Provozovat v dnešní době vlastní poštovní server je čím dál náročnější. Neustálé řešení, proč někdo odmítá přijímat vaše zprávy, je kolikrát nad síly lidí, kteří mají poštu na starosti. Často tak dochází k centralizaci služeb u velkých poskytovatelů, jako jsou Google Workspace, či Microsoft 365.
Lidé si myslí, že když za službu platí, nic se jim nemůže stát. Ale věděli jste, že Google zablokuje libovolnou schránku na svém serveru na 24 hodin, pokud překročíte nastavené limity? Ty navíc nelze navýšit bez ohledu na verzi, kterou používáte. Po uplynutí 24 hodin dojde k obnově limitů, ale zprávy poslané během doby blokace se už neobnoví a odesílatel je bude muset poslat znova.
Pokud se někdo odvážný pokusí zprovoznit svůj poštovní server, brzy zjistí, že je potřeba udržovat veliké množství rozličných programů propojených různými protokoly. K posílání zpráv slouží například Postfix, k uživatelskému přístupu pak Dovecot, generování podpisů zajistí OpenDKIM a tak podobně.
Pak tu máme ještě zabezpečení DNS, obnovu certifikátů, koukání do logů a podobné problémy. Třeba se vám sice automaticky obnovil certifikát, ale Dovecot o tom neví a mnoho podobných otravných provozních problémů.
Co je Mox a proč je zajímavý
V roce 2021 začal být nizozemský softwarový inženýr na volné noze Mechiel Lukkien nespokojený se situací a začal dělat na svém projektu Mox. Vadilo mu, že většina poštovních serverů má svoje komponenty napsané v jazyce C (kam spadají výše zmíněné Postfix i Dovecot) a dle jeho slov tak může malinkatá chyba způsobit obrovské následky.
Kód je navíc velmi složitý, jak na sebe programy nabalují nové funkce a protokoly, jak se postupně vyvíjelo zabezpečení či doručování pošty. Tak začal svůj projekt psát v jazyce Go. První verze vyšla v roce 2023 a od té doby autor neustále Mox zlepšuje, opravuje a přidává nové funkce.
Zatím poslední verze 0.0.15 vyšla 18. dubna 2025. Nízké číslo verze může budit obavy, ale server je použitelný a stabilní, byť zatím málo rozšířený.
Co všechno Mox řeší
Mox je bezpečný poštovní server, který implementuje všechny moderní požadavky do jednoho souboru, který se snadno používá a udržuje. Zdrojový kód je vydán pod licencí MIT. Na loňské i letošní konferenci FOSDEM měl autor přednášku. Na letošním InstallFestu měl o Moxu přednášku Radomír Polách, její shrnutí si můžete přečíst v článku Poštovní server jednoduše, otevřený kryptočip a vlastní NAS, InstallFest 2025 či se můžete podívat na záznam.
Mox podporuje všechny moderní záležitosti, co se zabezpečení poštovních serverů týče: DKIM, DMARC, DANE, SPF či EAI. Ve spolupráci s ACME a Let’s Encrypt zvládá vygenerování či obnovu certifikátů, dále obsahuje ochranu proti spamu a vestavěný webový server. Nemá problém s výkonem, Radomír Polách na své přednášce řekl, že ho provozuje doma na Raspberry Pi.
Praktický popis instalace a zprovoznění
Instalace je velice velmi jednoduchá, stačí si ze stránek xmox.nl stáhnout binární soubor a spustit ho. Zatím není součástí běžných balíčkovacích služeb jednotlivých distribucí, ale výhoda binárních souborů v Go je jejich statická kompilace, kdy je možné je provozovat v Dockeru, či jako službu systemd.
Po stažení stačí jen soubor o zhruba velikosti 40 MB označit jako spustitelný a jednoduchým příkazem ho spustit.
# ./mox quickstart [email protected]
Mox hned sám vygeneruje vše potřebné, jako jsou odpovídající záznamy do DNS, definice služby v systemd, vygeneruje heslo administrátora a poradí, jak se pomocí SSH připojit na lokální webový server. Vše se uloží do souboru quickstart.log
. Autor by chtěl tento proces do budoucna zautomatizovat.
# ssh -L 8080:localhost:80 you@yourmachine
V adresáři s Moxem se vytvoří dva nové podadresáře. Ten s názvem config
obsahuje klíče DKIM, haš hesla administrátora a konfigurační soubory. Další je adresář data
, ve kterém se nacházejí jednotlivé zprávy uživatelů, certifikát Let's Encrypt, fronta zpráv, složka pro dočasné soubory a nejrůznější databáze nutné pro vlastní chod poštovního serveru.
Zkušenosti s nasazením
Pokud na serveru již běží stávající webový server, lze Mox nastavit tak, aby mu původní server dělal reverzní proxy. Příkaz pro to je:
# mox quickstart -existing-webserver
V případě, že si nejste jisti, zda všechno poběží, jak má, dá se Mox vyzkoušet i lokálně příkazem mox localserve
. V takovém případě Mox spustí lokální instanci, která běží na portech vyšších o 1000, takže web na místo portu 80 běží na portu 1080, smtp místo 25 na 1025 a tak podobně.
Ukázka záznamů DNS
V následujících ukázkách si předvedeme, jak vypadají jednotlivé záznamy DNS vygenerované pro doménu example.com
; Outgoing messages will be signed with the first two DKIM keys. The other two ; configured for backup, switching to them is just a config change. 2025a._domainkey.example.com. TXT "v=DKIM1;h=sha256;k=ed25519;p=bRGAIq+E5Hl0Pdd1V6P4Xa9ScqJLAQb5AUyL6BcfksI="
; NOTE: The following is a single long record split over several lines for use ; in zone files. When adding through a DNS operator web interface, combine the ; strings into a single string, without (). 2025b._domainkey.example.com. TXT ( "v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsEpNvv5TDyOPajgm2K/v0HR+S3B24ap2Jyh5X" "g+Mn3DiwvLhbHxQVIMxWLtZ5VkpVSRLFoART/Dam6VUxyhsRtvzf28yUEn2sQ9qpYGWdgRxIcvloX24GmnZBMu9TTlpOJd3p99SE" "E+CTQ9GjbIuH2jKn2q4qhGiioKUsX8WPRYMhu5DGts6rmnDbWraw2TE6iiMMOXx2I4bSguw7vLs1VmCmYI5EpeHKL3919LMu5c8/" "NdIQ9zockFB6VgrKNo9U3ByooMqZ/lJOvBi5XOa1wBrZFlcTNr0sPIlnitadTihZCr0SEH8Afs4PAHMT6sptLqZRzeQDCzu5HKTn" "AFWrQIDAQAB" )
2025c._domainkey.example.com. TXT "v=DKIM1;h=sha256;k=ed25519;p=BQmuJChM9gnDsl+/FHM6V7u9JXzeAVyjDG5aNaQ1pQ0="
; NOTE: The following is a single long record split over several lines for use ; in zone files. When adding through a DNS operator web interface, combine the ; strings into a single string, without (). 2025d._domainkey.example.com. TXT ( "v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApRBUIHPzM2RquLgptxjLR8sKpnNVjVd774NHs" "l74/bInKfp36rkbCyTmBDfzvt4u5v4GdBmZ0gm623B88MSKYlQlCGolIPEOsducx1OZPjBvnvtksw2kscy6Go3TqFaTWWIkYxMDX" "KMOcnV8DuoFHq5Kolnvb9+fGOI/fdh6PKHzYkPYb6/aDINJAM5GASqSD6CUyT2xCZASEhIZplGl8nYI1R+s2AVCsFzcCMn4zvFEZ" "bYIh0zEwAwf5ZipPcM1z8CORMbRU0vLQzfRpZXdtivu+fwc7SpBDSBltUPR33iXD5ZnbIie5pLf1p+UEqeO27R5XYsfWxHWXnBbk" "JwM6QIDAQAB" )
; Specify the MX host is allowed to send for our domain and for itself (for DSNs). ; ~all means softfail for anything else, which is done instead of -all to prevent older ; mail servers from rejecting the message because they never get to looking for a dkim/dmarc pass. example.com. TXT "v=spf1 ip4:23.215.0.136 ip6:2600:1406:3a00:21::173e:2e65 mx ~all"
; Emails that fail the DMARC check (without aligned DKIM and without aligned SPF) ; should be rejected, and request reports. If you email through mailing lists that ; strip DKIM-Signature headers and don't rewrite the From header, you may want to ; set the policy to p=none. _dmarc.example.com. TXT "v=DMARC1;p=reject;rua=mailto:[email protected]!10m"
; Remote servers can use MTA-STS to verify our TLS certificate with the ; WebPKI pool of CA's (certificate authorities) when delivering over SMTP with ; STARTTLSTLS. mta-sts.example.com. CNAME a23-215-0-136.deploy.static.akamaitechnologies.com. _mta-sts.example.com. TXT "v=STSv1; id=20250429T121032"
; Request reporting about TLS failures. _smtp._tls.example.com. TXT "v=TLSRPTv1; rua=mailto:[email protected]"
Aktualizace na novou verzi
Když vyjde nová verze, je sice aktualizace jednoduchá, ale použití menšího množství příkazů se nelze vyhnout. Postupně si je projdeme.
Prvním příkazem se vytvoří dočasná záloha:
$ mox[stará verze] backup data/tmp/testupgrade
Druhým se ověří ve staré verzi Moxe, jestli je záloha konzistentní a v pořádku:
$ mox[stará verze] verifydata data/tmp/testupgrade data/tmp/testupgrade: OK
Pak je možné ověřit zálohu i v nové verzi:
$ mox[nová verze] verifydata data/tmp/testupgrade NOTE: The backup was made with mox version "v0.0.14-go1.24.2", while verifydata was run with mox version "v0.0.15-go1.24.2". Database files have probably been modified by running mox verifydata. Make a fresh backup before upgrading. data/tmp/testupgrade: OK
Pokud vše úspěšně projde, stačí opět zazálohovat soubory, následně přepsat starou verzi tou novou a restartovat poštovní server. Při předchozí kontrole dochází k přepsání zálohovaných dat a ty pak nelze použít v nové verzi. V budoucnu by chtěl autor tento postup zjednodušit tak, aby byl na kliknutí ve webovém rozhraní a vše se udělalo samo.
Pokud je potřeba při aktualizaci v konfiguraci něco změnit, je o tom v poznámkách k vydání podrobný zápis. Mox si umí vydání nové verze sám pohlídat. Pokud je v konfiguraci nastaveno CheckUpdates
na true
, Mox jednou denně zkontroluje pomocí DNS dotazu na TXT záznam v doméně _updates.xmox.nl
dostupnost nové verze. Pokud zjistí, že nová verze je k dispozici, dá vědět správci do poštovní schránky.
_updates.xmox.nl. 1200 IN TXT "v=UPDATES0;l=v0.0.15"
Praktické zkušenosti
Jednou z výhod Moxe je, že je součástí také webový server s poštovním rozhraním. Vypadá sice trochu spartánsky, ale je plně použitelný. Dokonce podporuje i takové srandy, jako je EAI. Pro snazší provoz s poštovními klienty si Mox vygeneruje potřebné záznamy do DNS. Ty pak vypadají takto:
; Client settings will reference a subdomain of the hosted domain, making it ; easier to migrate to a different server in the future by not requiring settings ; in all clients to be updated. mail.example.com. CNAME a23-215-0-136.deploy.static.akamaitechnologies.com. ; Autoconfig is used by Thunderbird. Autodiscover is (in theory) used by Microsoft. autoconfig.example.com. CNAME a23-215-0-136.deploy.static.akamaitechnologies.com. _autodiscover._tcp.example.com. SRV 0 1 443 a23-215-0-136.deploy.static.akamaitechnologies.com. ; For secure IMAP and submission autoconfig, point to mail host. _imaps._tcp.example.com. SRV 0 1 993 a23-215-0-136.deploy.static.akamaitechnologies.com. _submissions._tcp.example.com. SRV 0 1 465 a23-215-0-136.deploy.static.akamaitechnologies.com.
Mox samozřejmě použije správný reverzní záznam adresy, kde běží. Do DNS je možné přidat i záznamy o nepoužívání protokolů POP3 a nezabezpečené verze IMAP. Také lze využít CAA záznam, který říká, že certifikáty pro danou doménu budou vystavovány výhradně pomocí autority Letʼs Encrypt.
; Next records specify POP3 and non-TLS ports are not to be used. ; These are optional and safe to leave out (e.g. if you have to click a lot in a ; DNS admin web interface). _imap._tcp.example.com. SRV 0 0 0 . _submission._tcp.example.com. SRV 0 0 0 . _pop3._tcp.example.com. SRV 0 0 0 . _pop3s._tcp.example.com. SRV 0 0 0 . ; Optional: ; You could mark Let's Encrypt as the only Certificate Authority allowed to ; sign TLS certificates for your domain. example.com. CAA 0 issue "letsencrypt.org" ; ; Note: After starting up, once an ACME account has been created, CAA records ; that restrict issuance to the account will be suggested.
V administraci lze dělat spoustu věcí. Od zakládání uživatelských účtů, nastavování aliasů, až po různé nastavení filtrů pro nevyžádanou poštu. Rozhraní by si zasloužilo trochu graficky doladit, třeba pomocí lepších kaskádových stylů, ale dá se zvyknout i na to stávající.
Pokud někomu nevyhovuje vertikální rozdělení, kdy vlevo je seznam zpráv a vpravo okno pro čtení, lze webové rozhraní přepnout do režimu nahoře seznam a dole okno pro čtení, či nastavit, aby se zprávy řadily do vláken.
Výhled do budoucna
Autora podle vlastních slov čeká ještě hodně práce. Chce se věnovat neustálému vylepšování a zdokonalování Moxe. V plánu má přidat kalendář, automatické odpovědi (mimo kancelář), použití záložního MX serveru, jednoduchého průvodce prvním spuštěním krok za krokem a další funkce.
Co naopak zatím v plánu není, je podpora POP3, SMTP relay či push notifikací pro iOS. Autor ale nevylučuje, že se to nemůže v budoucnu změnit.
(Autorem obrázků je Tomáš Tichý.)