Configurazione Postfix MTA (SMTP) perfettamente protetta

15

Voglio proteggere il mio server di root (ulteriormente) dal servizio, iniziando con il servizio SMTP (Postfix MTA) come il più occupato. Durante il processo di impostazione, ho letto molto sulla sicurezza e la crittografia e ho fatto del mio meglio per raccogliere le informazioni più preziose. Tuttavia, alcuni problemi sembrano rimanere e non riesco a trovare nient'altro per rendere perfetta la configurazione.

Comportamento desiderato

Desidero che il servizio sia il più restrittivo possibile, ovvero utilizzare la crittografia sicura quando possibile. L'autenticazione dovrebbe essere consentita solo dopo STARTTLS (invio) con crittografia sicura .

  • Comunicazione server-server: altamente crittografata, non crittografata solo se necessario
  • Comunicazione da client a server: solo crittografia elevata
  • Autenticazione client solo sulla porta 587 (facoltativo?)

Differenziazione

La preoccupazione principale è la sicurezza, la crittografia e le impostazioni specifiche di sicurezza per il MTA Postfix. Non cerco consigli per anti-spam o anti-virus - questa è un'altra questione. La crittografia della posta elettronica non è un'opzione perché la preoccupazione è piuttosto la privacy che l'autenticità, che alla fine non giustifica lo sforzo irragionevolmente elevato del lato client necessario.

Configurazione corrente

  • Server: Debian 7 (Wheezy)
  • MTA: Postfix 2.9.6
  • Certificato CaCert: 4096 bit / sha512-RSA

File /etc/postfix/main.cf excerpt:

tls_random_source=dev:/dev/urandom

# Incoming
smtpd_tls_cert_file=/etc/ssl/cacert/certs/example.com.crt
smtpd_tls_key_file=/etc/ssl/cacert/private/example.com.key
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
smtpd_tls_security_level=may
smtpd_tls_mandatory_ciphers=high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

# Outgoing
smtp_tls_cert_file=/etc/ssl/cacert/certs/example.com.crt
smtp_tls_key_file=/etc/ssl/cacert/private/example.com.key
smtp_use_tls=yes
smtp_tls_security_level=may
smtp_tls_mandatory_ciphers=high
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SASL Authentication (dovecot)
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = no

smtpd_recipient_restrictions =
   permit_sasl_authenticated,
   permit_mynetworks,
   reject_unauth_destination

# prevent leaking valid e-mail addresses
disable_vrfy_command = yes

File /etc/postfix/master.cf excerpt:

smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Problemi aperti

  • starttls.info afferma:

    There is a self-signed certificate in the trust chain [...] There are validity issues for the certificate. Certificates are seldom verified for SMTP servers, so this doesn't mean that STARTTLS won't be used. Generally speaking it's a bad practice not to have a valid certificate, and an even worse practice not to verify them. Any attempted encrypted communication is left all but wide open to Man-in-the-Middle attacks.

    Si tratta di un problema riguardante la comunicazione da server a server? In tal caso, c'è qualcosa che posso fare per migliorare questo senza pagare un certificato ? (Ho solo clienti che conosco personalmente)

  • Lo stesso sito afferma:

    Anonymous Diffie-Hellman is accepted. This is suspectible to Man-in-the-Middle attacks.

    Quale impostazione è necessaria per disabilitare questi? (vedi anche la prossima voce dell'elenco)

  • testssl.sh mostra problemi per la porta 587:

    --> Testing standard cipher lists
    ...
     Anonymous NULL Cipher    offered (NOT ok) 
     Anonymous DH Cipher      offered (NOT ok) 
    ...
    

    Questo è probabilmente lo stesso problema dell'elemento precedente.

  • testssl.sh mostra problemi per la porta 25:

    --> Testing Protocols
     SSLv3      offered (NOT ok)
    ...
    --> Testing standard cipher lists
    ...
     Anonymous NULL Cipher    offered (NOT ok) 
     Anonymous DH Cipher      offered (NOT ok) 
     40 Bit encryption        offered (NOT ok) 
     56 Bit encryption        Local problem: No 56 Bit encryption configured in /usr/bin/openssl 
     Export Cipher (general)  offered (NOT ok) 
     Low (<=64 Bit)           offered (NOT ok) 
     DES Cipher               offered (NOT ok)
     Triple DES Cipher        offered
     Medium grade encryption  offered
    ...
    RC4 seems generally available. Now testing specific ciphers...
    ...
    

    Questo vale solo per le comunicazioni da server a server? Altrimenti, come è possibile? Almeno SSLv3 dovrebbe essere disabilitato secondo il file main.cf . Come possono essere risolti questi problemi?

  • ssl-tools.net afferma:

    *.example.com - Certificate does not match hostname

    Probabilmente non è un problema di sicurezza in sé, ma interessante in combinazione con l'articolo uno sopra. Quale hostname dovrei scegliere se un certificato con caratteri jolly non è ok? example.com o host.example.com ?

  • Che altro posso fare per rendere la configurazione perfettamente sicura?

posta 08frak 18.02.2015 - 17:20
fonte

2 risposte

4

Piccola tangente: l'SMTP non è sicuro, stai solo parlando del MTA. Le modalità di convalida dei certificati TLS (convalida dei soggetti) sono solo un piccolo sottoinsieme e non importa se vengono affrontati altri problemi. Ad esempio, se si utilizza SMIME o PGP, TLS potrebbe non avere importanza. Dipende da quali sono le tue minacce.

Dici che TLS è preferito, e non criptato se necessario. Questo è noto come crittografia opportunistica. Gli MTA più moderni fanno questo.

Sì, i certificati TLS privati autofirmati sono comuni e spesso utilizzati. Non è necessario convalidare il certificato. Tuttavia, a causa della multitenancy e di altri problemi, è impossibile legare il nome del dominio al certificato stesso.

Sappi che se insisti sulle connessioni TLS in arrivo da un determinato dominio, perderai le e-mail trasmesse inviate da mass-mail che sono autorizzate dai record SPF. Conosco diverse banche che inviano avvisi di sicurezza tramite un servizio di trasmissione che non utilizza TLS per la scalabilità.

Mancano AV / AS, scansione di contenuto / collegamento, sicurezza MUA, whitelisting, DKIM, SPF, DMARC, SMIME, PGP, BATV, attacchi di raccolta directory, ... la lista continua, e via, e via .

    
risposta data 18.02.2015 - 19:01
fonte
1

È importante notare che esiste una grande differenza tra i mittenti SMTP pubblici (che possono utilizzare la porta 25 e inviare contenuti non crittografati) e l'invio del client che viene utilizzato per l'autenticazione e il trasferimento del contenuto client-server sicuro.

Preferisco non fare affidamento sul livello di sicurezza e paranoico dei mittenti pubblici, tuttavia pensa sempre alla sicurezza degli utenti di dominio e al livello riservato degli utenti.

Prima di tutto, suggerisco di creare il proprio certificato server CA e Sigh con questo certificato root o intermedio, distribuire questo certificato tra gli utenti e installare come affidabile. Ciò eviterà qualsiasi attacco di mitm e lo scambio sicuro di dati tra client e server. Secondo: si prega di escludere SSLv2 e protocolli inferiori. Escludo persino SSLv3. È anche meglio assegnare un elenco di cifre accettabili. Di seguito è riportato un esempio di configurazione per postfix.

smtpd_tls_protocols = !SSLv2,!SSLv3,TLSv1,TLSv1.1,TLSv1.2
smtpd_tls_mandatory_protocols=!SSLv2,!SSLv3
smtpd_tls_mandatory_ciphers =HIGH 
smtpd_tls_exclude_ciphers=aNULL:eNULL:LOW:3DES:MD5:MEDIUM:EXP:PSK:DSS:RC4:SEED:ECDSA:CAMELLIA256-SHA
tls_high_cipherlist=EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

Per i mittenti non sicuri, chiudo la lista dei riceventi e aggiungo il record spf al DNS per evitare qualsiasi relay. Puoi limitare manualmente i server locali rimuovendoli da "mynetworks" o aggiungendo restrizioni al mittente, in cui gli indirizzi dei mittenti locali verranno rifiutati per impostazione predefinita.

smtp  inet  n  - - - -  smtpd -o content_filter=spamassassin
   -o smtpd_sender_restrictions=permit
   -o smtpd_recipient_restrictions=permit_mynetworks,mysql:/etc/postfix/mysql-receiver.cf,reject

Per quanto riguarda la parte di invio (solo per gli utenti del dominio), è preferibile richiedere la crittografia che eviti l'invio di password semplici su reti pubbliche non sicure.

submission inet n   -   n   -   -   smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_tls_security_level=may # (! possible to force, but limits mail clients list and not recommended at all - non standard) -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=/var/spool/postfix/private/dovecot-auth
  -o smtpd_sasl_security_options=noplaintext # or (!!! - use according to your paranoid level)  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_recipient_restrictions=mysql:/etc/postfix/mysql-receiver.cf,permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_recipient,reject
  -o smtpd_sasl_authenticated_header=yes

Con la configurazione presentata otteniamo:

  • crittografia da client a server e porta 587 obbligo di autenticazione sasl
  • tls server-to-server abilitato (ma suggerisco comunque di usare tunnel VPN per la comunicazione dell'infrastruttura).
risposta data 12.03.2016 - 13:51
fonte

Leggi altre domande sui tag