Configuración de MTA de Postfix (SMTP) perfectamente segura

15

Quiero asegurar mi servicio de servidor raíz (más) por servicio, comenzando con el servicio SMTP (Postfix MTA) como el más ocupado. En el momento de configurar todo, leí mucho sobre seguridad y encriptación y traté de recopilar las piezas de información más valiosas. Sin embargo, algunos problemas parecen persistir y no puedo encontrar nada más para que la configuración sea perfecta.

Comportamiento deseado

Quiero que el servicio sea lo más restrictivo posible, es decir, utilice el cifrado seguro siempre que sea posible. La autenticación solo se debe permitir después de STARTTLS (envío) con cifrado seguro .

  • Comunicación de servidor a servidor: altamente cifrada, no cifrada solo si es necesario
  • Comunicación de cliente a servidor: solo altamente cifrada
  • Autenticación del cliente solo en el puerto 587 (opcional?)

Diferenciación

La principal preocupación es la seguridad, el cifrado y, específicamente, la configuración relacionada con la seguridad del Postfix MTA. No busco consejos para soluciones antispam o antivirus, este es un asunto completamente distinto. El cifrado de correo electrónico no es una opción porque la preocupación es más la privacidad que la autenticidad, lo que en última instancia no justifica el esfuerzo excesivamente alto por parte del cliente.

Configuración actual

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

Extracto del archivo /etc/postfix/main.cf :

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

Extracto del archivo /etc/postfix/master.cf :

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

Problemas abiertos

  • starttls.info declara:

      

    Hay un certificado autofirmado en la cadena de confianza [...]   Hay problemas de validez para el certificado.   Los certificados rara vez se verifican para los servidores SMTP, por lo que este   no significa que no se utilizará STARTTLS. Generalmente   Hablando es una mala práctica no tener un válido   Certificado, y una práctica aún peor para no verificarlos.   Cualquier intento de comunicación cifrada se deja casi todo   abierto a los ataques Man-in-the-Middle.

    ¿Se trata de un problema relacionado con la comunicación de servidor a servidor? Si es así, ¿hay algo que pueda hacer para mejorar esto sin pagar un certificado ? (Solo tengo clientes que conozco personalmente)

  • El mismo sitio dice:

      

    Se acepta Diffie-Hellman anónimo. Esto es sospechoso   a los ataques de Man-in-the-Middle.

    ¿Qué configuración se necesita para deshabilitar estos? (vea también el siguiente elemento de la lista)

  • testssl.sh muestra problemas para el puerto 587:

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

    Este es probablemente el mismo problema que el elemento anterior.

  • testssl.sh muestra problemas para el puerto 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...
    ...
    

    ¿Esto solo se aplica a la comunicación de servidor a servidor? Si no, ¿cómo es esto posible? Al menos SSLv3 debe estar deshabilitado según el archivo main.cf . ¿Cómo se pueden resolver estos problemas?

  • ssl-tools.net afirma:

      

    * .example.com: el certificado no coincide con el nombre de host

    Probablemente no es un problema de seguridad en sí, pero es interesante en combinación con el artículo uno anterior. ¿Qué nombre de host debo elegir si un certificado comodín no está bien? example.com o host.example.com ?

  • ¿Qué más puedo hacer para que la configuración sea perfectamente segura?

pregunta 08frak 18.02.2015 - 17:20
fuente

2 respuestas

4

Pequeña tangente: SMTP no es seguro, solo habla del MTA. Los modos de validación de certificados TLS (validación de sujeto) son solo un pequeño subconjunto, y no importa si se abordan otras inquietudes. Por ejemplo, si usa SMIME o PGP, TLS podría no importar. Depende de cuáles sean sus amenazas.

Usted dice que se prefiere TLS, y que no esté encriptado si es necesario. Esto se conoce como encriptación oportunista. La mayoría de los MTA modernos hacen esto.

Sí, los certificados TLS privados que son autofirmados son comunes y se usan con frecuencia. No tienes que validar el certificado. Sin embargo, debido a la multitenencia y otros problemas, es imposible vincular el nombre de dominio con el certificado en sí.

Sepa que si insiste en las conexiones TLS entrantes desde un dominio dado, perderá los correos electrónicos de difusión enviados por correo masivo que están autorizados por los registros SPF. Sé que varios bancos envían alertas de seguridad a través de un servicio de transmisión que no usa TLS para la escalabilidad.

Le falta AV / AS, escaneo de contenido / enlace, seguridad MUA, listas blancas, DKIM, SPF, DMARC, SMIME, PGP, BATV, ataques de recolección de directorios, ... la lista continúa, y sigue y sigue. .

    
respondido por el random65537 18.02.2015 - 19:01
fuente
1

Es importante notar que existe una gran diferencia entre los remitentes SMTP públicos (que pueden usar el puerto 25 y enviar contenido sin cifrar) y el envío del cliente que se usa para la autenticación y la transferencia segura de contenido cliente-servidor.

Prefiero no depender de remitentes públicos paranoicos y de nivel de seguridad, sin embargo, siempre piense en la seguridad de los usuarios del dominio y en el nivel confidencial de usuario a usuario.

En primer lugar, sugiero crear su propio certificado de servidor de CA y suspiro con este certificado raíz o intermedio, distribuir este certificado entre los usuarios e instalarlo según lo confiado. Esto evitará cualquier ataque mitm y asegurará el intercambio de datos de cliente a servidor. Segundo - por favor excluya SSLv2 y protocolos inferiores. Incluso excluyo SSLv3. También es mejor asignar una lista de cifrados aceptables. A continuación se muestra un ejemplo de configuración para 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

Para los remitentes no seguros, cierro la lista de destinatarios y agrego el registro SPF al DNS para evitar cualquier retransmisión. Puede limitar los servidores locales manualmente eliminándolos de "mynetworks" o agregando restricciones de remitente, donde las direcciones de remitentes locales se rechazarán de forma predeterminada.

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

En cuanto a la parte de envío (solo para usuarios del dominio), es preferible solicitar el cifrado que evite que las contraseñas simples se envíen a través de redes públicas no seguras.

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 configuración presentada obtenemos:

  • cifrado de cliente a servidor y obligación de autenticación sasl del puerto 587
  • tls de servidor a servidor habilitados (pero sugiero usar túneles vpn para la comunicación de infraestructura de todos modos).
respondido por el ETech 12.03.2016 - 13:51
fuente

Lea otras preguntas en las etiquetas