This guide will show you how to deploy MTA-STS and TLS-RPT on your own. If you want us to handle the setup and maintenance of your MTA-STS policies, check out the MTA-STS section of our Dynamic Services setup guide.
Deploying MTA-STS is relatively straight-forward once you understand the components involved. Here’s an overview of what we’ll cover:
Draft and publish the policy on a public, secured web server
Enable SMTP TLS-RPT via a TXT record
Signal MTA-STS support via a TXT record
Before you start the deployment, if you manage your own email server, make sure your MX records accept inbound TLS connections (according to Google’s Transparency report, about 90% of servers currently do), make sure the servers in your MX records use TLS version 1.2 or later, and that the MX server TLS certificates:
Match the domain name used by the inbound mail server (the server in your MX records)
Are signed and trusted by a root certificate authority
Are not expired
These last three go hand in hand, and are very likely already managed by your email host. You should only have to worry about them if you host your own mail server; if you use a third party hosted service like G Suite, Microsoft 365, Fastmail, etc. these steps are already done for you.
1. Draft and publish the policy on a public, secured web server
Now, to start the deployment, we will proceed to draft the policy. The policy itself is pretty straight forward; here’s a sample policy:
The important bits are mode, mx and max_age, as version will (for now) always be the same.
Mode can be none, testing or enforce
none disables MTA-STS
testing tells external servers sending to you to evaluate the policy, requests reports (via TLS-RPT), but does not enforce connection security required by MTA-STS.
enforce tells external servers to verify they’re connecting to an MX listed in the policy, and the SMTP connection is both encrypted (using TLS) and authenticated (that the server has a valid, signed certificate).
If the connection is not both encrypted and authenticated:
Servers that support MTA-STS will not send mail to your domain.
Servers that don’t support MTA-STS continue to send messages to your domain over SMTP connections as they normally do, but they may not be encrypted.
We recommend keeping the policy in testing mode for at least a month. That way you can get familiar with MTA-STS and fix any issues that may be brought up by the STS reports, if any.
mx lists the MX records that serve email for the domain. In almost all cases, it’s the same records you already have published in your DNS.
To specify servers that match a naming pattern, use a wildcard. The wildcard character replaces one leftmost label only, for example: *.domain.com or *.mail.domain.com
max_age is the amount of time the sending MTA will cache the policy. The RFC suggests a value of 1 or 2 weeks (between 604800 and 1209600 seconds), but it can be anything, really.
Now that we have the policy drafted, we need to publish it. The policy has to be uploaded to a public-facing web server and it must be served over HTTPS with a signed, trusted certificate (eg: Let’s Encrypt).
Add a subdomain to your domain in the form of mta-sts.domain.com and point it to the web server
Create a directory named .well-known in the subdomain.
Upload the policy file you created to the .well-known directory with mta-sts.txt as the file name.
Your policy should be available at https://mta-sts.domain.com/.well-known/mta-sts.txt
Now, the last step consists of adding two DNS records: one for TLS-RPT and one to signify that you support MTA-STS and they’re both simple TXT records.
Let’s start with TLS-RPT. In order to receive reports you will need a mailbox where you will receive them, or you can point them to your OnDMARC address (the same as for your DMARC record) and we'll parse and display them for you.
The first TXT record should be added like this:
_smtp._tls.example.com. 900 IN TXT "v=TLSRPTv1; rua=mailto:[email protected]"
TTL: 900 (or your default value)
Value: v=TLSRPTv1; rua=mailto:[email protected]
3. Signal MTA-STS support via a TXT record
Lastly, we need to publicize our support for MTA-STS. The TXT record should be added as follows:
_mta-sts.example.com. 900 IN TXT "v=STSv1; id=1575556993"
Host: _mta-sts (note the underscore at the beginning)
TTL: 900 (or your default value)
Value: v=STSv1; id=1575556993
Update the id to a new value every time you change your MTA-STS policy. External servers use the id value to determine when your policy changes. We usually use the epoch timestamp for the id value, it’s unique enough and lets you know when was the last time it was changed.
And that’s it! You’ve enabled both MTA-STS and TLS-RPT, and you’re on your way to supporting secure, un-tampered SMTP transmissions. Should you need any further support around security protocols, don't hesitate to get in touch with our team.