Debes proteger tus servicios de correo electrónico de Linux mediante la comprensión de los certificados de seguridad.
Tradicionalmente, los servicios de correo electrónico envían datos de manera desprotegida. Esto ya sea que envíes correos electrónicos a través de SMTP o los recibas a través de IMAP o POP, los valores predeterminados están en texto plano.
Con más aplicaciones en línea que imponen el cifrado y el consenso general para proteger tus datos, lo mejor es proteger tus servicios de correo electrónico. Lo ideal es hacerlo con un certificado de seguridad Secure Sockets Layer/Transport Layer Security (SSL/TLS).
Protocolos
Primero, haremos una revisión rápida de los servicios y protocolos de correo electrónico. El correo electrónico se envía a través de un servicio llamado Protocolo simple de transporte de correo (SMTP) utilizando el puerto TCP 25.
Este protocolo envía correos electrónicos de un servidor a otro en función de las búsquedas de registros del intercambiador de correo DNS (MX). Una vez que un correo electrónico está en el servidor de correo electrónico, se recupera usando uno de dos servicios. Puede usar el Protocolo de acceso a mensajes de Internet (IMAP) usando el puerto TCP 143, o Protocolo de oficina postal (POP3) usando el puerto TCP 110.
Todos estos servicios, por defecto, envían tu correo electrónico y autenticación a/desde estos servicios en texto plano, por lo tanto, ¡estás muy desprotegido!
Para proteger los datos y la autenticación del correo electrónico, estos servicios han agregado una característica de seguridad. En esta característica pueden utilizar un certificado SSL/TLS para proteger el flujo de datos y la comunicación con cifrado.
La forma en que el cifrado SSL/TLS asegura la información está más allá del alcance de este artículo. Empero, este artículo sobre seguridad que hemos escrito anteriormente lo cubre con gran detalle. En un nivel alto, el cifrado SSL/TLS es un algoritmo de cifrado público/privado.
Al agregar estas características de seguridad a los servicios, pueden escuchar en los nuevos puertos TCP:
Servicio | Puerto TCP predeterminado | Puerto SSL/TLS |
SMTP | 25 | 587 |
IMAP | 143 | 993 |
POP3 | 110 | 995 |
Generar certificados SSL/TLS
Los certificados SSL/TLS se pueden generar de forma gratuita utilizando herramientas como OpenSSL. También se pueden comprar por un rango de precios de las autoridades públicas de certificación (CA).
En el pasado, generar tu propio certificado era fácil y funcionaba en la mayoría de los casos. Pero con la creciente demanda de una mejor seguridad, la mayoría de los clientes de correo electrónico no confían en los certificados SSL/TLS autogenerados sin una excepción manual.
Si tu caso de uso es privado o para pruebas, tiene sentido ahorrar dinero con un certificado autogenerado. Pero si estás extendiendo esto a un grupo grande o tienes clientes que pagan, entonces será mejor que compres un certificado. Los puedes comprar de una compañía pública y confiable que los venda.
En cualquier caso, el proceso para comenzar a solicitar un nuevo certificado es utilizar las herramientas OpenSSL en tu sistema Linux. La usarás para crear una solicitud de firma de certificado (CSR):
1 |
$ openssl req -new -newkey rsa:2048 -nodes -keyout mail.mydomain.key -out mail.mydomain.csr |
Este comando creará una nueva CSR y una clave privada al mismo tiempo para el servicio que estás intentando proteger.
El proceso te hará una serie de preguntas asociadas con el certificado. Te preguntará detalles de ubicación, nombre de dominio completo del servidor (FQDN), información de contacto de correo electrónico, etc.
Una vez que hayas completado la información, se generará la clave y la CSR.
Si generas tu propio certificado
Si deseas generar tu propio certificado, debes crear tu propia autoridad de certificación (CA) raíz antes de emitir el comando CSR anterior. Puedes crear tu propia CA raíz con:
1 |
$ openssl genrsa -des3 -out myCA.key 2048 |
Te pedirá que agregues una frase de contraseña. Proporciona una frase de contraseña segura y no la pierdas. Esta es tu clave de certificado raíz privada y, como su nombre lo indica, es el root de confianza en tus certificados.
A continuación, debes generar el certificado de CA raíz:
1 |
$ openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem |
Después de responder algunas preguntas más, generarás un certificado de CA raíz con una vida útil de cinco años.
Usando el archivo CSR de los pasos anteriores, puedes solicitar que la CA raíz que acabas de crear genere y firme un nuevo certificado:
1 |
$ openssl x509 -req -in mail.mydomain.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out mail.mydomain.pem -days 1825 -sha256 |
Debes ingresar tu frase de contraseña de clave de CA raíz privada para crear y firmar el certificado.
Ahora tienes los dos archivos necesarios para configurar tus servicios de correo electrónico para una mayor seguridad. El archivo de clave privada, mail.mydomain.key, y el archivo de certificado público, mail.mydomain.pem.
Si compras un certificado
Si compras un certificado de un proveedor, te pedirá que cargues esa CSR en tu sistema, ya que se utiliza como entrada para generar el certificado SSL/TLS. Se podrá acceder al certificado como un archivo (como mail.mydomain.pem).
Muchos proveedores de SSL también requieren que descargues un certificado intermedio. Si este es el caso, debes combinar los dos archivos de certificado en uno, para que el servicio de correo electrónico pueda procesarlos en combinación. Puedes combinar tu certificado con un certificado intermedio de terceros con:
1 |
$ cat mail.mydomain.pem gd_bundle-g2-g1.crt > mail.mydomain.pem |
Ten en cuenta que la extensión del archivo de salida es .pem, que significa Privacy-Enhanced Mail.
Ahora tienes los dos archivos que necesitas para configurar tus servicios de correo electrónico para una mayor seguridad. El archivo de clave privada, mail.mydomain.key, y el archivo de certificado público combinado, mail.mydomain.pem.
Crear un directorio seguro para tus archivos
Ya sea que hayas creado tu propia clave o hayas comprado una de un proveedor, debes crear un directorio seguro. Debe ser propiedad de root para los dos archivos que creaste anteriormente. Un flujo de trabajo de ejemplo para crear una jugada segura sería:
1 2 3 |
$ mkdir /etc/pki/tls $ chown root:root /etc/pki/tls $ chmod 700 /etc/pki/tls |
Asegúrate de establecer los permisos en tus archivos después de copiarlos en /etc/pki/tls con:
1 |
$ chmod 600 /etc/pki/tls/* |
Configurar tus servicios SMTP e IMAP
A continuación, debes configurar los servicios SMTP e IMAP para usar los nuevos certificados de seguridad. Los programas utilizados en este ejemplo para SMTP e IMAP son postfix y dovecot.
Debes editar /etc/postfix/main.cf en tu editor de texto preferido. Agrega las siguientes líneas:
1 2 3 |
smtpd_use_tls = yes smtpd_tls_cert_file = /etc/pki/tls/mail.mydomain.pem smtpd_tls_key_file = /etc/pki/tls/mail.mydomain.key |
Personalizar tu configuración
Las siguientes opciones te permiten deshabilitar/habilitar diferentes cifrados, protocolos, etc.:
1 2 3 4 5 6 7 8 9 10 11 |
smtpd_tls_eecdh_grade = strong smtpd_tls_protocols= !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtpd_tls_mandatory_protocols= !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtpd_tls_mandatory_ciphers = high smtpd_tls_security_level=may smtpd_tls_ciphers = high tls_preempt_cipherlist = yes smtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 , DES, ADH, RC4, PSD, SRP, 3DES, eNULL smtpd_tls_exclude_ciphers = aNULL, MD5 , DES, ADH, RC4, PSD, SRP, 3DES, eNULL smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 |
Debes editar/etc/dovecot/dovecot.conf agregando estas tres líneas:
1 2 3 |
ssl = required ssl_cert = </etc/pki/tls/mail.mydomain.pem ssl_key = </etc/pki/tls/mail.mydomain.key |
Agregue las siguientes opciones para deshabilitar/habilitar diferentes cifrados, protocolos y más (te dejaré entendiendo y considerando esto):
1 2 3 4 |
ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:ALL:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SSLv2 ssl_prefer_server_ciphers = yes ssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1 ssl_min_protocol = TLSv1.2 |
Establecer contexto para SELinux
Si tu distribución de Linux tiene habilitado SELinux, debes establecer el contexto SELinux correcto para tus nuevos archivos de certificado.
Para Postfix SELinux:
1 |
$ chcon -u system_u -t cert_t mail.mydomain.* |
Para Dovecot SELinux:
1 |
$ chcon -u system_u -t dovecot_cert_t mail.mydomain.* |
Debes reiniciar ambos servicios y conectarte con tus configuraciones actualizadas de cliente de correo electrónico. Algunos clientes de correo electrónico detectarán automáticamente los nuevos números de puerto; otros requerirán que los actualices.
Pon a prueba tu configuración
Prueba rápidamente desde la línea de comandos con openssl y el complemento s_client:
Estos comandos de prueba mostrarán una gran cantidad de datos sobre la conexión, el certificado, el cifrado, la sesión y el protocolo que está utilizando.
Esta no es solo una buena manera de validar que la nueva configuración está funcionando, sino también de confirmar que estás utilizando la configuración de certificado. Asimismo, la seguridad adecuada que definiste en los archivos de configuración postfix o dovecot.
¡Mantente seguro!