Mailsikkerhet er viktig i 2025, og det finnes mange mekanismer for å verifisere at mail kommer fra avsenderen den påstår at den er fra. SPF, DKIM, DMARC, og MTA-STS er blant disse, og det er viktig å holde seg oppdatert på hva som skjer innenfor dette feltet. Hvis ikke kommer mailkartellene (Microsoft, Google, etc) til å avvise mailer du sender eller merke dem som spam, og alt blir bare trist.
Siden jeg kjører mailcow som mailsystem, så slipper jeg heldigvis å tenke så mye på å sette sammen en haug komponenter til noe som funker, men det må fremdeles vedlikeholdes og oppdateres, men det er fremdeles enkelte ting som må legges til manuelt. En av disse er MTA-STS.
MTA-STS står for Mail Transfer Agent Strict Transfer Security og er definert i RFC8461. MTA-STS er motparten til DNSSEC/DANE og har som målsetning å tvinge mailservere til å kommunisere via TLS-beskyttede forbindelser. Dette gir flere fordeler:
MTA-STS og DNSSEC/DANE kan implementeres og brukes hver for seg, eller man kan implementere begge. Begge tilbyr samme nivå av sikkerhet for samme type problemer. Derfor er det viktig å implementere minst en av dem for å hindre angripere og andre idioter å re-route mailen din for å lese og/eller endre den i transit.
MTA-STS krever to ting:
Guiden under forutsetter følgende:
Endre alle forekomster av mail.example.com med FQDN for din fungerende mailserver.
Endre alle forekomster av "otherdomain.com" til det/de andre domenet/domenene MTA-STS skal implementeres for. Hvis du har domene1.no og domene2.no, opprett TO sett oppføringer og legg dem inn i sine respektive sonefiler.
Endre report@example.com til den mailkontoen du ønsker å motta rapporter på. Hvis disse rapportene skal parses av automatiserte systemer som Viesti Reports eller parsedmarc-dockerized kan det være hensiktsmessig å opprette en dedikert mailkonto (eller to) for dette.
Vi starter med å legge inn 3 DNS-oppføringer i DNS-sonen der mailserveren er definert. Det antas her at mailserveren "mail.example.com" har en A- eller AAAA-oppføring.
mta-sts.example.com. 120 IN CNAME mail.example.com.
_mta-sts.example.com. 120 IN TXT "v=STSv1; id=20220324000000Z"
_smtp._tls.example.com. 120 IN TXT "v=TLSRPTv1; rua=mailto:report@example.com
"
Deretter, opprett de følgende 3 DNS-oppføringene for hvert domene du hoster mail for på mailcow-serveren din.
mta-sts.otherdomain.com
. 120 IN CNAME
mail.example.com _mta-sts.otherdomain.com
. 120 IN CNAME
_mta-sts.example.com _smtp._tls.otherdomain.com
. 120 IN CNAME
_smtp._tls.example.com
120 er antall sekunder oppføringen er gyldig før den refreshes (TTL). Jeg liker å ha kort TTL på oppføringer som potensielt må endres mens jeg setter dem opp slik at jeg ikke må vente en time eller mer før endringen blir synlig. På denne måten tar det 2 minutter mellom hver endring. Når alt er på plass og fungere som det skal, kan TTL endres til 3600 sekunder eller mer.
Naviger til mailcow-mappen (skal være /opt/mailcow-dockerized om du har fulgt installasjonsmanualen for mailcow). Naviger deretter til data/web/.well-known/ og opprett en fil som heter mta-sts.txt med følgende innhold:
version: STSv1
mode: enforce
max_age: 172800
mx: mail.example.com
mx: *.example.com
Eksempel fra Google: https://mta-sts.google.com/.well-known/mta-sts.txt
Mailcow tilbyr en enkel måte å automatisk tildele riktig sertifikat for hvert av de konfigurerte maildomenene (i mailcow-webUIet).
Gå til mailcow-mappen /opt/mailcow-dockerized og åpne mailcow.conf i en teksteditor. Søk etter eller scroll som en huleboer til du finner ADDITIONAL_SAN og ADDITIONAL_SERVER_NAMES, og legg til mta-sts.* til begge variablene, som dette:
# ...
ADDITIONAL_SAN=mta-sts.*
# ...
ADDITIONAL_SERVER_NAMES=mta-sts.*
Hvis du allerede har noe definert der, f.eks. hvis du har lagt til webmail.example.com på ADDITIONAL_SAN slik jeg har, så blir det seende slik ut:
# ...
ADDITIONAL_SAN=webmail.example.com mta-sts.*
# ...
ADDITIONAL_SERVER_NAMES=mta-sts.*
Lagre filen og kjør deretter docker compose up -d fra mailcow-mappen. Det kan ta noen minutter før alle sertifikater blir deployet fra Let's Encrypt.
Hvis alt virker, skal du nå kunne åpne https://mta-sts.example.com/.well-known/mta-sts.txt for hvert domene du har i mailcow. Hvis ikke skyldes dette enten at DNS-oppføringene ikke er synlige enda eller at TLS-sertifikatene for websidene ikke har blitt deployet enda. Vent en stund, kjør docker compose restart acme-mailcow og prøv igjen.
Du kan også gå til https://checktls.com, skrive inn maildomenet ditt, klikke på "more options", krysse av for "check MTA-STS" og klikke "Run test". Hvis alt er i orden skal du få opp et bilde som ser omtrent slik ut:
De gode nyhetene er at du nå har implementert MTS-STS-policyen for maildomenene dine. På den annen side, dette er kun policyen. Andre mailservere vil bruke denne policyen til å tvinge kryptert kommunikasjon. Mailcow vil dog ikke sjekke MTA-STS-policyen for andre mailservere den prøver å kontakte.
Det er en åpen github issue på mailcow-repoet om å fullt ut implementere MTA-STS-sjekker (se #1809).