Inicio arrow Artículos arrow Linux arrow Sistema de correo con Postfix, Cyrus y MySQL (VIII - Cifrado del canal)
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
993 registrados
1 hoy
5 esta semana
138 este mes
Último: gabity...
Formulario de acceso



... Regenerar clave
... Registro
Sistema de correo con Postfix, Cyrus y MySQL (VIII - Cifrado del canal) Imprimir E-Mail
domingo, 16 de abril de 2006

Como complemento a la configuración del sistema de correo con Postfix y Cyrus, estudiaremos en este capítulo la implementación de un sistema de cifrado bajo el protocolo TLS para asegurar mediante canales seguros todas las comunicaciones entre el cliente y el servidor de correo. A través de las utilidades incluidas en el paquete OpenSSL generaremos certificados de seguridad que aplicaremos a las configuraciones de los programas Postfix y Cyrus-IMAP.

La emisión de un certificado de seguridad tienen un único objetivo: proporcionar información única que prueba que la máquina encargada de cifrar la comunicación es la máquina a través de la cual nuestra máquina cliente quiere establecer una comunicación. La máquina que establece la conexión mediante TLS usará la información de los certificados para iniciar un proceso de validación que evitará la intercepción maliciosa de la comunicación. Cada certificado proporcionará información sobre una autoridad que se encargará de validar el certificado enviado a través de una conexión TLS.


La generación de los certificados

Si pretendemos que nuestro servidor ofrezca servicio de correo a terceros y pretendemos que la comunicación con estos se realice de forma cifrada, es altamente recomendable el uso de un certificado firmado por una autoridad certificadora del tipo Verisign o Thawte. La finalidad de este manual supone el uso del servidor en la red privada de la empresa o para el disfrute de comunicaciones cifradas a título personal, por lo que será suficiente con la creación de una autoridad certificadora propia que se encargará de firmar los certificados. Las dos opciones serán igual de seguras, evitándose con la segunda el elevadísimo coste de un certificado de pago. Resumiremos por tanto los tres pasos a seguir para generar un certificado:

  • Creación del certificado.
  • Firma del certificado por una entidad certificadora.
  • Instalación del certificado.

Lo primero que tendremos que hacer será crear el certificado siguiendo los pasos que se detallan a continuación, atendiendo a una única salvedad: No añadiremos palabra de paso a los certificados para evitar el bloqueo del servidor al iniciarse.

  • Creamos una nueva entidad certificadora mediante el script /etc/pki/tls/misc/CA del paquete openssl (existe otro script más completo que se obtiene de la instalación del paquete openssl-perl y cuyo uso se recomienda. La ruta de este script quedaría en /etc/pki/tls/misc/CA.pl). Adjuntaremos al comando el parámetro -newca para la creación de la nueva CA:

#/etc/pki/tls/misc/CA.pl -newca

  • Seguidamente realizaremos la petición del certificado:

#/etc/pki/tls/misc/CA.pl -newreq-nodes

  • Finalmente firmaremos el certificado:

#/etc/pki/tls/misc/CA.pl -newreq-nodes -sign

Los ficheros resultantes serán copiados a /etc/postfix/ssl. Estos ficheros son los siguientes:

  • cacert.pem: el certificado de la autoridad certificadora, al cual se remitirá al cliente cuando quiera comprobar la autenticidad del certificado que le ha enviado nuestro servidor Postfix. Quedará guardado en /etc/pki/CA/cacert.pem.
  • newcert.pem: el certificado público que enviaremos al cliente para establecer la comunicación segura.
  • newkey.pem: el certificado privado que almacenaremos en el servidor y del cual la parte realmente importante es la clave, que debe permanecer secreta.

Para convertir un fichero de clave con palabra de paso en uno sin palabra de paso, tendremos que ejecutar openssl rsa sobre el fichero de clave original. Por ejemplo, para cambiar el estado de la clave de CA generada anteriormente, teclaríamos en la consola lo siguiente:

# openssl rsa -inform pem -in /etc/pki/CA/private/cakey.pem -text -out /etc/pki/CA/private/newkey.pem

Para finalizar la instalación ejecutaremos los siguientes comandos:

#cp cacert.pem /etc/postfix/ssl/
#cp newcert.pem /etc/postfix/ssl/
#cp newkey.pem /etc/postfix/ssl/
#chown root /etc/postfix/ssl/newkey.pem
#chmod 400 /etc/postfix/ssl/newkey.pem

Para evitar los avisos en los clientes de correo originados por la entidad certificadora no reconocida y tener que recurrir al pago a una entidad reconocida comercialmente, podemos usar los certificados emitidos por asociaciones del tipo CACert.org. Será necesario realizar un alta en su página web, añadir el dominio y solicitar la firma del certificado. Instalaremos entonces su certificado raíz en cada máquina y tendremos certificados firmados por una entidad reconocida con coste es nulo.


Modificaciones en Postfix

Las modificaciones para cifrar el canal desde postfix se harán sobre el fichero /etc/postfix/main.cf, que contendrá estas lineas adicionales (que ya se publicaron en el capítulo correspondiente a la configuración de postfix):

smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/ssl/newkey.pem
smtpd_tls_cert_file = /etc/postfix/ssl/newcert.pem
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Así, todas las comunicaciones y autenticaciones que se hagan a través de smtpd se realizarán mediante TLS. Para aplicar los cambios, reiniciaremos el servidor postfix.


Modificaciones en Cyrus-IMAP

Para activar el cifrado de la comunicación en Cyrus-IMAP atenderemos primero a las dos lineas de configuración referentes al protocolo imap en el fichero /etc/cyrus.conf, bajo la sección SERVICES:

  imap          cmd="imapd" listen="localhost:imap" prefork=5
  imaps         cmd="imapd -s" listen="imaps" prefork=1

Donde observamos la ejecución del protocolo seguro de imap (imaps) y la ejecución del protocolo imap sin seguridad sólo bajo localhost (necesario para el uso de cyradm). Para continuar, añadiremos las siguientes líneas a /etc/imapd.conf:

tls_cert_file: /etc/ssl/certs/cyrus-global.pem
tls_key_file: /etc/ssl/certs/cyrus-global.key
tls_ca_file: /etc/ssl/certs/cyrus-imapd-ca.pem

Y ejecutaremos los comandos siguientes, ya que usaremos los mismos certificados que postfix:

#cp /etc/postfix/ssl/newcert.pem /etc/ssl/certs/cyrus−global.pem
#cp /etc/postfix/ssl/cacert.pem /etc/ssl/certs/cyrus−imapd−ca.pem
#cp /etc/postfix/ssl/newkey.pem /etc/ssl/certs/cyrus−global.key
#chown cyrus:mail /etc/ssl/certs/cyrus−global.key
#chmod 600 /etc/ssl/certs/cyrus−global.key

Para finalizar, observemos cómo el servidor smtp acepta comunicaciones cifradas al validarse (En azul, los comandos a introducir):

# telnet localhost 25
Trying 127.0.0.1...
Connected to mail.server.net (127.0.0.1).
Escape character is '^]'.
220 mail.server.net ESMTP Postfix (Fedora)
EHLO localhost
250-mail.server.net
250-PIPELINING
250-SIZE 20480000
250-ETRN
250-STARTTLS
250 8BITMIME
STARTTLS
220 Ready to start TLS
QUIT
QUIT

Connection closed by foreign host.

Los distintos métodos de autenticación disponibles se ofrecen antes de comenzar el establecimiento del canal seguro. Si alguna cosa no resultara correcta, podemos aumentar el nivel de loggin sobre el fichero /etc/postfix/main.cf y la opción smtpd_tls_loglevel en un valor de, por ejemplo, 3, que auditaremos sobre el fichero /var/log/maillog.


Comentario[s]
Como agregar certificados?
Escrito por dehylus el 2006-05-03 15:02:44
Hola, tengo una duda con respecto a los certificados. Todo me ha funcionado de maravilla, por lo que me dirigi a CACert.org y pude sacar unos certificados. Ahora mi duda es como reemplazarlos por los que genere yo, ya que solo obtengo el certificado por pantalla y no los archivos. Ya se que deberia entrar al archivo y hay pegar lo que me dieron en CACert.org, pero mi duda es, cuales son los archivos que hay que alterar?, hay que borrarlos enteros y sustituirlos, o solo alguna parte de ellos. Ojala pudieran aclarar este punto, gracias.-
CAcert.org
Escrito por admin el 2006-05-03 23:42:56
Si tienes certificados de Cacert.org es que has hecho una petición mediante openssl. Pues bien, el texto que te aparece por pantalla al hacer la petición del certificado de servidor, lo tienes que guardar en un archivo de texto tal cual, y ese será el certificado público. Tendrás que sustituir, si sigues el ejemplo de este manual, los ficheros newcert.pem y cyrus-global.pem con el texto del nuevo fichero (sólo con ese texto. No vale nada del antiguo certificado). La clave sigue siendo la misma y la CA también. Yo guardaría los certificados antiguos con extensión .bak, por si acaso. 
Para evitar errores posteriores de entidades no reconocidas por parte de los gestores de correo, habrás de instalar el certificado raíz de CAcert.org (que incluso podrás guardar como CA en tu servidor).
No funciona.-
Escrito por dehylus el 2006-05-11 18:23:34
Hice al pie de la letra lo que me indicastes y el deja de funcionar, si vuelvo a los certificados antiguos, vuleve a funcionar. He seguido todo el tutorial, que mas podra ser???, gracias.-
Qué raro ..
Escrito por admin el 2006-05-11 21:20:04
Debería funcionarte. No estás más que cambiando un certificado por otro, los dos firmados, uno por tí y el otro por Cacert.org. Supongo que en Cacert.org pediste un certificado de servidor que coincide con tu dominio real. 
No sé, mira los logs a ver si no es un problema de ese certificado y es problema de otro. 
 
Como último recurso, prueba una cosa y me dices si te funciona: mira si el fichero de clave está encriptado. Si lo está, desencríptalo como está escrito en el capítulo y vuelve a probar.
newcert.pam vacio
Escrito por qrt el 2006-05-16 20:59:57
Hola, he intentado generar dos veces los certificados y el fichero newcert.pam me aparece vacio del todo, supongo que no es normal, ademas aparecen las siguientes lineas en maillog. 
May 16 19:48:55 mail postfix/smtpd[4438]: warning: cannot get certificate from file /etc/postfix/ssl/newcert.pem 
May 16 19:48:55 mail postfix/smtpd[4438]: warning: TLS library problem: 4438:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:642:Expecting: CERTIFICATE: 
May 16 19:48:55 mail postfix/smtpd[4438]: warning: TLS library problem: 4438:error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib:ssl_rsa.c:767: 
 
No se que estoy haciendo mal. 
 
Qrt

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >