Postfix: Autenticazione SASL

Ciao Ragazzi,

oggi andiamo sul tecnico.

Questo articolo server a chi utilizza Postfix come SMTP Server e nel caso specifico ad implementare l’autenticazione mediante il sistema Simple Authentication and Security Layer (SASL)

Questo sistema prevede la possibilità di integrare diverse modalità di autenticazione:

- EXTERNAL, in cui l’autenticazione è implicita nel contesto (per esempio, nei protocolli che già utilizzano IPsec o TLS)
- ANONYMOUS, per accessi guest non autenticati
- PLAIN, per gli accessi in testo chiaro
- OTP, un meccanismo one-time password. (OTP è stato reso obsoleto da SKEY)
- SKEY, meccanismo S/KEY.
- CRAM-MD5, un semplice schema challenge-response basato su HMAC-MD5.
- DIGEST-MD5 (storico), meccanismo challenge-response compatibile parzialmente con HTTP Digest basato su MD5.
- SCRAM (RFC 5802), schema moderno challenge-response con supporto al binding del canale
- NTLM, schema di autenticazione NT LAN Manage
- GSSAPI, per Kerberos V5 authentication attraverso il GSSAPI.
- BROWSERID-AES128, per Mozilla Persona authentication
- EAP-AES128, per GSS EAP authentication
- GateKeeper (& GateKeeperPassport), meccanismo challenge-response sviluppato da Microsoft per MSN Chat

Quello che vediamo oggi per Postfix è il più semplice ovvero il PLAIN con login tramite username e password memorizzati in un Database MySQL.

In questo articolo do per scontato che Postfix sia installato e funzionante.

Installiamo il demone di SASL:

apt-get install libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql

 

Fatto questo modifichiamo il file /etc/default/saslauthd sostituendo START=no con START=yes così il demone partirà all’avvio del pc.

Inoltre modificate la stringa OPTIONS=…. così OPTIONS=”-c -r -m /var/spool/postfix/var/run/saslauthd” questo è necessario perchè Postfix è eseguito come chroot e ha bisogno di accedere al socket di saslauthd

Inoltre dobbiamo creare la directory:

mkdir -p /var/spool/postfix/var/run/saslauthd

Sempre per l’ambiente chroot è necessario creare il link simbolico:

rm -rf /var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd

ATTENZIONE: se non cancellate il file /var/run/saslauthd testando il sistema avrete l’errore “connect() : No such file or directory 0″

Creiamo un nuovo file:

vi /etc/pam.d/smtp

Modifichiamo il file come segue:

auth    required   pam_mysql.so user=mailadmin passwd=newpassword host=127.0.0.1 db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mailadmin passwd=newpassword host=127.0.0.1 db=mail table=mailbox usercolumn=username passwdcolumn=password crypt=1

Abbiamo necessità di un secondo file:

vi /etc/postfix/sasl/smtpd.conf

Che editiamo come segue:

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true

Nel caso di autenticazione basata su DB MySQL il file va editato come segue (attenzione a mettere i nomi giusti del db e delle tabelle!):

pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: dbuser
sql_passwd: dbpassword
sql_database: dbname
sql_select: SELECT password FROM user WHERE username = '%u@%r'

Aggiungiamo l’utente postfix al gruppo sasl:

adduser postfix sasl

Poi provvediamo ad inserire le voci per l’autenticazione SASL dentro il main.cf di Postfix:

smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Riavviamo i servizi:

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

E proviamo che tutto funziona correttamente:

razorblade:~# testsaslauthd -s smtp -u root@example.com -p newpassword
0: OK "Success."

Enjoy!

About Paolo Daniele

Inserisci un commento

Il tuo indirizzo email non sarà pubblicato. Required fields are marked *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>