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?