Ricerca nel sito web

Come configurare Postfix e Dovecot con utenti di dominio virtuale in Linux - Parte 2


Nell'articolo precedente di questa serie abbiamo spiegato come impostare e gestire il database del server di posta in modo sicuro utilizzando phpMyAdmin.

Requisiti:

  1. Installa Postfix Mail Server e Dovecot con MariaDB – Parte 1

Ora è il momento di configurare i programmi interni che renderanno realtà l'invio e la ricezione di email: Postfix e Dovecot (per gestire rispettivamente le email in uscita e in entrata).

Configurazione del server di posta Postfix

Prima di iniziare a configurare Postfix, varrebbe la pena dare un'occhiata alle sue pagine man qui, ponendo particolare enfasi sulla sezione intitolata "Informazioni per i nuovi utenti di Postfix" . Se lo fai, troverai più facile seguire questo tutorial.

In poche parole devi sapere che esistono due file di configurazione per Postfix:

  1. /etc/postfix/main.cf (parametri di configurazione di Postfix, fare riferimento a man 5 postconf per maggiori dettagli).
  2. /etc/postfix/master.cf (configurazione del demone master Postfix, vedere man 5 master per ulteriori dettagli).

In /etc/postfix/main.cf, individua (o aggiungi, se necessario) le seguenti righe e assicurati che corrispondano ai valori indicati di seguito:


append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

Le tre impostazioni successive sono di particolare importanza. Nei file indicati in giallo configureremo l'accesso di Postfix alle tabelle Domains_tbl, Users_tbl e Alias_tbl:


virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf

Tieni presente che puoi scegliere nomi di file diversi sopra, purché ti assicuri di crearli e di inserirvi i seguenti contenuti. In ogni caso, sostituisci YourPassword con la password che hai scelto per l'utente dba nella Parte 1, oppure puoi anche utilizzare MariaDB credenziali root per utente e password di seguito.

Inoltre, assicurati di utilizzare esattamente gli stessi nomi del database del server di posta elettronica e delle tabelle create nella Parte 1.

In /etc/postfix/mariadb-vdomains.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'

In /etc/postfix/mariadb-vusers.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'

In /etc/postfix/mariadb-valias.cf:


user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'

Infine, non dimenticare di modificare le autorizzazioni per questi file in 640:


chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf

E la proprietà dell'utente root e del gruppo postfix:


chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf

Successivamente, per abilitare connessioni sicure dobbiamo assicurarci che le seguenti impostazioni siano decommentate (o aggiunte, se necessario) in /etc/postfix/master.cf:


submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp

showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
#virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

Nota: il rientro nelle righe che iniziano con l'opzione -o è fondamentale; altrimenti il controllo suffisso restituirà un errore:

Prima di salvare le modifiche, aggiungi le seguenti righe in fondo al file:


dovecot   unix  -       n       n       -       -       pipe
    flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}

A questo punto è essenziale verificare se Postfix ha accesso alle tabelle del database e ai domini, account e alias che abbiamo creato nella Parte 1.

Per fare ciò utilizzeremo il comando postmap, un'utilità per testare la comunicazione con le tabelle che Postfix cercherà durante il funzionamento, ma prima di tutto dovremo riavviare postfix:


systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email  mysql:/etc/postfix/mariadb-valias.cf

Nell'immagine seguente possiamo vedere che per i record esistenti nel database viene restituito 1. Altrimenti, sullo schermo non viene visualizzato nulla. Nel caso del controllo dell'alias, tieni presente che viene restituito l'effettivo account di posta elettronica a cui è mappato l'alias:

Tieni presente che NON stiamo autenticando con le credenziali impostate per ciascun account email, stiamo solo testando la capacità di Postfix di rilevare tali record nel database.

Pertanto, se ottieni un output diverso da quello sopra, assicurati di utilizzare una coppia utente/password valida in mariadb-vdomains.cf, mariadb-vusers.cf e mariadb-valias.cf (o come preferisci chiamare quei file).

Configurazione di Dovecot

In quanto server IMAP/POP3, Dovecot fornisce agli utenti un modo attraverso un Mail User Agent (MUA o noto anche come client), come Thunderbird o Outlook, per citare alcuni esempi, per accedere alla propria posta.

Per iniziare, creiamo un utente e un gruppo per gestire le e-mail (ne avremo bisogno poiché i nostri account e-mail non sono associati a un utente di sistema). Puoi utilizzare un altro UID e un GID (diverso da 5000 come facciamo di seguito) purché non sia in uso e sia un numero elevato:


groupadd -g 5000 vmail 
useradd -g vmail -u 5000 vmail -d /home/vmail -m

Le impostazioni per Dovecot sono suddivise in diversi file di configurazione (assicurati che le seguenti righe non siano commentate e/o modificale in modo che corrispondano alle impostazioni indicate di seguito).

In /etc/dovecot/dovecot.conf:


!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf

In /etc/dovecot/conf.d/10-auth.conf (abilita solo l'autenticazione tramite SQL e lascia gli altri metodi di autenticazione commentati):


disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext

In /etc/dovecot/conf.d/auth-sql.conf.ext (nota che memorizzeremo le email in una directory denominata tuodominio.com all'interno di / home/vmail, che devi creare se non esiste. Nel nostro caso abbiamo fatto mkdir /home/vmail/linuxnewz.com per gestire le email per quel dominio):


passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}

Le caselle di posta individuali per gli account utente verranno create quando verranno ricevute per la prima volta le e-mail per tali account.

In /etc/dovecot/conf.d/10-mail.conf:


mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl

In /etc/dovecot/conf.d/10-master.conf:


service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  unix_listener auth-userdb {
   mode = 0600
   user = vmail
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

In /etc/dovecot/conf.d/10-ssl.conf (sostituisci il certificato e i percorsi della chiave se prevedi di utilizzare un certificato firmato da una CA):


ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

In /etc/dovecot/dovecot-sql.conf.ext inserisci le informazioni del tuo database e le credenziali dell'utente amministrativo creato nella Parte 1.

Importante: se la tua password contiene un asterisco (#), dovrai racchiudere la stringa di connessione come indicato nell'esempio seguente:


driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';

Inoltre, puoi configurare la registrazione per Dovecot in modo che sia separata da Postfix in /etc/dovecot/conf.d/10-logging.conf:


log_path = /var/log/dovecot.log

Infine, assicurati che il registro Dovecot sia accessibile per l'utente dovecot:


chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log

Verifica e correggi la configurazione di Postifix e abilita SMTP, POP3 e IMAP nel firewall

Se ti capita di riscontrare problemi durante la configurazione di Postfix e/o Dovecot, invece di inviare tutti i file di configurazione per chiedere aiuto, puoi ottenere un riepilogo della configurazione (solo righe non commentate) con:


postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot

Inoltre, assicurati che le caselle di posta elettronica siano leggibili solo da vmail:


chown –R vmail:vmail /home/vmail

I file di configurazione dovrebbero essere leggibili anche dagli utenti vmail e dovecot:


chown -R vmail:dovecot /etc/dovecot 
chmod -R o-rwx /etc/dovecot 

Infine, assicurati di abilitare SMTP, POP3 e IMAP attraverso il firewall:


firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent

Configura Thunderbird come client di posta elettronica per Postfix

Dopo aver protetto l'accesso attraverso il firewall per le porte utilizzate nelle comunicazioni e-mail, è il momento di configurare un client di posta elettronica. Utilizzando [email protetto] e la password corrispondente, insieme a mail.linuxnewz.com come server IMAP (o POP3) e SMTP, siamo pronti per iniziare a inviare e ricevere email a e da tale conto:

Puoi tranquillamente ignorare il messaggio di avviso visualizzato perché stai utilizzando un certificato non firmato da una CA di terze parti attendibile:

Componiamo una breve email di prova e clicchiamo su Invia:

Quando viene richiesto di accettare il certificato autofirmato per il server in uscita, confermarlo in precedenza come prima:

Infine, vai all'e-mail di destinazione per vedere se hai ricevuto l'e-mail appena inviata. In tal caso, rispondi e controlla se viene recapitato alla casella di posta di origine (altrimenti, fai riferimento al registro Postfix su /var/log/maillog o al registro Dovecot su /var /log/dovecot.log per informazioni sulla risoluzione dei problemi):

Ora disponi di un server di posta Postfix e Dovecot funzionante e puoi iniziare a inviare e ricevere email.

Riepilogo

In questo articolo abbiamo spiegato come configurare Postfix e Dovecot per gestire il traffico di posta elettronica nel tuo server Linux. Se qualcosa non funziona come indicato in questo articolo, assicurati di prenderti del tempo per controllare la documentazione di Postfix e Dovecot.

Tieni presente che, sebbene configurare un server di posta Postfix non sia un compito facile, è un'esperienza gratificante per ogni amministratore di sistema.

Se dopo aver esaminato i documenti ti ritrovi ancora alle prese con Postfix e/o Dovecot, sentiti libero di inviarci una nota utilizzando il modulo di commento qui sotto e saremo lieti di aiutarti aiutarti (non dimenticare di caricare su un servizio di archiviazione online la configurazione di Postfix e Dovecot recuperata utilizzando postconf e doveconf come indicato in questo articolo).