Admin Libre - Administración de sistemas y redes

Configuración de MTA-STS con httpd
Por Francisco Gaitán el 26 de Abril de 2022

MTA-STS es el acrónimo de MTA Strict Transport Security y sirve para comunicar a otros servidores de correo que prefieres que la comunicación sea exclusivamente cifrada con TLS. Queda definido en el RFC 8461.

Como inconveniente está el uso de HTTP para una función de SMTP.

Referencias

Qué necesitas

  • Entrada DNS para MTA-STS
  • Servidor web con certificado SSL
  • Archivo de políticas mta-sts.txt

Entrada DNS para MTA-STS

Necesitas crear una entrada DNS de tipo A y AAAA con la IP del servidor de correo y otra de tipo TXT:

mta-sts.example.com. IN A 203.0.113.1
mta-sts.example.com. IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334
_mta-sts.example.com. IN TXT "v=STSv1; id=20220426"

El campo id es un identificador del archivo de políticas. He usado la fecha actual.

Servidor web con certificado SSL

Usaré el servidor web httpd(8) y un certificado válido que crearé con acme-client(1), lo cual queda fuera del alcance de este tutorial.

La entrada correspondiente para que el archivo mta-sts.txt cargue en la dirección https://mta-sts.example.com/.well-known/mta-sts.txt sería la siguiente (tomada del archivo de ejemplo /etc/examples/httpd.conf):

server "mta-sts.example.com" {
        listen on * port 80
        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }
        location * {
                block return 302 "https://$HTTP_HOST$REQUEST_URI"
        }
}

server "mta-sts.example.com" {
        listen on * tls port 443
        tls {
                certificate "/etc/ssl/mta-sts.example.com.fullchain.pem"
                key "/etc/ssl/private/mta-sts.example.com.key"
        }
        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }
        location "/.well-known/mta-sts.txt" {
                root "/mta-sts"
                request strip 1
        }
        location * {
                block return 404
        }
}

Archivo de políticas mta-sts.txt

Usaré el siguiente archivo de políticas:

Es recomendable usar el modo testing antes del modo enforce y leer los reportes para comprobar que todo esté correcto. Esta es la configuración que uso:

version: STSv1
mode: enforce 
mx: mail.example.com
mx: mx-backup.example.com
max_age: 86400 
  • El modo enforce hace que requiera autenticación y encriptado al conectarse a servidores externos
  • Las líneas mx listan los servidores de correo del dominio
  • La variable max_age define el tiempo en segundos durante la política es válida

Necesitaré convertir el texto de formato UNIX a formato DOS para que tenga retorno de carro al final de cada línea, para lo cual usaré dos2unix, disponible como port:

# pkg_add dos2unix

Y lo uso:

$ unix2dos mta-sts.txt

Este archivo se guarda en el directorio /var/www/mta-sts/ con el nombre mta-sts.txt.

Reportes SMTP TLS

Si usas MTA-STS es recomendable configurar también los reportes SMTP TLS para saber si las sesiones TLS son correctas o hay algún problema. Esto se describe en el RFC 8460 y yo lo hago añadiendo esta entrada TXT al DNS:

_smtp._tls.example.com. IN TXT "v=TLSRPTv1;rua=mailto:reports@example.com;"

De esta forma los reportes llegan a la dirección de correo reports@example.com.

Destacado

Misión

Admin Libre promueve el uso de software libre y de calidad tanto en los servidores como en el hardware de red con el objetivo de hacer los sistemas más seguros y auditables.