An official website of the European UnionAn official EU website
My Email Communications Security Assessment (MECSA)

Como instalar Postfix para obtener Máxima puntuación en MECSA?

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 16.04 LTS.

1. Instalación y actualización de Ubuntu Server 16.04 LTS.

  • # sudo su -
  • # apt-get update
  • # apt-get upgrade

2. Configuración de DNS y DNSSEC.

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

3. Instalación de Postfix y configuración inicial.

  • # apt-get install postfix
  • # dpkg-reconfigure postfix
General type of mail configuration?Internet Site
System mail namemodel.dcslab.eu
root and postmaster mail recipientsmodel (root user)
destinations to accept mail for (mydestinations)model.dcslab.eu
force synchronous updates on mailyes
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 useIPv4
  • # postconf -e 'home_mailbox = Maildir/'
  • # postconf -e 'mailbox_command ='
  • # service postfix restart

Creamos un alias para recibir los informes de DMARC.

  • # vi /etc/aliases
  • postmaster: model
  • dmarc_reports: model
  • # postalias /etc/aliases
  • # service postfix restart

4. Configuración de StartTLS

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).

  • # apt-get install ca-certificates
  • # postconf -e 'smtp_tls_security_level = dane'
  • # postconf -e 'smtp_dns_support_level = dnssec'
  • # postconf -e 'smtpd_tls_security_level = may'
  • # postconf -e 'smtp_tls_note_starttls_offer = yes'
  • # postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/mx.model.dcslab.eu/privkey.pem'
  • # postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/mx.model.dcslab.eu/fullchain.pem'
  • # postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
  • # postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt'
  • # postconf -e 'smtpd_tls_ask_ccert = yes'
  • # postconf -e 'smtpd_tls_loglevel = 1'
  • # postconf -e 'smtpd_tls_received_header = yes'
  • # postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
  • # postconf -e 'tls_random_source = dev:/dev/urandom'
  • # postconf -e 'myhostname = model.dcslab.eu'

5. Configuración de SPF (Sender Policy Framework)

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:

  • # apt-get install postfix-policyd-spf-python
  • # vi /etc/postfix/master.cf

# SPF /etc/postfix/master.cf configuration
#
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf

  • # vi /etc/postfix/main.cf

# 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

6. Configuración de DKIM (DomainKeys Identified Mail)

La instalación y configuración de DKIM requiere 3 pasos:

  • Instalación de opendkim
  • Generación de claves
  • Creación de un registro DNS
  • Configuración de opendkim y postfix
  • # apt-get install opendkim opendkim-tools
  • # mkdir -pv /etc/opendkim/private_keys/
  • # chown -R opendkim:opendkim /etc/opendkim
  • # chmod 700 /etc/opendkim/*
  • # cd /etc/opendkim/private_keys/
  • # opendkim-genkey -b 2048 -r -h rsa-sha256 -d model.dcslab.eu -s modelSelector
  • # mv -v modelSelector.private modelSelector.key
  • # chown opendkim:opendkim *
  • # chmod 600 *

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>.

  • # cat modelSelector.txt
  • !!!!! aunque el contenido de archivo diga h=rsa-sha256;, el valor correcto es h=sha256

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.

  • # cd /etc/opendkim/
  • # vi KeyTable

#key_name domain:selector:/path/to/private_key_file
model.dcslab.eu model.dcslab.eu:modelSelector:/etc/opendkim/private_keys/modelSelector.key

  • # vi SigningTable

#signer_of_the_message key_name
*@model.dcslab.eu model.dcslab.eu

  • # vi TrustedHosts

#list-of-hosts (ips and hostnames)
127.0.0.1
model.dcslab.eu
192.168.1.0/24

  • # chown opendkim:opendkim /etc/opendkim/{KeyTable,SigningTable,TrustedHosts}
  • # mv /etc/opendkim.conf /etc/opendkim.conf.original
  • # vi /etc/opendkim.conf

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

  • # mkdir -p /var/spool/postfix/var/run/opendkim
  • # chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
  • # usermod -a -G opendkim postfix
  • # vi /etc/default/opendkim

SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"

  • # vi /etc/postfix/main.cf

# OpenDKIM milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

  • # vi service opendkim restart
  • # vi service postfix restart

7. Configuración de DMARC

La configuración de DMARC es similar a la de DKIM, con la excepción a la generación de claves.

  • Instalación de Opendmarc
  • Creación de un registro DNS
  • Configuración de opendmark y posstfix

  • # apt-get install opendmarc

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

  • # vi /etc/opendmarc.conf

AuthservID model.dcslab.eu
Socket inet:8893@localhost

  • # vi /etc/postfix/main.cf

# 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

  • # vi service opendmarc restart
  • # vi service postfix restart

8. Configuración de DANE

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:

  • # cat /etc/letsencrypt/live/mx.model.dcslab.eu/cert.pem

-----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:

  • Usage Field: 3 (Domain Issued Certificate)
  • Selector Field: 1 (Use subject public key)
  • Matching-Type Field: 1 (SHA-256)

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