Introduzione
Su Ubuntu 20.04, puoi utilizzare strumenti come Postfix, Dovecot, MySQL, e SpamAssassin per configurare un server di posta. Il processo può confondere chi ci prova per la prima volta. Questo tutorial mira a semplificare il processo di configurazione del server di posta con passaggi dettagliati. Al termine di questo tutorial, saprai come aggiungere domini virtuali, utenti e alias. Infine, renderai il tuo server virtuale più sicuro dagli hub di spam.
Prerequisiti
Prima di iniziare con la configurazione del server di posta, ci sono alcuni prerequisiti di cui occuparsi. Innanzitutto, assicurati che il tuo server privato virtuale abbia un dominio che reindirizza al tuo server. Devi anche installare e configurare MySQL. Inoltre, devi avere un utente con privilegi di root concessi e installare un certificato SSL. Infine, assicurati che il tuo FQDN sia configurato e identificato.
Se installi i pacchetti come utente root, avrai tutti i privilegi. Ecco perché lo consigliamo:
|
1 |
sudo -i |
Inserisci la password del tuo utente. A questo punto, vedrai il $ simbolo cambiare in #. Successivamente, esploriamo i diversi aspetti della configurazione uno per uno.
Passaggio 1: Installazione dei pacchetti
Inizieremo imparando come installare i pacchetti:
|
1 |
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql |
Quando appare la configurazione di Postfix, seleziona Sito Internet:

Ti verrà chiesto il nome e-mail del sistema. Qui puoi utilizzare il FQDN o il dominio principale:

Passaggio 2: Creazione di un database MySQL, domini virtuali, utenti e alias
Successivamente, una volta installati tutti i pacchetti, procederemo con la configurazione. Il nostro obiettivo è configurare tre tabelle. Una sarà per i domini, una per gli utenti e una per gli alias. Queste saranno ospitate in un database MySQL che creeremo.
Supponiamo di voler chiamare il nostro database servermail. Sei libero di usare il nome che preferisci. Ecco come lo creeremo:
|
1 |
mysqladmin -p create servermail |
Devi accedere come utente root di MySQL:
|
1 |
mysql -u root -p |
Quindi, inserisci la tua password. Un tentativo andato a buon fine mostrerà questo come risultato:
|
1 |
mysql > |
Successivamente, creeremo un nuovo utente in particolare per l'autenticazione della posta. Concedi il permesso SELECT in questo modo:
|
1 |
mysql > GRANT SELECT ON servermail.* TO 'usermail'@'127.0.0.1' IDENTIFIED BY 'mailpassword'; |
Dopodiché, ricarica i tuoi privilegi MySQL per applicare correttamente i permessi:
|
1 |
mysql > FLUSH PRIVILEGES; |
Successivamente, useremo il nostro database per creare le tabelle e inserire i dati:
|
1 |
mysql> USE servermail; |
Creeremo tabelle individuali per i domini specifici che sono riconosciuti come domini autorizzati:
|
1 2 3 4 5 |
CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
L'obiettivo è inserire gli utenti nella tabella. Pertanto, aggiungeremo l'indirizzo email e la password pertinenti. Tieni presente che devi associare ogni utente a un dominio:
|
1 2 3 4 5 6 7 8 9 |
CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Successivamente, creeremo una tabella per tutti i nostri alias virtuali per specificare tutte le email che inoltreremo all'altra email:
|
1 2 3 4 5 6 7 8 |
CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Al termine di questo processo, avrai creato con successo tre tabelle. Successivamente, dobbiamo inserire i dati.
-
Domini virtuali
In questa sezione, impareremo come inserire i domini all'interno della
virtual_domains tabella. Nello specifico, ci concentreremo su come inserire il dominio primario (example.com) e l' FQDN (hostname.example.com):
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'example.com'), ('2', 'hostname.example.com'); |
-
Email virtuali
Successivamente, inserisci l'indirizzo email e le password associate per ciascuno dei domini. Assicurati che tutte le informazioni siano sostituite con le tue informazioni specifiche:
|
1 2 3 4 5 |
INSERT INTO `servermail`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('firstpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email1@example.com'), ('2', '1', ENCRYPT('secondpassword', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'email2@example.com'); |
-
Alias virtuali
Ora puoi inserire l'indirizzo email a cui inoltrerai l'altro indirizzo email. Il primo è l'origine mentre il secondo è la destinazione:
|
1 2 3 4 |
INSERT INTO `servermail`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'alias@example.com', 'email1@example.com'); |
Quindi, puoi uscire da MySQL:
|
1 |
mysql > exit |
Passo 3: Configurazione di Postfix
È importante configurare Postfix in modo che possa gestire le connessioni SMTP. Deve anche essere in grado di inviare i messaggi per tutti gli utenti inseriti nel database MySQL. Iniziamo creando una copia del file predefinito. Questo serve per poter ripristinare facilmente la configurazione predefinita se e quando necessario:
|
1 |
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig |
Ora apri il file main.cf per modificarlo:
|
1 |
nano /etc/postfix/main.cf |
Inizia commentando i parametri TLS e poi aggiungi gli altri parametri. Nel nostro esempio, stiamo utilizzando i certificati SSL gratuiti. Puoi, ovviamente, modificare la configurazione in base alle tue esigenze:
|
1 2 3 4 5 6 7 8 9 10 11 |
# TLS parameters #smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem #smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_use_tls=yes #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_cert_file=/etc/ssl/certs/dovecot.pem smtpd_tls_key_file=/etc/ssl/private/dovecot.pem smtpd_use_tls=yes smtpd_tls_auth_only = yes |
Successivamente, aggiungerai questi parametri sotto le impostazioni TLS:
|
1 2 3 4 5 6 7 |
smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination |
Successivamente, dobbiamo commentare le mydestination impostazioni predefinite. Successivamente, lo sostituiremo con localhost. Con questa modifica, il VPS sarà in grado di utilizzare i domini virtuali nella tabella MySQL:
|
1 2 |
#mydestination = example.com, hostname.example.com, localhost.example.com, localhost mydestination = localhost |
Ora usa questo comando per verificare che il parametro myhostname sia impostato nel tuo FQDN:
|
1 |
myhostname = hostname.example.com |
Inoltre, aggiungi questa riga per attivare la consegna della posta locale a tutti i domini virtuali elencati nella tabella:
|
1 |
virtual_transport = lmtp:unix:private/dovecot-lmtp |
Infine, aggiungeremo i seguenti parametri per indicare a Postfix di configurare i domini virtuali, gli utenti e gli alias:
|
1 2 3 |
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Per assicurarti che non ci siano errori, confronta queste modifiche con il seguente file:
https://www.dropbox.com/s/x9fpm9v1dr86gkw/etc-postfix-main.cf.txt
Una volta verificato tutto questo, creerai tre file da aggiungere nel file main.cf . L'obiettivo qui è fornire a Postfix le istruzioni su come connettersi con MySQL. Per fare questo, inizieremo creando il file mysql-virtual-mailbox-domains.cf . Naturalmente, nel tuo file, apporterai le modifiche in base alla tua configurazione personale:
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-domains.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_domains WHERE name='%s' |
Successivamente, riavvia Postfix:
|
1 |
service postfix restart |
Devi assicurarti che Postfix sia in grado di trovare il tuo dominio. Per testarlo, usa questo comando:
|
1 |
postmap -q example.com mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf |
Il comando restituirà 1 se ha successo. In questo caso, puoi procedere creando il file mysql-virtual-mailbox-maps.cf :
|
1 |
nano /etc/postfix/mysql-virtual-mailbox-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT 1 FROM virtual_users WHERE email='%s' |
Riavvia nuovamente Postfix:
|
1 |
service postfix restart |
Ancora una volta, ci assicureremo che Postfix sia in grado di trovare il primo indirizzo email. Per testarlo, usa il seguente comando:
|
1 |
postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf |
Se ha successo, otterrai in risposta un output pari a 1. Pertanto, passeremo alla creazione dell'ultimo file:
|
1 |
nano /etc/postfix/mysql-virtual-alias-maps.cf |
|
1 2 3 4 5 |
user = usermail password = mailpassword hosts = 127.0.0.1 dbname = servermail query = SELECT destination FROM virtual_aliases WHERE source='%s' |
Questo completa la configurazione tra Postfix e MySQL. Riavvia Postfix per applicare:
|
1 |
service postfix restart |
Per confermare che Postfix stia effettivamente trovando i tuoi alias, usa questo comando:
|
1 |
postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual-alias-maps.cf |
Idealmente dovresti ricevere come output l'email che viene inoltrata all'alias. Puoi anche modificare il /etc/postfix/master.cf file in questo modo se desideri connettere la porta 587 con i client di posta elettronica in modo sicuro:
|
1 |
nano /etc/postfix/master.cf |
Ecco come decommentare alcune righe e aggiungere parametri:
|
1 2 3 4 5 |
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject |
A volte, potrebbe essere necessario riavviare Postfix per confermare che la porta sia aperta:
|
1 |
service postfix restart |
Questo strumento può essere utilizzato anche per scansionare le porte del dominio. Puoi usarlo per verificare che le porte 25 e 587 siano aperte.
Passo 4: Configurazione di Dovecot
Ora è il momento di configurare Dovecot. Per questa sezione, dovremo copiare i 7 file che desideri modificare. Questo serve a garantire che tu possa ripristinarli se necessario. Inserisci questi comandi uno alla volta:
|
1 2 3 4 5 6 |
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig |
Devi modificare il file di configurazione di Dovecot:
|
1 |
nano /etc/dovecot/dovecot.conf |
Assicurati che l'opzione sia decommentata:
|
1 |
!include conf.d/*.conf |
Successivamente, abiliteremo i protocolli sotto la riga
!include_try /usr/share/dovecot/protocols.d/*.protocol . Se vuoi, puoi anche aggiungere pop3:
|
1 2 |
!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp |
Per assicurarti che non ci siano errori, confrontalo con questo file:
https://www.dropbox.com/s/wmbe3bwy0vcficj/etc-dovecot-dovecot.conf.txt
Successivamente, modifica il file di configurazione della posta:
|
1 |
nano /etc/dovecot/conf.d/10-mail.conf |
Individua la riga mail_location . Devi decommentarla e aggiungere questo parametro:
|
1 |
mail_location = maildir:/var/mail/vhosts/%d/%n |
Dopodiché, individua la riga mail_privileged_group . Di nuovo, decommentala e aggiungi il parametro mail:
|
1 |
mail_privileged_group = mail |
Per eliminare qualsiasi possibilità di errore, confrontalo con questo file:
https://www.dropbox.com/s/hnfeieuy77m5b0a/etc.dovecot.conf.d-10-mail.conf.txt
-
Verifica dei permessi
Per verificare i permessi, usa questo comando:
|
1 |
ls -ld /var/mail |
Assicurati che i tuoi permessi appaiano come segue:
|
1 |
drwxrwsr-x 3 root vmail 4096 Jan 24 21:23 /var/mail |
Puoi creare una cartella per ogni dominio. Tutte queste cartelle saranno registrate nella tabella MySQL:
|
1 |
mkdir -p /var/mail/vhosts/example.com |
Crea un utente e un gruppo vmail utilizzando un ID di 5000:
|
1 2 |
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail |
Successivamente, devi cambiare il proprietario della /var/mail cartella all'utente vmail:
|
1 |
chown -R vmail:vmail /var/mail |
Ora modifica il /etc/dovecot/conf.d/10-auth.conf file:
|
1 |
nano /etc/dovecot/conf.d/10-auth.conf |
Aggiungi la seguente riga dopo aver decommentato l'autenticazione in testo normale:
|
1 |
disable_plaintext_auth = yes |
Usa questo per modificare il auth_mechanisms parametro:
|
1 |
auth_mechanisms = plain login |
Ora commenta questa riga:
|
1 |
#!include auth-system.conf.ext |
Per abilitare l'autorizzazione MySQL, devi decommentare la seguente riga:
|
1 |
!include auth-sql.conf.ext |
Per rilevare e correggere gli errori, usa il seguente file:
https://www.dropbox.com/s/4h472nqrj700pqk/etc.dovecot.conf.d.10-auth.conf.txt
La creazione di un /etc/dovecot/dovecot-sql.conf.ext file con le tue informazioni ti consentirà di autenticarti:
|
1 |
nano /etc/dovecot/conf.d/auth-sql.conf.ext |
Inserisci questo codice nel file:
|
1 2 3 4 5 6 7 8 9 |
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } |
Useremo le nostre informazioni MySQL personalizzate per modificare il /etc/dovecot/dovecot-sql.conf.ext file:
|
1 |
nano /etc/dovecot/dovecot-sql.conf.ext |
Imposta MySQL come parametro dopo aver decommentato il parametro driver in questo modo:
|
1 |
driver = mysql |
Puoi inserire le tue informazioni specifiche di MySQL decommentando la riga connect :
|
1 |
connect = host=127.0.0.1 dbname=servermail user=usermail password=mailpassword |
Ora devi decommentare la riga default_pass_scheme e modificarla in SHA-512:
|
1 |
default_pass_scheme = SHA512-CRYPT |
Aggiungi le seguenti informazioni dopo aver decommentato password_query:
|
1 |
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; |
Per rilevare errori, usa questo file per fare un confronto:
https://www.dropbox.com/s/48a5r0mtgdz25cz/etc.dovecot.dovecot-sql.conf.ext.txt
Successivamente, puoi cambiare il proprietario e il gruppo della cartella dovecot all'utente vmail:
|
1 2 |
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot |
Il passo successivo consiste nel modificare il /etc/dovecot/conf.d/10-master.conf file. Devi prestare molta attenzione qui poiché verranno modificati diversi parametri:
|
1 |
nano /etc/dovecot/conf.d/10-master.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
##Decommenta inet_listener_imap e modifica sulla porta 0 service imap-login { inet_listener imap { port = 0 } #Crea il socket LMTP e queste configurazioni service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } #inet_listener lmtp { # Evita di rendere LMTP visibile all'intera internet #address = #port = #} } |
Usa il seguente codice per cambiare il parametro unix_listener in service_auth:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } unix_listener auth-userdb { mode = 0600 user = vmail #group = } #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} user = dovecot } |
Successivamente, devi modificare service auth-worker in questo modo:
|
1 2 3 4 5 6 |
service auth-worker { # Il processo auth worker viene eseguito come root per impostazione predefinita, in modo da poter accedere a # /etc/shadow. Se questo non è necessario, l'utente dovrebbe essere modificato in # $default_internal_user. user = vmail } |
Rileva gli errori confrontandoli con questo file:
https://www.dropbox.com/s/g0vnt233obh6v2h/etc.dovecot.conf.d.10-master.conf.txt
Il passo successivo consiste nel modificare il file di configurazione SSL di Dovecot. Se hai intenzione di utilizzare la configurazione predefinita, puoi saltare questo passaggio e passare alla sezione successiva:
|
1 |
# nano /etc/dovecot/conf.d/10-ssl.conf |
Successivamente, modifica il parametro ssl su required in questo modo:
|
1 |
ssl = required |
Modificheremo anche il percorso sia per ssl_cert che per ssl_key:
|
1 2 |
ssl_cert = </etc/ssl/certs/dovecot.pem ssl_key = </etc/ssl/private/dovecot.pem |
Riavvia Dovecot:
|
1 |
service dovecot restart |
Assicurati di controllare che la porta 993 sia aperta. Se hai abilitato pop3, controlla anche la porta 995:
|
1 |
telnet example.com 993 |
Se hai completato i passaggi fino a questo punto, congratulazioni! Hai configurato con successo il tuo server di posta. Per assicurarti di aver eseguito correttamente tutti i passaggi, puoi testare il tuo account con l'aiuto di un client di posta elettronica in questo modo:
|
1 2 3 4 |
- Nome utente: email1@example.com - Password: email1's password - IMAP: example.com - SMTP: example.com |
La porta 993 viene utilizzata per l'IMAP sicuro e la porta 587/porta 25 per l'SMTP.
Passo 5: Configurazione di SpamAssassin
Siamo finalmente arrivati all'ultima sezione del tutorial in cui configureremo SpamAssassin. Inizieremo installando SpamAssassin:
|
1 |
apt-get install spamassassin spamc |
Crea un utente per SpamAssassin in questo modo:
|
1 |
adduser spamd --disabled-login |
Devi aprire e modificare le impostazioni di configurazione per poter configurare SpamAssassin:
|
1 |
nano /etc/default/spamassassin |
Ora che sei qui, devi modificare il parametro ENABLED per abilitare il demone SpamAssassin:
|
1 |
ENABLED=1 |
Modifica i parametri home e options con questo codice:
|
1 2 |
SPAMD_HOME="/home/spamd/" OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SPAMD_HOME} -s ${SPAMD_HOME}spamd.log" |
Usa questa riga per specificare il parametro PID_File:
|
1 |
PIDFILE="${SPAMD_HOME}spamd.pid" |
Successivamente, usa questo comando per indicare che le regole di SpamAssassin verranno aggiornate automaticamente:
|
1 |
CRON=1 |
Verifica la presenza di errori confrontando con il seguente documento:
https://www.dropbox.com/s/ndvpgc2jipdd4bk/etc.default.spamassassin.txt
Se desideri impostare le regole anti-spam, devi aprire nuovamente il file /etc/spamassassin/local.cf:
|
1 |
nano /etc/spamassassin/local.cf |
Il funzionamento di SpamAssassin consiste nell'assegnare un punteggio a ogni email ricevuta dall'utente. Valuta i punteggi delle email e, se superano il valore di 5.0 nel controllo dello spam, l'email viene contrassegnata come spam. Ecco i parametri che puoi utilizzare per configurare queste regole anti-spam:
|
1 2 3 4 5 6 7 8 9 10 |
rewrite_header Subject ***** SPAM _SCORE_ ***** report_safe 0 required_score 5.0 use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 skip_rbl_checks 0 use_razor2 0 use_dcc 0 use_pyzor 0 |
Once the anti-spam rules are set, you need to tell Postfix that each email is to be checked with SpamAssassin. For this purpose, we need to modify the /etc/postfix/master.cf file:
|
1 |
nano /etc/postfix/master.cf |
Find the following line and add the spamassassin filtro:
|
1 2 |
smtp inet n - - - - smtpd -o content_filter=spamassassin |
Now you can append these parameters:
|
1 2 3 |
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} |
Finally, start SpamAssassin and restart Postfix to apply the changes. When you relaunch, Postfix will start to verify spam from emails:
|
1 2 |
service spamassassin start service postfix restart |
Ed ecco fatto! Hai configurato con successo il tuo server di posta con Postfix e Dovecot. Hai anche eseguito l'autenticazione MySQL e impostato il filtraggio dello spam con SpamAssassin.
Conclusione
Questo tutorial illustra i passaggi da seguire per configurare il server di posta con gli strumenti sopra menzionati. Può essere utilizzato come guida completa per configurare il server di posta in modo indipendente. Se sei interessato a utilizzare la funzionalità del server SMTP di Google, segui questo tutorial.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.