Postfix: ¿cómo usar un archivo simple para la autenticación SASL?

8

Me gustaría ejecutar Postfix en un VPS de Debian para enviar correos electrónicos desde mi aplicación. La aplicación (que se ejecuta en otros VPS) se conectaría a Postfix a través de SMTP. Postfix no tiene que manejar el correo electrónico entrante; se trata solo de enviar los mensajes salientes.

Para evitar ser un relé abierto, se debe usar la autenticación SASL. Sin embargo, no quiero ejecutar Dovecot o MySQL para la autenticación SASL.

¿Cómo puedo configurar la autenticación SASL usando un archivo simple (que contiene nombres de usuario y contraseñas)?

Ya encontré una pregunta similar ; sin embargo, no se dieron respuestas satisfactorias allí.

Jonathan
fuente
Use un firewall para permitir que solo se conecten las direcciones IP del otro VPS. Además, puede configurar la variable mynetworks en main.cf para que Postfix sea consciente de eso, incluso si falla el firewall. Si realmente desea SASL, lea el SASL_README que viene con postfix y configure SASL para usar / etc / sasldb como una "base de datos". Debería funcionar fuera de la caja. saslpasswd agrega / elimina / cambia el archivo.
AndreasM

Respuestas:

14

Postfix actualmente solo admite dos métodos de autenticación SASL. Uno de ellos es Dovecot, que no quieres. El otro es Cyrus, que es lo más parecido a lo que quieres sin reescribir Postfix. Implica ejecutar un demonio de autenticación separado ( saslauthd), pero el archivo de autenticación es fácil de editar y actualizar.

Los conceptos básicos para usar Cyrus SASL se pueden encontrar en el sitio de documentación de postfix , pero aquí hay una breve descripción. ¡ Mire el enlace si algo es confuso de alguna manera!

Comience instalando Cyrus SASL con el complemento sasldb. (Cómo hacer eso se deja como un ejercicio para el lector; presumiblemente hay un paquete en cualquier sistema de paquetes que esté utilizando su marca de Unix). Dado que la comunicación entre Postfix y SASL se realizará a través de un socket de dominio Unix, es posible que desee agregue postfix al grupo SASL y asegúrese de que ese grupo tenga permisos de lectura y ejecución en el directorio /var/run/saslauthd.

Configurar SASL

Configure SASL para usar sasldb editando /etc/sasl2/smtpd.conf:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM

El complemento sasldb significa que sasl usará un archivo Berkeley DB para nombres de usuario y contraseñas. Agrega usuarios con el comando saslpasswd2:

$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):

Tenga en cuenta que especifica un dominio junto con el nombre de usuario, y el usuario deberá usar "[email protected]" en lugar de solo "username" al autenticarse.

Puede verificar qué usuarios han ingresado ejecutando sasldblistusers2.

Inicie saslauthd y verifique que la autenticación funciona haciendo

testsaslauthd -u [email protected] -p password

Configurar Postfix

Una vez hecho esto, dígale a Postfix que use SASL y dígale a Cyrus que es SMTP que se está autenticando, editando /etc/postfix/main.cf para que contenga

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Luego, vuelva a cargar postfix, y debería estar configurado.

Jenny D
fuente
Gracias por tu extensa respuesta! He seguido todos los pasos y todo parece funcionar bien. sasldblistusers2genera correctamente la lista de usuarios que agregué. Sin embargo, cuando se realiza testsaslauthd, consigo este resultado: 0: NO "authentication failed". ¿Tienes alguna idea de cómo podría solucionarlo? Esto es de mi /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan
Eso significa que saslauthd está tratando de usar PAM en lugar de sasldb. ¿Cuál fue la línea de comando utilizada para iniciarlo?
Jenny D
Utilicé testsaslauthd (como se describe en su respuesta original), y también traté de agregarlo -s smtpd. Si fijo MECHANISMS="sasldb"en /etc/default/saslauthdy saslauthd reinicio, consigo el mismo resultado de testsaslauthd. El registro de autenticación muestra un mensaje diferente:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan
2
Hm, testsaslauthd funciona si especifico el nombre de usuario y la parte del dominio por separado, de esta manera: testsaslauthd -u username -r example.com -p XXXdevuelve 0: OK "Success.". Ahora comprobaré si Postfix puede evitar esto ...
Jonathan
Si lo usa -s smtpd, lo hará usar PAM en lugar de sasldb, así que no haga eso ...
Jenny D
1

Para evitar ser un relé abierto, se debe usar la autenticación SASL.

SASL es solo una de las numerosas formas de prevenir esto. Otra sería incluir en la lista blanca las IP que usa en los otros VPS o solicitar certificados de cliente TLS (se puede decir que es la forma más segura).

Simplemente configure una CA de firma en la máquina de postfix y firme un certificado por VPS que desee enviar por correo electrónico.
Luego, solicite la verificación completa del certificado del cliente para todo el correo enviado; deshabilitar cualquier otro método de envío.

Lo que pides no es posible, ya que postfix no es compatible con SASL directamente.

Adaptador
fuente
1

Solo aclarando algunas cosas,

Crear una cuenta en sasldb:

% saslpasswd2 -c -u fqdn username

Prueba de autenticación:

% testsaslauthd -u username -p password

(nota: el nombre de usuario no es seguido por el fqdn)

También me gustaría agregar que crear una cuenta raíz

% saslpasswd2 -c -u example.com root

no te permitirá autenticarte,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

Pero esto no es un error. Es solo una característica de seguridad.

Saurabh
fuente
0

Si no necesita manejar el correo entrante, no se moleste con la autenticación. Simplemente bloquee el tráfico entrante con un cortafuegos y / o restringirlo solo a localhost.

 inet_interfaces = 127.0.0.1

No más problemas de retransmisión abierta, y también evita complicar las cosas para las aplicaciones que necesitan enviar correo a través de postfix.

mc0e
fuente
Gracias por la respuesta. La aplicación se ejecuta en otros VPS, por lo que Postfix recibirá el correo electrónico de otros hosts que no sean localhost.
Jonathan
¿Puede definir las direcciones IP de las conexiones esperadas y enumerarlas en la configuración de postfix o en una configuración de firewall? Por ejemplo, todos pueden estar en un solo bloque de red, o en un conjunto de IP o bloques lo suficientemente pequeños como para que pueda enumerarlos fácilmente. Alternativamente, podría considerar el uso de una red privada entre sus hosts virtuales.
mc0e