Many of you know how to secure your email between your mail client and your computer. But if you run your own mail server, did you know you can secure email between servers? Many servers support TLS encryption for outgoing connections, which will protect your mail between your server and the next one. For my favorite mail server, Postfix, add this to your
smtp_tls_security_level = may
This will enable “opportunistic” TLS for outbound connections, meaning it will use encryption if the remote server supports it, otherwise it will transmit it unencrypted. If you’re really paranoid and don’t want to talk to servers that don’t support encryption, you can change
secure to ensure that the remote end uses encryption. To ensure that your server listens for TLS requests, add this:
smtpd_tls_security_level = may smtpd_tls_cert_file = ... smtpd_tls_key_file = ...
Note the small difference between
smtpd_. The cert and key parameters configure your SSL certificate. You can also use
encrypt here instead of
may to force encryption for clients, but this isn’t recommended for a public Internet server. By default, if Exim is compiled with TLS support, it will attempt TLS for outbound connections. If you want it to accept TLS, though, you’ll have to set:
tls_advertise_hosts = * tls_certificate = ... tls_privatekey = ...
It’s important to note that even with these configurations, you can’t guarantee that your mail is completely encrypted in transit, since your mail could be transmitted between several servers. It also doesn’t prevent eavesdropping on the servers themselves. If you want to ensure that only the recipient can read your mail, you should use something like PGP. I’ll leave other mail servers as an exercise to the reader.