Progetto

Generale

Profilo

SMTP autenticato con Postfix, SASL e LDAP

La configurazione di un servizio SMTP autenticato può risultare utile per consentire la spedizione di posta dall'esterno della propria rete. Postfix può gestire in vari modi l'autenticazione SMTP, il più semplice dei quali è appoggiarsi a Dovecot (che già supporta nativamente moltissimi schemi di autenticazione) in modo da effettuare la configurazione una volta sola. Qualora però si abbia un servizio che deve solo inoltrare la posta e non riceverla, l'installazione di Dovecot può essere eccessiva, inoltre si possono avere esigenze diverse, ad esempio una gestione multidominio fatta su database, (come quella illustrata in PostfixAdminInstall) a cui si aggiungono altri utenti mantenuti su LDAP.

Vedremo in questo caso come si può utilizzare l'autenticazione classica con SASL per fornire un accesso SMTP autenticato a Postfix, configurando saslauthd per effettuare l'autenticazione con i dati di un server LDAP.

Configurazione di Postfix

Postfix supporta l'autenticazione SASL in maniera nativa, per abilitarla occorrono comunque alcuni passi, il primo è quello di aggiungere a main.cf le seguenti direttive di configurazione:

# TLS
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/ssl/private/dominio.it-key.pem
smtpd_tls_cert_file = /etc/ssl/certs/dominio.it-cert.pem
smtpd_tls_CAfile = /etc/ssl/certs/ca-cert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

per forzare l'uso di TLS per l'accesso in autenticazione, impostando la cifratura delle connessione al server che consenta di evitare la trasmissione in chiaro delle credenziali; per abilitare l'autenticazione con SASL occorre invece aggiungere le ulteriori direttive di configurazione:

# per autenticazione sasl lato server
smtpd_sasl_auth_enable = yes
smtp_sasl_application_name = smtpd
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes

per abilitare l'uso di SASL; a queste si aggiunge la necessità di ipostare correttamente la direttiva smtpd_recipient_restrictions aggiungendovi la condizione permit_sasl_authenticated, una possibile configurazione potrebbe essere la seguente:

smtpd_recipient_restrictions =
        check_sender_access hash:/etc/postfix/access,
        check_recipient_access hash:/etc/postfix/access,
        check_client_access hash:/etc/postfix/access,
        permit_sasl_authenticated,
        reject_unauth_pipelining,
        reject_rbl_client zen.spamhaus.org,
        reject_invalid_hostname,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        permit_mynetworks,
        reject_unauth_destination

Con queste configurazioni Postfix si appoggerà a libsasl2-2 per l'autenticazione, le modalità con questa questa viene realizzata dovranno essere configurate nel file /etc/postfix/sasl/smtpd.conf, in questo file va indicato quale metodo deve essere utilizzato per eseguire il controllo delle password e quale "_meccanismo_" di autenticazione deve essere utilizzato con:

pwcheck_method: saslauthd
mech_list: plain login

Configurazione di SASL (saslauthd) per LDAP

La modalità più semplice per utilizzare SASL per la verifica delle password con Postfix è utilizzare il demoane saslauthd, come indicato nell'estratto di configurazione precedente, a questo poi va aggiunto il modulo per gestire l'autenticazione su LDAP, per questo è necessario installare i pacchetti:

apt-get install sasl2-bin libsasl2-modules-ldap

L'installazione di saslauthd non attiva il servizio, questo deve essere abilitato esplicitamente in /etc/default/saslauthd, inoltre occorre specificare nello stesso file l'uso di LDAP ed impostare la creazione del socket per la comunicazione con il servizio nel chroot di Postfix, questo significa modificare le seguenti righe del file:

...
# Should saslauthd run automatically on startup? (default: no)
START=yes
...
# Example: MECHANISMS="pam" 
MECHANISMS="ldap" 
...
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd" 
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd" 

Inoltre per consentire a Postfix l'accesso al socket occorre aggiugerlo al gruppo sasl con:

adduser postfix sasl

Infine occorre creare il file /etc/saslauthd.conf con la configurazione per poter accedere ai dati di LDAP, con qualcosa del tipo (si assume che il server LDAP sia in locale, se è remoto si usi ldaps://indirizzo e si configuri correttamente /etc/ldap/ldap.conf per consentire l'acesso in maniera corretta (per la gestione dei certificati):

# LDAP server
ldap_servers: ldap://127.0.0.1
ldap_search_base: ou=people,dc=dominio,dc=it
ldap_filter: (uid=%u)

Una volta fatto questo di potrà riavviare il servizio con service saslauthd restart e si potrà verificare il funzionamento con:

# testsaslauthd -u user -p password -f /var/spool/postfix/var/run/saslauthd/mux
0: OK "Success." 

A questo punto si potrà riavviare Postfix e verificare che la spedizione della posta funzioni correttamente con:

# env ssl-verify=ignore smtp-use-starttls=true smtp=mail.dominio.it smtp-auth-user=user smtp-auth-password=password smtp-auth=login \
  heirloom-mailx -v -s prova -r mittente@dominio.it destinatario@dominio.it
test
test
.