Server mail base: Postfix Dovecot e MySql: differenze tra le versioni

m
aggiornamento stile e aggiunti alcuni chiarimenti
m (aggiornamento stile e aggiunti alcuni chiarimenti)
Riga 24: Riga 24:
Per l'installazione dei pacchetti eseguire il comando:
Per l'installazione dei pacchetti eseguire il comando:


   aptitude install postfix-mysql dovecot-imapd
   # aptitude install postfix-mysql dovecot-imapd


Se sulla macchina c'era installato il predefinito Exim4, non preoccupatevi perché ci penserà Postfix a rimuoverlo.
Se sulla macchina c'era installato il predefinito Exim4, non preoccupatevi perché ci penserà Postfix a rimuoverlo.
Riga 40: Riga 40:


== Creazione del database ==
== Creazione del database ==
A questo punto è necesasartio preparare il database che ospiterà tutti i dati. Il nome assegnato al database è ''mailserver'', ma non è assolutamente vincolante, ergo potete assegnare il nome che volete, facendo però attenzione a modificare le istruzioni qui riportate.
A questo punto è necessario preparare il database che ospiterà tutti i dati. Il nome assegnato al database è ''mailserver'', ma non è assolutamente vincolante, ergo potete assegnare il nome che volete, facendo però attenzione a modificare le istruzioni qui riportate.


Entrare nella shell di mysql  (mysql -u root -p):
Entrare nella shell di mysql  (mysql -u root -p):
   mysql --user=root --password=mettere_password
   # mysql --user=root --password=mettere_password


Effettuato il login con i privilegi necessari e dalla console di MySQL creiamo il database:
Effettuato il login con i privilegi necessari, dalla console di MySQL procediamo con la creazione del database:
   mysql>  CREATE DATABASE mailserver DEFAULT CHARSET utf8;
   #''mysql>'' CREATE DATABASE mailserver DEFAULT CHARSET utf8;


Ora passiamo alla prima tabella destinata a memorizzare gli account utente virtuali. Nel nostro caso indirizzo email e nome utente coincideranno, come sono soliti fare gli ISP.
Ora passiamo alla prima tabella destinata a memorizzare gli account utente virtuali. Nel nostro caso indirizzo email e nome utente coincideranno, come sono soliti fare gli ISP.
Selezioniamo il database
Prima dobbiamo selezionare il database
   mysql> use mailserver
   #''mysql>'' use mailserver


Creiamo la table
Poi creiamo la tabella con la seguente istruzione SQL


   mysql> CREATE TABLE `users` (
   #''mysql>'' CREATE TABLE `users` (
     `email` varchar(200) NOT NULL,
     `email` varchar(200) NOT NULL,
     `password` varchar(128) NOT NULL,
     `password` varchar(128) NOT NULL,
Riga 65: Riga 65:




Notate il campo active, potremo utilizzarlo come flag per disattivare un utente senza eliminare le informazioni relative alla sua casella di posta.
Notate il campo "active" della tabella, questo lo potremo utilizzarlo come flag per disattivare un utente senza eliminare le informazioni relative alla sua casella di posta.
Proseguiamo con la successiva tabella destinata a contenere i domini per i quali il nostro server sarà abilitato a ricevere posta. Non dimenticate di far puntare al suo indirizzo IP i corrispondenti record MX dei DNS.
Proseguiamo con la successiva tabella destinata a contenere i domini per i quali il nostro server sarà abilitato a ricevere posta. Non dimenticate di far puntare al suo indirizzo IP i corrispondenti record MX dei DNS.
   mysql> CREATE TABLE `domains` (
   #''mysql>'' CREATE TABLE `domains` (
       `domain` varchar(200) NOT NULL,
       `domain` varchar(200) NOT NULL,
       `Status` enum('DISABLE','ENABLE') NOT NULL  default 'ENABLE',
       `Status` enum('DISABLE','ENABLE') NOT NULL  default 'ENABLE',
Riga 76: Riga 76:


Passiamo ora alla creazione della tabella degli forward, dove il campo "source" conterrà l'alias mentre "destination" la casella email verso cui verrà effettuata la ridirezione:
Passiamo ora alla creazione della tabella degli forward, dove il campo "source" conterrà l'alias mentre "destination" la casella email verso cui verrà effettuata la ridirezione:
   mysql> CREATE TABLE `forward` (
   #''mysql>'' CREATE TABLE `forward` (
     `source` varchar(200) NOT NULL,
     `source` varchar(200) NOT NULL,
     `destination` varchar(200) NOT NULL,
     `destination` varchar(200) NOT NULL,
Riga 86: Riga 86:


Terminiamo creando un utente che consentirà a Postfix di agire sul database:
Terminiamo creando un utente che consentirà a Postfix di agire sul database:
   mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON mailserver.* TO postfix@localhost IDENTIFIED BY 'postfix_password';  
   #''mysql>'' GRANT SELECT, INSERT, UPDATE, DELETE ON mailserver.* TO postfix@localhost IDENTIFIED BY 'postfix_password';  


Aggiorniamo i privilegi
Aggiorniamo i privilegi


   mysql> FLUSH PRIVILEGES;
   #''mysql>'' FLUSH PRIVILEGES;


Usciamo dalla sessione di mysql
Infine, usciamo dalla shell di mysql con il comando:
   mysql> quit
   #''mysql>'' quit




Riga 118: Riga 118:


Nella directory /etc/postfix, creiamo un file di nome ''mysql-domains.cf''.  
Nella directory /etc/postfix, creiamo un file di nome ''mysql-domains.cf''.  
   vi /etc/postfix/mysql-domains.cf
   # vi /etc/postfix/mysql-domains.cf


Tale file servirà ad accedere alla tabella domains, precedentemente creata, per verificare se Postfix sia autorizzato a ricevere posta per il dominio in oggetto. Ricordo che dovremo aver preventivamente configurato i DNS perché i record MX del dominio puntino al nostro server. Inseriamo in ''mysql-domains.cf'' le seguenti istruzioni:
Tale file servirà ad accedere alla tabella domains, precedentemente creata, per verificare se Postfix sia autorizzato a ricevere posta per il dominio in oggetto. Ricordo che dovremo aver preventivamente configurato i DNS perché i record MX del dominio puntino al nostro server. Inseriamo in ''mysql-domains.cf'' le seguenti istruzioni:
Riga 126: Riga 126:
   query = SELECT domain AS virtual FROM domains WHERE domain='%s'
   query = SELECT domain AS virtual FROM domains WHERE domain='%s'
   hosts = 127.0.0.1
   hosts = 127.0.0.1
NB: lo user "postfix" e relativa password sono relativi all'utente del database che hai definito con il comando "GRANT ..." nel capitolo precedente [[Server_mail_base:_Postfix_Dovecot_e_MySql#Creazione_del_database]]


La sintassi è molto semplice: con le prime tre righe indichiamo a Postfix le credenziali (user e password) ed il database a cui collegarsi.  
La sintassi è molto semplice: con le prime tre righe indichiamo a Postfix le credenziali (user e password) ed il database a cui collegarsi.  
Riga 143: Riga 145:
   hosts = 127.0.0.1
   hosts = 127.0.0.1


dove lo user "postfix" e relativa password sono relativi all'utente del database che hai definito con il comando "GRANT ..." nel capitolo precedente [[Server_mail_base:_Postfix_Dovecot_e_MySql#Creazione_del_database]]
NB: lo user "postfix" e relativa password sono relativi all'utente del database che hai definito con il comando "GRANT ..." nel capitolo precedente [[Server_mail_base:_Postfix_Dovecot_e_MySql#Creazione_del_database]]


La funzione SUBSTRING_INDEX permette di suddividere una stringa in sottostringhe utilizzando un carattere come separatore, nel nostro caso "@". Supponendo che l'indirizzo email sia test@miazienda.it SUBSTRING_INDEX(email,'@',-1) corrisponderà a miazienda.it mentre SUBSTRING_INDEX(email,'@',1) a test. Il risultato della query sarà il percorso ''miazienda.it/test/'' ed rappresenterà il percorso dove verranno salvate le email dell'utente in questione. Questo ci permetterà di gestire facilmente molti domini isolandoli e raggruppando i rispettivi account.
La funzione SUBSTRING_INDEX permette di suddividere una stringa in sottostringhe utilizzando un carattere come separatore, nel nostro caso "@". Supponendo che l'indirizzo email sia test@miazienda.it SUBSTRING_INDEX(email,'@',-1) corrisponderà a miazienda.it mentre SUBSTRING_INDEX(email,'@',1) a test. Il risultato della query sarà il percorso ''miazienda.it/test/'' ed rappresenterà il percorso dove verranno salvate le email dell'utente in questione. Questo ci permetterà di gestire facilmente molti domini isolandoli e raggruppando i rispettivi account.
Riga 150: Riga 152:
Questa tabella conterrà gli alias, ovvero quegli indirizzi email che saranno girati automaticamente ad un altro account email.
Questa tabella conterrà gli alias, ovvero quegli indirizzi email che saranno girati automaticamente ad un altro account email.
Nella directory /etc/postfix, creiamo i seguenti due file:
Nella directory /etc/postfix, creiamo i seguenti due file:
   vi /etc/postfix/mysql-aliases.cf
   # vi /etc/postfix/mysql-aliases.cf


All'interno del file inseriamo il seguente testo:
All'interno del file inseriamo il seguente testo:
Riga 158: Riga 160:
   query = SELECT destination FROM forward WHERE source='%s'
   query = SELECT destination FROM forward WHERE source='%s'
   hosts = 127.0.0.1
   hosts = 127.0.0.1
NB: lo user "postfix" e relativa password sono relativi all'utente del database che hai definito con il comando "GRANT ..." nel capitolo precedente [[Server_mail_base:_Postfix_Dovecot_e_MySql#Creazione_del_database]]


Creiamo il secondo file:
Creiamo il secondo file:
   vi /etc/postfix/mysql-email2email.cf
   # vi /etc/postfix/mysql-email2email.cf


All'interno del file inseriamo il seguente testo:
All'interno del file inseriamo il seguente testo:
Riga 168: Riga 172:
   query = SELECT email FROM users WHERE email='%s' AND status='ENABLE'
   query = SELECT email FROM users WHERE email='%s' AND status='ENABLE'
   hosts = 127.0.0.1
   hosts = 127.0.0.1
NB: lo user "postfix" e relativa password sono relativi all'utente del database che hai definito con il comando "GRANT ..." nel capitolo precedente [[Server_mail_base:_Postfix_Dovecot_e_MySql#Creazione_del_database]]


=== Permessi ===
=== Permessi ===
Infine modifichiamo i permessi su tutti i file appena creati:
Infine modifichiamo i permessi su tutti i file appena creati:
   chmod 640 /etc/postfix/mysql-*.cf
   # chmod 640 /etc/postfix/mysql-*.cf
   chown root:postfix /etc/postfix/mysql-*.cf
   # chown root:postfix /etc/postfix/mysql-*.cf




Riga 277: Riga 283:
NB: Se non utilizzate un relayhost per inviare le email, saltate questo capitolo.
NB: Se non utilizzate un relayhost per inviare le email, saltate questo capitolo.
Adesso bisogna inserire lo user e la password per l'autenticazione con il server SMTP esterno.
Adesso bisogna inserire lo user e la password per l'autenticazione con il server SMTP esterno.
   vi /etc/postfix/sasl_password
   # vi /etc/postfix/sasl_password


All'interno di questo file, scrivere l'indirizzo host, come specificato in relayhost del file main.cf, seguito dallo user:password validi per l'autenticazione con tale host.  
All'interno di questo file, scrivere l'indirizzo host, come specificato in relayhost del file main.cf, seguito dallo user:password validi per l'autenticazione con tale host.  
Riga 284: Riga 290:


Generiamo il postfix lookup table, con il seguente comando:
Generiamo il postfix lookup table, con il seguente comando:
   postmap hash:/etc/postfix/sasl_password
   # postmap hash:/etc/postfix/sasl_password


Verifichiamo che la table sia stata creata correttamente con il seguente comando:
Verifichiamo che la table sia stata creata correttamente con il seguente comando:
   postmap -q mail.191.biz /etc/postfix/sasl_password
   # postmap -q mail.191.biz /etc/postfix/sasl_password


Adesso, per ragioni di sicurezza, possiamo cancellare il file di generazione:
Adesso, per ragioni di sicurezza, possiamo cancellare il file di generazione:
   rm /etc/postfix/sasl_password
   # rm /etc/postfix/sasl_password




=== Verifica invio all'esterno delle email ===
=== Verifica invio all'esterno delle email ===
Riavviamo il servizio postfix
Riavviamo il servizio postfix
   service postfix reload
   # service postfix reload


Inviare un'email test a una propria casella email:
Inviare un'email test a una propria casella email:
Riga 301: Riga 307:


Verificare i log per eventuali problemi:
Verificare i log per eventuali problemi:
   tail -f /var/log/mail.log
   # tail -f /var/log/mail.log




Riga 311: Riga 317:
== Configuriamo Dovecot ==
== Configuriamo Dovecot ==
Prima di creiamo/modifichiamo il file:
Prima di creiamo/modifichiamo il file:
   vi /etc/dovecot/dovecot-sql.conf
   # vi /etc/dovecot/dovecot-sql.conf


All'interno del file scriviamo il seguente testo:
All'interno del file scriviamo il seguente testo:
Riga 320: Riga 326:
   user_query = SELECT '/home/vmail/%d/%n' AS home, 'maildir:/home/vmail/%d/%n' AS mail, 5000 AS uid, 5000 AS gid FROM users WHERE email='%u' AND status='ENABLE'
   user_query = SELECT '/home/vmail/%d/%n' AS home, 'maildir:/home/vmail/%d/%n' AS mail, 5000 AS uid, 5000 AS gid FROM users WHERE email='%u' AND status='ENABLE'
   Si intuisce dalla sintassi che %u rappresenta l'indirizzo email completo (test@miazienda.it), %d il dominio (miazienda.it), %n il  nome (test).  
   Si intuisce dalla sintassi che %u rappresenta l'indirizzo email completo (test@miazienda.it), %d il dominio (miazienda.it), %n il  nome (test).  
NB: lo user "postfix" e relativa password sono relativi all'utente del database che hai definito con il comando "GRANT ..." nel capitolo precedente [[Server_mail_base:_Postfix_Dovecot_e_MySql#Creazione_del_database]]


Adesso impostiamo il file di configurazione
Adesso impostiamo il file di configurazione
   vi /etc/dovecot/dovecot.conf
   # vi /etc/dovecot/dovecot.conf


con questi principali parametri:
con questi principali parametri:
Riga 359: Riga 367:


=== Postfix ===
=== Postfix ===
A questo punto facciamo qualche prova per vedere se tutto funziona. Avviamo Postfix e controlliamo i messaggi nel file di log:
A questo punto facciamo qualche prova per vedere se tutto funziona. Avviamo Postfix e controlliamo i messaggi nel file di log, con i seguenti due comandi:
   service postfix start
   # service postfix start
   tail -f /var/log/mail.log
   # tail -f /var/log/mail.log


Se c'è qualche problema correggiamolo interpretando i messaggi ricevuti. Per far rileggere a Postfix il file di configurazione digitiamo semplicemente postfix reload.  
Se c'è qualche problema correggiamolo interpretando i messaggi ricevuti. Per far rileggere a Postfix il file di configurazione digitiamo semplicemente postfix reload.  


Per controllare che Postfix è installato correttamente, fate un telnet alla porta 25 di localhost (hostname dov'è installato postfix).
Per controllare che Postfix è installato correttamente, fate un telnet alla porta 25 di localhost (hostname dov'è installato postfix).
  telnet localhost 25
  # telnet localhost 25
Se tutto va bene, dovreste leggere un messaggio di benvenuto simile a questo:  
Se tutto va bene, dovreste leggere un messaggio di benvenuto simile a questo:  
     Trying 127.0.0.1...
     Trying 127.0.0.1...
Riga 378: Riga 386:
=== Server imap ===
=== Server imap ===
Da terminale dare il comando
Da terminale dare il comando
   telnet localhost imap
   # telnet localhost imap


se compare una scritta del tipo:
se compare una scritta del tipo:
Riga 401: Riga 409:
=== Inviamo un'email di prova ===
=== Inviamo un'email di prova ===
A questo punto il funzionamento di base è testato non resta che cominciare ad inviare qualche email al server, sia all'account reale che all'alias, verificandone la corretta consegna. Inizialmente proviamo in locale con il comando mail:
A questo punto il funzionamento di base è testato non resta che cominciare ad inviare qualche email al server, sia all'account reale che all'alias, verificandone la corretta consegna. Inizialmente proviamo in locale con il comando mail:
   mail -s 'test funzionamento' test@miazienda.it
   # mail -s 'test funzionamento' test@miazienda.it


Dopo aver digitato il comando ''mail'' premiamo invio, poi scriviamo un messaggio di prova e con CRTL + d indichiamo che l'immissione di testo è terminata, un nuovo invio dopo "Cc:" finalizza la spedizione dell'email.  
Dopo aver digitato il comando ''mail'' premiamo invio, poi scriviamo un messaggio di prova e con CRTL + d indichiamo che l'immissione di testo è terminata, un nuovo invio dopo "Cc:" finalizza la spedizione dell'email.  
63

contributi