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.

Esta configuración tiene el inconveniente de necesitar un servidor web por lo que a día de hoy no lo uso ni lo recomiendo por las razones que explica el artículo Why not use the new MTA-STS?.

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 que va dentro del bloque server es la siguiente:

location "/.well-known/mta-sts.txt" {
	root "/mta-sts"
	request strip 1
}

Para el certificado usaré un nombre alternativo en acme-client.conf(5):

domain mail.example.com {
        alternative names { mta-sts.example.com }
        domain key "/etc/ssl/private/mail.example.com.key"
        domain full chain certificate "/etc/ssl/mail.example.com.fullchain.pem"
        sign with letsencrypt
}

Una vez generado el certificado con acme-client(1) usando la configuración que indica la documentación el archivo httpd.conf definitivo quedaría así:

server "mail.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 "mail.example.com" {
        listen on * tls port 443
        tls {
                certificate "/etc/ssl/mail.example.com.fullchain.pem"
                key "/etc/ssl/private/mail.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
        }
}

La idea es que cargue el archivo mta-sts.txt que crearé a continuación en la URL https://mta-sts.example.com/.well-known/mta-sts.txt.

Archivo de políticas mta-sts.txt

Este archivo se guarda en el directorio /var/www/mta-sts/ con el nombre mta-sts.txt. 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: 3600 
  • 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 los cuales 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 para que cada línea termine con el carácter CRLF (^M):

$ unix2dos mta-sts.txt

Una vez hecho esto el archivo se verá así (ojo, ^M es un sólo carácter tal y como lo escribe el programa unix2dos):

version: STSv1^M
mode: enforce^M
mx: mail.example.com^M
mx: mx-backup.example.com^M
max_age: 3600^M

La página esmtp.email es útil para comprobar la configuración, aunque lo ideal es comprobar también los reportes que configuraré a continuación.

Reportes SMTP TLS

Si usas MTA-STS es recomendable configurar también los reportes SMTP TLS (RFC 8460) para saber si las sesiones TLS son correctas o hay algún problema. Su configuración es tan simple como añadir este recurso TXT a la zona 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

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org