Hola Jaume On Wednesday 16 October 2002 09:23, jaume wrote: > Alguien me puede decir algun documento sobre la autentificacion smtp en > exim? > Estoy un poco liado de conceptos y necesitaria aclaración por favor. > Lo único que quiero es que al enviar una red con outlooks express a través > de exim en una Woody tengan que marcar por fuerza "mi servidor requiere > autentificacion", y que sea un usuario válido del sistema.(shadow passwd). > Tengo el exim instalado a partir del apt-get y configurado con las > opciones del eximconf, pero no se si tengo que bajarme los codigos fuentes > y compilarlo con otro soporte, ...o ke. > Ayudadme por favor. > > Gracias.
La documentación oficial la puedes encontrar en: http://www.exim.org/exim-html-3.30/doc/html/spec_toc.html#TOC763 ( creo que incluso el spec viene en la distribución de exim ) Tienes todo un capítulo dedicado a eso, por si acaso y de paso te pego un documentillo de cocina interna para incomporar smpt autentiticado a un exim con LDAP en multidominio sólo para algunos dominios --------------------------------------------------------------------------------------------------- ----------------------------------------- Paso 1: Compilación de exim con soporte para smtp autenticado: Local/Makefile AUTH_PLAINTEXT=yes Paso 2: Habilitar el uso de smtp autenticado por parte de los clientes: desde cualquier dirección:host_auth_accept_relay = * sólo desde las conexiones con relay permitido: #puedes utilizar los formatos habituales de exim, o incluso poner una sola #dirección de red con máscaras host_auth_accept_relay=/opt/exim/etc/relay.conf generar una macro LDAP de este tipo: LDAP_FILTER_SMTPAUTH=(&([EMAIL PROTECTED])(userpassword=$3)) Suponiendo que el mail del usuario de dominio.com contiene la uid del usuario y el dominio de no ser asi tendrías algo así: LDAP_FILTER_SMTPAUTH=(&(&([EMAIL PROTECTED])(uid=$2))(userpassword=$3)) suponiendo que el atributo userpassword contiene el password del usuario en texto plano. en configuraciones más trabajadas se podría atacar un password cifrado con MD5, pero en principio el soporte de SHA en las comparaciones no se obtiene de forma nativa. si unimos esto a que el atributo userpassword suele estar protegido de las miradas curiosas, con lo que la búsqueda LDAP se debe hacer con un usario con permisos suficientes para retirar el valor del atributo. lo puedes almacenar en otra Macro CREDENTIALS=user="cn=Directory Manager" pass=password Evidentemente no debería ser el directory manager quién haga la búsqueda, lo mejor, como me comentaba ernesto sería algo así como utilizar al propio usuario para validar su password, te cuento: imagina que todos los usuarios de dominio.com siguen la misma norma para generar su DN, por ejemplo la uid que envían para autenticar en el correo seguido de su posición en el árbol: uid=$uid_de_autentificación,ou=dominio,o=bt Como autentico al usuario validando la password.... pues creando esto en la macro credentias: CREDENTIALS_SECURE= user="uid=$2,ou=dominio,o=bt" pass=$3 si utilizas este segundo método te ahorras poner el password en el filtro: LDAP_FILTER_SMTPAUTH=([EMAIL PROTECTED]) o LDAP_FILTER_SMTPAUTH=(&(&([EMAIL PROTECTED])(uid=$2)) si la uid que utilizan para autententicar no es la misma, o no forma parte del dn..... pues tendrías que ver la manera de hacerte con el dn del usuario, puede que con una búsqueda ldap extra Evitas así configurar un usuario con privilegios sobre el LDAP en exim y el sistema de cifrado de las passwords es totalmente transparente para exim.... ( ¿qué sistema de smtp autenticado da más que esto? ) smtp_auth_driver: #opciones especificas de autentificación mediante password en claro #usuario password_codificada_en_base64 driver = plaintext public_name = PLAIN #parametros que el servidor solicita al cliente antes de expandir la condicion #por defecto usuario y password, cuando las tiene...., parece que a outlook #solo le gusta este formato concreto server_prompts = Username : Password #busqueda LDAP y validación server_condition = "${lookup ldap {CREDENTIALS_SECURE \ ldap:///LDAP_BASE?LDAP_ATTRIBUTES?sub?LDAP_FILTER_SMTPAUTH}{true} fail}" #paso del parametro de identificacion en forma de variable al resto #de elementos de exim, por ejemplo para añadir un campo en las cabeceras server_set_id = $2 tu server condition podría hacer usar la función crytpeq, aunque la extracción de los passwords del archivo de shadow te supondrá darle lectura al usuario que ejecuta exim, tendrías que obtener tu el texto cifrado, y bla bla bla, pero bueno, tampoco es : ------------------------------------------------------------------------------------------------------ crytpeq {<string1>}{<string2>} This condition is included in the Exim binary if it is built to support any authentication mechanisms (see chapter 35). Otherwise, it is necessary to define SUPPORT_CRYPTEQ in `Local/Makefile' to get crypteq included in the binary. The crypteq condition has two arguments. The first is encrypted and compared against the second, which is already encrypted. The second string may be in the LDAP form for storing encrypted strings, which starts with the encryption type in curly brackets, followed by the data. For example: {md5}CY9rzUYh03PK3k6DJie09g== If such a string appears directly in an expansion, the curly brackets have to be quoted, because they are part of the expansion syntax. For example: ${if crypteq {test}{\{md5\}CY9rzUYh03PK3k6DJie09g==}{yes}{no}} Two encryption types are currently supported: * md5 first computes the MD5 digest of the string, and then expresses this as printable characters by means of base64 encoding. * crypt calls the crypt() function as used for encrypting login passwords. If the second string does not begin with `{' it is assumed to be encrypted with crypt(), since such strings cannot begin with `{'. Typically this will be a field from a password file. -------------------------------------------------------------------------------------------------- PASSWORDCIFRADO="macro realizada con extract, utilizas $2 como patron de reconocimiento de línea y extraes con los : como separador de campo" #(recuerda que las macros las defines en main, pueden ir en la misma línea #pero se hacen imposibles de leer" server_condition = "${if crypteq {$3}{PASSWORDCIFRADA}{yes}{no}" La información de como trabajar con extract ,la tienes también en la documentación: http://www.exim.org/exim-html-3.30/doc/html/spec_toc.html#TOC179 Puede que haya un sistema mejor para comparar passwords del sistema pero lo desconozco, como consejo yo instalaría un openldap sin mucha floritura y lo atacaría para comparar passwords, expones menos la seguridad del sistema y al mismo tiempo te ahorras la "MACRO" de extracción de passwords cifrados ( aunque le puedas exportar usuario:password a un archivo y extraer de ahí que es bastante simple.... ) Ante cualquier duda de todos modos ya sabes donde estamos Espero que algo de esto te sirva de ayuda, un saludo Victor