miércoles, 2 de julio de 2008

Problemas de autenticación entre un app que envía correo electrónico sin autenticar.

Hace poco me toco instalar un aplicativo de auditoría de bases de datos que, entre las múltiples medidas de auditoría que incorpora, está el envío de correo electrónico para notificar políticas que han sido violadas o alertadas. Esto fue para una prueba de concepto, donde el cliente tiene varias bases de datos jalando en servidores Windo*s. El detalle que me tocó fue que el servidor de correo interno tiene configurada la autenticación para el SMTP, sin embargo, el aplicativo de auditoría no tiene soporte para autenticarse.

Esquema actual: Todos los servidores son Windo*s. Por tanto no podía meterle mano a los servidores e instalar un U*x

Solución: Veo 3 caminos:

  1. un servidor linux virtualizado: demasiado pesado, ya que en win* tendría que usar vmware.
  2. Usar andlinux, que corre en el anillo cero de un win* de 32bits
  3. Usar cygwin, que puedo correr en x64 o x86

Tomamos el camino 2, el procedimiento fue el siguiente:

  1. Descargar andlinux de http://andlinux.org AndLinux es una distribución especial basada en ubuntu que se instala en el anillo cero del kernel de windows y que se ejecuta simultaneamente como si fuese un driver.
  2. Reiniciar el sistema y al volver a loguearse, ejecutar la Consola FTLK o Consola NT
  3. instalar postfix y las bibliotecas de autenticación: apt-get install postfix postfix-tls libsasl2-modules.
  4. activar la autenticacion hacia el padre:
    1. Crear un archivo de mapa con un usuario válido en /etc/postfix/sasl/
      • echo "url-o-ip-del-servidor-padre usuario:pass" > /etc/postfix/sasl/usuario_valido.txt
    2. Añadir el mapa:
      • cd /etc/postfix/sasl && postmap usuario_valido.txt
    3. Configurar a postfix para realizar relay
      • postconf -e 'relayhost = url-o-ip-del-servidor-padre'
      • postconf -e 'mynetworks = 127.0.0.0/8, 192.0.0.0/8'
      • postconf -e 'smtp_sasl_auth_enable = yes'
      • postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl/usuario_valido.txt'
      • postconf -e 'smtp_sasl_security_options = noanonymous'
    4. Si esto no permite hacer el relay hacia el servidor padre, revisar lo siguiente:
    5. Hacer telnet al puerto 25 del padre:
      • telnet url-o-ip-del-servidor-padre 25
    6. Realizar un EHLO y buscar la linea que dice AUTH
      • EHLO servidor-padre
      • 250 AUTH cram-md5 ntlm login plain
    7. probar con los metodos login, plain o cram-md5 (de acuerdo a los encontrados en el EHLO) añadiendo la siguiente bandera a postfix:
      • postconf -e 'smtp_sasl_mechanism_filter = login' #este funciona con exchange que fue el problema que tuvimos en esta POC.
    8. Reiniciar el postfix: /etc/init.d/postfix restart.

1 comentario:

MaC dijo...

Opción: Si el servidor es Exchange, se puede crear un conector lógico asignado a la IP del servidor de APP, este conector se crea con acceso anónimo permitienedo hacer el envío sin autenticación y limitado a recibirlo de ésta forma sólo desde el equipo al que corresponde la IP.

Para Exchange 2007: http://technet.microsoft.com/en-us/library/bb124327(EXCHG.80).aspx

Exchange 2003:
http://technet.microsoft.com/es-es/library/aa997292(EXCHG.80).aspx