My Email Communications Security Assessment (MECSA)

Come installare Postfix per ottenere il massimo punteggio in MECSA?

Qui di seguito c'è una breve descrizione su come installare il server e-mail Postfix che permetterà di raggiungere il punteggio massimo nelle tre sezioni del rapporto: Consegna Confidenziale, Phishing-Furto di Identità e Integrità dei Messaggi. Questa guida è stata testata su di una macchina virtuale con Ubuntu 16.04 LTS.

1. Il primo passo consiste nell’installare Ubuntu Server 16.04 LTS.

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

2. Configurazione DNS and DNSSEC.

Il modo più semplice per avere DNSSEC è di usare un fornitore di servizi che supporta DNSSEC. Un’altra alternativa, che sarà esplorata nelle guide future, è di installare il proprio DNS con il supporto DNSSEC. Prima di iniziare, il nome di dominio deve avere un record MX e tale record deve avere un indirizzo IP assegnato e un record A. Nel servizio DNS (locale o fornito da terzi), si provvederà a creare un record MX (almeno uno) per il dominio model.dcslab.eu: 5 mx.model.dcslab.eu. Il primo valore corrispondente alla priorità e il secondo al nome dell’host dell'MTA. Per ciascun record MX generato provvederemo a creare un record A associando il nome dell’host MX al corrispondente indirizzo IP. Per esempio:

mx.model.dcslab.eu. IN A 139.191.36.5

3. Installazione Postfix e configurazione iniziale.

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

Generiamo alias per ricevere rapporti DMARC

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

4. Configurazione StartTLS.

Per impostare correttamente StartTLS sulla nostra installazione Postfix, abbiamo bisogno di un certificato firmato da una Certification Authority (CA) riconosciuta e di configurare un insieme di parametri nel server Postfix. Il primo passo consiste nell’ottenere un certificato firmato da una Certification Authority valida. In questo esempio usiamo Let's Encrypt come Certification Authority che emette un certificato gratuito valido. Seguiremo poi la guida di installazione per una piattaforma Debian generica.

L’applicazione, per la richiesta del certificato, necessita l’accesso alla porta TCP 80. Se un’applicazione utilizza questa porta, deve essere terminata prima di continuare. All’ottenimento del certificato possiamo riavviare il servizio. Al momento della richiesta del certificato, è importante specificare correttamente il nome del dominio che intendiamo autentificare attraverso il certificato. Nel nostro caso, abbiamo specificato mx.model.dcslab.eu per il nostro provider email.

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

Per configurare SPF, è necessario impostare un record DNS, in modo che altri Mail Transfer Agents (MTAs) lo possano utilizzare al momento del ricevimento delle e-mail da parte del nostro dominio. Per permettere al nostro dominio di utilizzare SPF al momento del ricevimento delle e-mail, dobbiamo installare e configurare un’applicazione facendo uso dello strumento apt-get.

Inizieremo impostando una semplice regola per il record DNS indicando gli host autorizzati ad inviare e-mail per conto del nostro dominio model.dcslab.eu

IN TXT "v=spf1 mx -all"

Successivamente installeremo e configureremo il pacchetto: 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. Configurazione DKIM (DomainKeys Identified Mail).

DKIM richiede tre tappe per essere attivato:

  • Installazione di opendkim
  • Creazione delle chiavi
  • Creazione del record DNS
  • Configurazione di opendkim e 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 *

Dopo aver generato le chiavi, possiamo usarle per creare i record TXT corrispondenti nel DNS del nostro dominio. Il sotto-dominio corrispondente è <selector>._domainkey.<our_domain>.

  • # cat modelSelector.txt
  • !!!!! anche se il contenuto del file indica h=rsa-sha256;, the CORRECT value is h=sha256

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

Dopo la generazione della chiave e la creazione della registrazione TXT, dovremo configurare opendkim per lavorare 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. Configurazione DMARC.

La configurazione di DMARC è simile a DKIM, a parte per la generazione della chiave.

  • Installazione di opendmarc
  • Creazione della registrazione DNS
  • Configurazione di opendmarc e postfix

  • # apt-get install opendmarc

Per quanto riguarda DMARC, il record TXT è collegato al sotto-dominio _dmarc.<our_domain>. Un policy record DMARC di base contiene la versione e la policy da seguire (accetta, rifiuta, …) e l’indirizzo e-mail di riferimento da utilizzare in caso di necessità.

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

Per concludere, dobbiamo configurare postfix e 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. Configurazione DANE.

Postfix ha il supporto per DANE, come opzione nella configurazione di TLS. Questa opzione deve essere già attivata al momento della configurazione di StartTLS.

smtp_tls_security_level = dane smtp_dns_support_level = dnssec

Postfix necessita di un nameserver che effettua la validazione in maniera ricorsiva per DNSSEC. Ci troveremo quindi davanti a due opzioni, una corrisponde nell’ installare e configurare un nameserver locale per il caching e la validazione ricorsiva per DNSSEC, l’altra opzione prevede la configurazione del sistema per usarne uno esterno. Per impostare un record TLSA, possiamo usare uno strumento online (example) per generare i valori corrispondenti. Per ottenere il valore pem del certificato, possiamo eseguire:

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

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

Seguendo la documentazione Postfix, sceglieremo i seguenti parametri per generare i record TLSA:

  • Campo Utilizzo: 3 (Certificato emesso dal dominio)
  • Campo Selettore: 1 (Usare la chiave pubblica del soggetto)
  • Campo Tipo di Corrispondenza: 1 (SHA-256)

Provvediamo a generare un record per un servizio TCP sulla porta 25, quindi:

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