My Email Communications Security Assessment (MECSA)

Comment installer Postfix pour obtenir le score maximum dans MECSA?

Vous trouverez ci-dessous une brève description pour installer un serveur de messagerie Postfix obtenant le score maximum dans les trois domaines du rapport: Envoi Confidentiel, Hameçonnage et Usurpation d'Identité et Intégrité des Messages. Ce guide a été testé sur une machine virtuelle équipée de Ubuntu 16.04 LTS.

1. La première étape consiste à installer Ubuntu Server 16.04 LTS.

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

2. Configuration de DNS et DNSSEC

Le moyen le plus simple d'avoir DNSSEC est d'utiliser un fournisseur de service supportant DNSSEC. Une autre alternative, que nous explorerons dans les futurs guides, est d'installer son propre service DNS avec le support DNSSEC. Un nom de domaine doit avoir un enregistrement MX ainsi qu'un enregistrement A. Ce dernier assure la correspondance entre le nom de domaine et l'adresse IP correspondante. Dans le cas du service DNS que nous souhaitons mettre en place (local ou fourni par un tiers), nous créerons un enregistrement MX (au moins un) pour le domaine model.dcslab.eu : 5 mx.model.dcslab.eu. La première valeur correspond à la priorité et la seconde au nom d'hôte du MTA. Pour chaque enregistrement MX créé, nous allons créer un enregistrement A associant le nom d'hôte MX à son adresse IP, par exemple:

mx.model.dcslab.eu. IN A 139.191.36.5

3. Installez Postfix et configuration initiale.

  • # 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

Nous créons des alias afin de recevoir les rapports DMARC.

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

4. Configuration de StartTLS

Pour installer StartTLS correctement dans notre installation de Postfix, nous avons besoin d'un certificat signé par une autorité de certification (CA) reconnue, et de configurer un ensemble de paramètres dans le serveur Postfix. La première étape est d'obtenir un certificat signé par une autorité valide. Dans cet exemple, nous utilisons Let's Encrypt comme autorité de certification émettant un certificat gratuit valide. Nous utilisons le guide d'installation d'une plate-forme générique Debian .

L'application, pour demander le certificat, nécessite l'accès au port TCP 80. Si une autre application utilise ce port, elle doit être arrêtée avant de poursuivre. Une fois le certificat obtenu, nous pouvons redémarrer notre service. Lors de la demande de certificat, il est important de spécifier correctement le nom de domaine que nous voulons authentifier via le certificat. Dans notre cas, nous avons spécifié mx.model.dcslab.eu pour notre serveur de messagerie.

  • # 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. Configuration de SPF (Sender Policy Framework).

Pour configurer SPF, nous devons configurer un enregistrement DNS afin que les autres agents de transfert de courrier (MTA) puissent l'utiliser lors de la réception des emails de notre domaine. Afin que notre domaine puisse utiliser SPF lors de la réception d'emails, nous devons installer et configurer une application en utilisant l'outil apt-get.

Nous allons commencer par mettre en place un enregistrement DNS basique indiquant les hôtes autorisés à envoyer des emails au nom de notre domaine model.dcslab.eu

IN TXT "v=spf1 mx -all"

Ensuite nous installons et configurons le paquet 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. Configuratin de DKIM (DomainKeys Identified Mail)

DKIM nécessite quatre étapes pour être activé:

  • Installation de opendkim
  • Création des clés
  • Création d'un enregistrement DNS
  • Configuration de opendkim et 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 *

Une fois que nous avons généré les clés, nous pouvons les utiliser pour créer l'enregistrement TXT correspondant dans le DNS de notre domaine. Le sous-domaine auquel il sera attaché est <selector>._domainkey.<our_domain>.

  • # cat modelSelector.txt
  • !!!!! même si le contenu du fichier indique h=rsa-sha256;, la valeur CORRECTE est h=sha256

modelSelector._domainkey IN TXT ("v=DKIM1; h=sha256; k=rsa; s=email; p=MIGf...QAB")

Après la génération des clés et de l'enregistrement TXT, nous devons configurer opendkim pour fonctionner avec 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. Configuration DMARC

La configuration de DMARC est similaire à celle de DKIM, à l'exception de la génération des clés.

  • Installation de opendmarc
  • Création de l'enregistrement DNS
  • Configuration de opendmarc et postfix

  • # apt-get install opendmarc

Dans le cas de DMARC, l'enregistrement TXT est attaché au sous-domaine _dmarc.<our_domain>. Un enregistrement de politique DMARC basique contient la version, la politique à suivre (accepter, rejeter, ...) et l'adresse mail à laquelle se reporter en cas de problème.

_dmarc TXT( "v=DMARC1; p=reject; rua=mailto:dmarc_reports@model.dcslab.eu")

Finalement, nous devons configurer postfix et 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. Configuration de DANE

Postfix supporte DANE en option dans la configuration de TLS. Cette option a déjà été activée lors de la configuration de StartTLS.

smtp_tls_security_level = dane smtp_dns_support_level = dnssec

Postfix requiert un nameserver récursif validant DNSSEC pour effectuer la validation DNSSEC. Par conséquent, soit nous installons et configurons un cache-nameserver récursif local validant DNSSEC, soit nous configurons notre système pour en utiliser un externe. Pour configurer les enregistrements TLSA, nous pouvons utiliser un outil en ligne (exemple) pour générer les valeurs correspondantes. Pour obtenir la valeur pem du certificat, nous pouvons exécuter:

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

-----BEGIN CERTIFICATE----- MIIFMjCCBBqgAwIBAgISA/ZiA+nFT1Hd5emwMgI20KtdMA0GCSqGSIb3DQEBCwUA ... Wq6bzNp36KG7fb86FW5VfJsINeIUdad/6J/gBylPPzaoonQ7vcT0VB6TI4/ic1C1 VuvF9e7YHH42YnWMoBesmOqoNWty+tzyFObvZPp7XLyQCDbS4ZY= -----END CERTIFICATE-----

En suivant la documentation Postfix nous choisissons les paramètres suivants pour géréner les enregistrements TLSA:

  • Champ d'utilisation: 3 (certificat délivré par le domaine)
  • Champ de sélection: 1 (utiliser la clé publique du sujet)
  • Champ de type correspondant: 1 (SHA-256)

Nous générons un enregistrement pour un service TCP sur le port 25

_25._tcp.mx.model.dcslab.eu TLSA 3 1 1 1cf86240705080beee6827b063e52274e545859711d4f63aca3af259210ad6ab