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

Responder a