Postfix: come utilizzare un file semplice per l'autenticazione SASL?


8

Vorrei eseguire Postfix su un VPS Debian per inviare e-mail dalla mia applicazione. L'applicazione (in esecuzione su altri VPS) si connetterà a Postfix tramite SMTP. Postfix non deve gestire la posta elettronica in arrivo; si tratta solo di inviare i messaggi in uscita.

Per evitare di essere un relay aperto, è necessario utilizzare l'autenticazione SASL. Tuttavia, non voglio eseguire Dovecot o MySQL per l'autenticazione SASL.

Come posso configurare l'autenticazione SASL usando un semplice file (contenente nomi utente e password)?

Ho già trovato una domanda simile ; tuttavia, nessuna risposta soddisfacente è stata data lì.


Utilizzare un firewall per consentire la connessione solo degli indirizzi IP dell'altro VPS. Inoltre puoi impostare la variabile mynetworks in main.cf per renderlo consapevole di Postfix, anche se il firewall fallisce. Se vuoi davvero SASL, leggi SASL_README fornito con Postfix e configura SASL per usare / etc / sasldb come "database". Dovrebbe funzionare fuori dalla scatola. saslpasswd aggiunge / rimuove / modifica il file.
AndreasM,

Risposte:


14

Postfix attualmente supporta solo due metodi di autenticazione SASL. Uno dei è Dovecot, che non vuoi. L'altro è Cyrus, che è il più vicino possibile a ciò che si desidera e che è possibile ottenere senza riscrivere Postfix. Implica l'esecuzione di un demone di autenticazione separato ( saslauthd), ma il file di autenticazione è facile da modificare e aggiornare.

Le basi per l'utilizzo di Cyrus SASL sono disponibili nel sito di documentazione postfix , ma ecco una breve descrizione. Si prega di guardare il link se qualcosa è confuso in alcun modo!

Inizia installando Cyrus SASL con il plugin sasldb. (Come fare ciò è lasciato come un esercizio per il lettore; presumibilmente c'è un pacchetto in qualunque sistema di pacchetti sta usando la tua marca di unix.) Dato che la comunicazione tra Postfix e SASL avverrà tramite un socket di dominio unix, potresti voler aggiungi postfix al gruppo SASL e assicurati che quel gruppo abbia letto ed esegua le autorizzazioni per la directory /var/run/saslauthd.

Configura SASL

Configura SASL per usare sasldb modificando /etc/sasl2/smtpd.conf:

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

Il plugin sasldb significa che sasl utilizzerà un file Berkeley DB per nomi utente e password. Aggiungi utenti con il comando saslpasswd2:

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

Si noti che si specifica un dominio insieme al nome utente e l'utente dovrà utilizzare "nomeutente@esempio.com" anziché solo "nome utente" durante l'autenticazione.

Puoi verificare quali utenti sono stati inseriti eseguendo sasldblistusers2.

Avviare saslauthd e verificare che l'autenticazione funzioni eseguendo

testsaslauthd -u username@example.com -p password

Configura Postfix

Una volta fatto, dì a Postfix di usare SASL e di dire a Cyrus che è SMTP che sta eseguendo l'autenticazione, modificando /etc/postfix/main.cf per contenere

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

Quindi, ricarica postfix e dovresti essere impostato.


Grazie per la tua ampia risposta! Ho seguito tutti i passaggi e tutto sembra funzionare bene. sasldblistusers2genera correttamente l'elenco degli utenti che ho aggiunto. Tuttavia, durante l'esecuzione testsaslauthd, ottengo questo risultato: 0: NO "authentication failed". Hai idea di come potrei risolverlo? Questo è dal mio /var/log/auth.log:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan il

Ciò significa che saslauthd sta cercando di usare PAM invece di sasldb. Qual è stata la riga di comando utilizzata per avviarlo?
Jenny D,

Ho usato testaslauthd (come descritto nella risposta originale) e ho anche provato ad aggiungerlo -s smtpd. Se ho impostato MECHANISMS="sasldb"in /etc/default/saslauthde saslauthd riavvio, ottengo lo stesso risultato da testsaslauthd. Il registro delle autorizzazioni mostra un messaggio diverso:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
Jonathan,

2
Hm, testsaslauthd funziona se specifico separatamente il nome utente e la parte del dominio, in questo modo: testsaslauthd -u username -r example.com -p XXXrestituisce 0: OK "Success.". Ora controllerò se Postfix può aggirare questo ...
Jonathan il

Se lo usi -s smtpdlo farai usare PAM invece di sasldb, quindi non farlo ...
Jenny D

1

Per evitare di essere un relay aperto, è necessario utilizzare l'autenticazione SASL.

SASL è solo uno dei numerosi modi per evitarlo. Un altro sarebbe quello di inserire nella whitelist gli IP utilizzati sugli altri VPS o di richiedere certificati client TLS (si può dire che questo è il modo più sicuro).

Basta impostare una CA di firma sul computer postfix e firmare un certificato per VPS che si desidera inviare e-mail.
Quindi richiedere la verifica completa del certificato client per tutta la posta inviata; disabilitare qualsiasi altro metodo di presentazione.

Quello che chiedi non è possibile, poiché postfix non supporta direttamente SASL.


1

Chiarendo solo alcune cose,

Creazione di un account in sasldb:

% saslpasswd2 -c -u fqdn username

Test dell'autenticazione:

% testsaslauthd -u username -p password

(nota: il nome utente non è seguito da fqdn)

Vorrei anche aggiungere che creando un account di root

% saslpasswd2 -c -u example.com root

non ti lascerà autenticare,

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

Ma questo non è un bug. È solo una funzione di sicurezza.


0

Se non è necessario gestire la posta in arrivo, non preoccuparsi dell'autenticazione. Basta bloccare il traffico in entrata con un firewall e / o limitarlo solo a localhost.

 inet_interfaces = 127.0.0.1

Niente più problemi di inoltro aperto e si evitano anche complicazioni per le applicazioni che devono inviare posta tramite Postfix.


Grazie per la risposta. L'applicazione è in esecuzione su altri VPS, quindi Postfix riceverà l'e-mail da host diversi da localhost.
Jonathan,

È possibile definire gli IP delle connessioni previste ed elencarli nella configurazione postfix o in una configurazione firewall? Ad esempio, potrebbero trovarsi tutti in un singolo blocco di rete o in un set abbastanza piccolo di IP o blocchi che è possibile elencarli facilmente. In alternativa puoi guardare usando una rete privata tra i tuoi host virtuali.
mc0e
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.