En ese documento describimos cómo realizar una instalación básica de un servidor de correo electrónico basado en Postfix para que consiga la máxima puntuación en las tres categorías evaluadas por MECSA: confidencialidad en el envío/recepción, robo de identidad y phishing e integridad de mensajes. Esta guía ha sido realizada para Ubuntu Server 24.04 LTS.
La forma más directa de habilitar y configurar DNSSEC en el dominio es utilizar un servicio de hosting de DNS que ofrezca soporte de DNSSEC. Como alternativa, en versiones futuras de esta guía describiremos como instalar un servicio DNS con soporte DNSSEC. Antes de empezar la instalación, nuestro dominio debe tener asignado un registro MX (como mínimo) con una dirección IP asignada (registro A). En nuestro servicio DNS de ejemplo (ya sea local o externo) crearemos un registro MX para el dominio model.dcslab.eu: 5 mx.model.dcslab.eu. El primer valor (5) corresponde a la prioridad, y el segundo al hostname de la MTA. Por cada registro MX que tengamos, crearemos un registro A para resolver el registro MX en una direción IP, por ejemplo:
mx.model.dcslab.eu. IN A 139.191.36.5
General type of mail configuration? | Internet Site |
System mail name | model.dcslab.eu |
root and postmaster mail recipients | model (root user) |
destinations to accept mail for (mydestinations) | model.dcslab.eu |
force synchronous updates on mail | yes |
local networks (mynetworks) | 192.168.1.0/24 127.0.0.1 |
Mailbox Size limit (bytes) | 0 (means no limit) |
Local address extension character | (no address extensions) |
Internet Protocols to use | IPv4 |
Creamos un alias para recibir los informes de DMARC.
Para configurar el soporte de StartTLS en Postfix es necesario obtener un certificado firmado por una Autoridad de Certificación (CA) reconocida y realizar una serie de cambios en los ficheros de configuración de PostFix. En lo referente a la obtención de un certificado firmado por una CA válida, en este ejemplo usaremos Let's Encrypt como CA para generar un certificado válido gratuito. Proceso de instalación se basta en la guía oficial de instalación para la plataforma Debian.
La aplicación para pedir un certificado requiere la utilización del puerto TCP 80 para recibir peticiones entrantes. Si existe una aplicación ejecutándose en este puerto será necesario detenerla antes de continuar. Una vez hayamos recibido el certificado, se puede renudar el servicio que escuchaba en dicho puerto. En la solicitud del certificado es necesario especificar correctamente el nombre (FQDN) del servicio en el que va a ser utilizado. En este caso hemos especificado mx.model.dcslab.eu, correspondiente al FQDN de nuestro servicio de correo (referenciado en el registro MX).
Para configurar SPF es necesario crear un registro nuevo en el DNS, de manera que cualquier otro servidor de correo electrónico (MTAs) pueda usarlo cuando reciba correos electrónicos de nuestro dominio. De la misma manera, es necesario configurar Postfix para que valide los correos electronicos remitidos a nuestro dominio utilizando los registros SPF del dominio emisor. Para ello es necesario instalar y configurar una aplicación usando la herramienta apt-get
Empezaremos creando un registro SPF con una política simple, indicando los servidores autorizados a enviar correos electrónicos en nombre del dominio model.dcslab.eu
IN TXT "v=spf1 mx -all"
Después instalaremos y configuraremos el paquete postfix-policyd-spf-python:
# SPF /etc/postfix/master.cf configuration
#
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf
# SPF /etc/postfix/main.cf configuration
policy-spf_time_limit = 3600s
smtpd_helo_restrictions = reject_invalid_hostname
smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination, check_policy_service unix:private/policy-spf
La instalación y configuración de DKIM requiere 3 pasos:
Una vez hayamos generado las claves, podemos usar la salida para crear los correspondientes registros TXT en la DNS de nuestro dominio. El subdominio al cual irán asociados es <selector>._domainkey.<our_domain>.
modelSelector._domainkey IN TXT ("v=DKIM1; h=sha256; k=rsa; s=email; p=MIGf...QAB")
Después de la generación de claves y la creación del registro TXT es necesario configurar opendkim para trabajar con postfix.
#key_name domain:selector:/path/to/private_key_file
model.dcslab.eu model.dcslab.eu:modelSelector:/etc/opendkim/private_keys/modelSelector.key
#signer_of_the_message key_name
*@model.dcslab.eu model.dcslab.eu
#list-of-hosts (ips and hostnames)
127.0.0.1
model.dcslab.eu
192.168.1.0/24
Syslog yes
SyslogSuccess yes
LogWhy yes
UMask 002
OversignHeaders From,Subject
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
SignatureAlgorithm rsa-sha256
AutoRestart Yes
UserID opendkim:opendkim
SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"
# OpenDKIM milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
La configuración de DMARC es similar a la de DKIM, con la excepción a la generación de claves.
En el caso de DMARC, el registro TXT está ligado al subdominio _dmarc.<our_domain>.. El contenido básico de la política DMARC es la versión, la política a seguir (aceptar, rechazar, ...) y la dirección de correo a la que queremos que sean enviados los informes.
_dmarc TXT( "v=DMARC1; p=reject; rua=mailto:dmarc_reports@model.dcslab.eu")
Finalmente, configuramos postfix con opendmarc
AuthservID model.dcslab.eu
Socket inet:8893@localhost
# DMARC /etc/postfix/main.cf configuration
# 8893 is default for opendmarc
smtpd_milters = unix:/var/run/opendkim/opendkim.sock, inet:127.0.0.1:8893
Postfix tiene soporte para DANE como opción en la configuración TLS.
smtp_tls_security_level = dane
smtp_dns_support_level = dnssec
Postfix requiere utilizar un servidor de nombres recursivo (nameserver) con validación-DNSSEC para realizar la validación de DNSSEC. Existen dos opciones, o bien isntalamos y configuramos un servidor de DNS con validación DNSSEC, o configuramos nuestro sistema para usr un servidor DNS externo que lo soporte. Para generar los registros TLS podemos ayudarnos de herramientas online (example). Para obtener un certificado en formato .pem podemos ejecutar:
-----BEGIN CERTIFICATE-----
MIIFMjCCBBqgAwIBAgISA/ZiA+nFT1Hd5emwMgI20KtdMA0GCSqGSIb3DQEBCwUA
...
Wq6bzNp36KG7fb86FW5VfJsINeIUdad/6J/gBylPPzaoonQ7vcT0VB6TI4/ic1C1
VuvF9e7YHH42YnWMoBesmOqoNWty+tzyFObvZPp7XLyQCDbS4ZY=
-----END CERTIFICATE-----
Siguiendo la documentación de Postfix escogeremos los siguientos parametros para generar los registros TLS:
Finalmente generaremos un registro para un servicio TCP en el puerto 25, de la siguiente manera:
_25._tcp.mx.model.dcslab.eu TLSA 3 1 1 1cf86240705080beee6827b063e52274e545859711d4f63aca3af259210ad6ab