Postfix+Dovecot sasl authentication
Indice
Introduzione
In questo breve documento vorrei spiegare brevemente come utilizzare Postfix, Dovecot e Postgresql per gestire gli utenti di un server SMTP+IMAP.
Il documento non parte da zero, e per l'installazione e configurazione di base dei suddetti programmi vi rimando alla documentazione gia' presente sulle relative home pages e sullo stesso sito slacky.
Le uniche cosa che mostrero' sono la struttura della table di PostgreSQL e le parti del file di configurazione di Postfix e Dovecot riguardanti l'argomento specifico.
Postfix
Per gestire le mailbox in postfix, conviene utilizzare i virtual_domains, che permettono di servire piu' domini di posta con lo stesso server, semplificando notevolmente la configurazione e permettendo di centralizzare il controllo (antivirus e antispam) ed i backup.
configurazione
In main.cf:
virtual_mailbox_domains = nonesisto.it enemmenoio.it # 2 G # virtual_mailbox_limit = 2048000000 virtual_mailbox_base = /var/spool/virtual virtual_mailbox_maps = hash:/usr/local/etc/postfix/virtual_mailbox virtual_minimum_uid = 100 virtual_uid_maps = static:65534 virtual_gid_maps = static:65533
In virtual_mailbox:
giovanni@nonesisto.it nonesisto/giovanni/ samantha@nonesisto.it nonesisto/samantha/ alberto@enemmenoio.it enemmenoio/alberto/
Le mail quindi verranno salvate nella directory base /var/spool/virtual, nelle sottodirectory indicate in virtual_mailbox, e saranno in formato Maildir, grazie allo slash finale. Dovrete creare solo le sottodirectory della directory base (in questo caso nonesisto e nemmenoio), lasciando che postfix crei le maildir alla prima mail ricevuta. Ovviamente dovrete settare i permessi delle directory in modo che l'utente postfix possa creare le sotto directory.
N.B. Ricordarsi di ridare sempre il comando 'postmap seguito da un reload di postfix quando si fanno variazioni nei files hash di configurazione !
# postmap /usr/local/etc/postfix/virtual_mailbox # postfix reload
Testate che la ricezione delle mail vada a buon fine, controllando che siano state create le relative maildir degli utenti.
PostgreSQL
In un database (ad es. imapusers) create una table (leggibile da un utente tipo loginimap) formata dai seguenti campi:
imapusers=# \d user_tbl Table "public.user_tbl" Column | Type | Modifiers ----------+------------------------+------------------------------------------------------- id | integer | not null default nextval('user_tbl_id_seq'::regclass) userid | character varying(50) | not null domain | character varying(50) | not null password | character varying(50) | not null mail | character varying(256) | not null uid | integer | not null default 65534 gid | integer | not null default 65534
Nella table ci saranno i campi di autenticazione userid e password (da inserire con la funzione SQL md5()), il domain usato dalle virtual_mailbox di postfix e il uid/gid dell'utente.
1 | samantha | nonesisto.it | 4r9bdaw83674aq11ba6094caq3z | /var/spool/virtual/nonesisto.it/samantha/ | 65534 | 65534
Dovecot
Nel file di configurazione di dovecot, indicate come meccanismo di autenticazione di default l'sql passando negli args il percorso completo del file di configurazione delle query.
auth default { passdb sql { args = /usr/local/etc/dovecot-sql.conf } userdb sql { args = /usr/local/etc/dovecot-sql.conf } }
Previa compilazione di dovecot con i driver per PostgreSQL, creiamo il file che permette a dovecot di stabilire i parametri della connessione e le query da eseguire:
# Database driver: mysql, pgsql, sqlite driver = pgsql connect = host=127.0.0.1 dbname=imapusers user=loginimap password=sicretverimach default_pass_scheme = PLAIN-MD5 password_query = SELECT userid as user, password FROM user_tbl WHERE userid = '%u' user_query = SELECT mail,uid,gid FROM user_tbl WHERE userid = '%u'
Riavviate dovecot e provate l'autenticazione.
Unificare l'autenticazione per l'IMAP e l'SMTP
Arrivati a questo punto, vorremmo che i nostri utenti inviassero le mail da qualsiasi indirizzo IP, non necessariamente appartenente alla LAN su cui risiede il server Postfix. Per evitare di diventare un famigerato open relay, aggiungiamo al file di configurazione di Dovecot una riga, che "aggiungera'" un socket in ascolto per permettere a Postfix di autenticarsi attraverso il database degli utenti IMAP.
Le righe che abbiamo aggiunto prima in dovecot.conf per l'autenticazione sql, diventeranno:
auth default { passdb sql { args = /usr/local/etc/dovecot-sql.conf } userdb sql { args = /usr/local/etc/dovecot-sql.conf } socket listen { client { # percorso assoluto # path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } }
E in main.cf aggiungeremo le righe per abilitare l'autenticazione SASL, indicando il percorso relativo del socket di autenticazione "apero" da Dovecot:
smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes smtpd_sasl_path = private/auth
E ricordiamoci di abilitare l'autenticazione SASL in smtpd_recipient_restrictions, se non l'abbiamo gia' fatto:
smtpd_recipient_restrictions = reject_unauth_pipelining, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_invalid_hostname, reject_non_fqdn_hostname, reject_unauth_destination, check_helo_access hash:/usr/local/etc/postfix/smtp_helo_blacklist, reject_unlisted_recipient, check_policy_service inet:127.0.0.1:2525, reject_rbl_client list.dsbl.org, reject_rbl_client sbl-xbl.spamhaus.org, permit
P.S. Sulla porta TCP 2525 ho gld per le whitelist.
Conclusioni
Il concetto di centralizzare l'autenticazione SMTP e IMAP vi permette di aggiungere e abilitare un utente semplicemente aggiungendo una riga nella table del database e una riga in virtual_mailboxes, e permette di tenere sotto controllo l'accesso nell'invio della posta.
Spero solo di essere stato esauriente !
Links
http://www.dovecot.org/ http://www.postgresql.org/ http://www.postfix.org/
Autore: Antonio67 Data: Wed May 14 2008