Postfix Tutorial · 8 min read · Jan 26, 2026

Utenti e Domini Virtuali Con Postfix, Courier, MySQL E SquirrelMail (Ubuntu 14.04LTS)

Questo tutorial è Copyright (c) 2014 di Falko Timme & Srijan Kishore. È derivato da un tutorial di Christoph Haas che puoi trovare su http://workaround.org. Sei libero di utilizzare questo tutorial sotto la licenza Creative Commons 2.5 o qualsiasi versione successiva.

Questo documento descrive come installare un server di posta Postfix basato su utenti e domini virtuali, cioè utenti e domini che si trovano in un database MySQL. Dimostrerò anche l’installazione e la configurazione di Courier (Courier-POP3, Courier-IMAP), in modo che Courier possa autenticarsi contro lo stesso database MySQL utilizzato da Postfix.

Il server Postfix risultante è in grado di SMTP-AUTH e TLS e quota (la quota non è integrata in Postfix per impostazione predefinita, mostrerò come patchare il tuo Postfix di conseguenza). Le password sono memorizzate in forma crittografata nel database (la maggior parte dei documenti che ho trovato trattavano password in testo semplice, il che rappresenta un rischio per la sicurezza). Inoltre, questo tutorial copre l’installazione di Amavisd, SpamAssassin e ClamAV in modo che le email vengano scansionate per spam e virus. Mostrerò anche come installare SquirrelMail come interfaccia webmail in modo che gli utenti possano leggere e inviare email e cambiare le loro password.

Il vantaggio di una configurazione “virtuale” (utenti e domini virtuali in un database MySQL) è che è molto più performante rispetto a una configurazione basata su “veri” utenti di sistema. Con questa configurazione virtuale, il tuo server di posta può gestire migliaia di domini e utenti. Inoltre, è più facile da amministrare perché devi solo occuparti del database MySQL quando aggiungi nuovi utenti/domini o modifichi quelli esistenti. Niente più comandi postmap per creare file db, niente più ricaricamenti di Postfix, ecc. Per l’amministrazione del database MySQL puoi utilizzare strumenti basati sul web come phpMyAdmin che verrà installato anche in questo howto. Il terzo vantaggio è che gli utenti hanno un indirizzo email come nome utente (invece di un nome utente + un indirizzo email) che è più facile da comprendere e ricordare.

Questo howto è inteso come una guida pratica; non copre gli aspetti teorici. Questi sono trattati in molti altri documenti sul web.

Questo documento viene fornito senza alcuna garanzia di alcun tipo! Voglio dire che questo non è l’unico modo per impostare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non fornisco alcuna garanzia che questo funzionerà per te!

1 Nota Preliminare

Questo tutorial è basato su Ubuntu 14.04 Server (Trusty Tahr), quindi dovresti impostare un’installazione di base del server Ubuntu 14.04 prima di continuare con questo tutorial. Il sistema dovrebbe avere un indirizzo IP statico. Utilizzo 192.168.0.100 come indirizzo IP in questo tutorial e server1.example.com come nome host.

Assicurati di essere loggato come root (digita

sudo su

per diventare root), perché dobbiamo eseguire tutti i passaggi di questo tutorial come utente root.

È molto importante che tu faccia di /bin/sh un symlink a /bin/bash…

dpkg-reconfigure dash

Usa dash come shell di sistema predefinita (/bin/sh)? <– No

… e che disabiliti AppArmor, se ricevi apparmor: unrecognized service allora rimuovilo da update-rc.d

service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils

2 Installa Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Per installare Postfix, Courier, Saslauthd, MySQL e phpMyAdmin, eseguiamo semplicemente

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

Ti verranno poste alcune domande:

Nuova password per l’utente MySQL “root”: <– yourrootsqlpassword
Ripeti la password per l’utente MySQL “root”: <– yourrootsqlpassword
Creare directory per l’amministrazione basata sul web? <– No
Tipo generale di configurazione della posta: <– Internet Site
Nome della posta di sistema: <– server1.example.com
Certificato SSL richiesto <– Ok
Server web da riconfigurare automaticamente: <– apache2
Configurare il database per phpmyadmin con dbconfig-common? <– No

3 Applica La Patch Quota A Postfix

Dobbiamo ottenere i sorgenti di Postfix, patcharli con la patch quota, costruire nuovi pacchetti Postfix.deb e installare quei pacchetti .deb:

apt-get build-dep postfix

A volte puoi ricevere un errore come segue:-

root@server1:~# apt-get build-dep postfix
Lettura delle liste dei pacchetti… Fatto
Costruzione dell’albero delle dipendenze
Lettura delle informazioni di stato… Fatto
E: Devi inserire alcune URI ‘source’ nel tuo sources.list
root@server1:~#

Puoi correggerlo come segue, aggiungendo i repository sorgente:

vi /etc/apt/sources.list

Fai l’entrata come nel mio caso è

deb http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu trusty partner

deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://archive.canonical.com/ubuntu trusty partner

Successivamente

apt-get update
apt-get build-dep postfix

cd /usr/src
apt-get source postfix

(Assicurati di utilizzare la versione corretta di Postfix nei comandi seguenti. Ho installato Postfix 2.11.0. Puoi scoprire la tua versione di Postfix eseguendo

postconf -d | grep mail_version

L’output dovrebbe apparire così:

root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.11.0
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#

wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.11.0
patch -p1 < ../postfix-vda-v13-2.10.0.patch

Successivamente apri debian/rules e cambia DEB_BUILD_HARDENING da 1 a 0:

vi debian/rules

| [...] export DEB_BUILD_HARDENING=0 [...] |

Se non lo fai, la tua build fallirà con i seguenti messaggi di errore:

maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.11.0/src/virtual’
make[1]:
[update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.11.0’
make: * [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.11.0#

Ora possiamo costruire i nuovi pacchetti Postfix.deb:

dpkg-buildpackage

Ora andiamo in una directory sopra, dove sono stati creati i nuovi pacchetti .deb:

cd ..

Il comando

ls -l

mostra i pacchetti disponibili:

root@server1:/usr/src# ls -l
total 6824
drwxr-xr-x 18 root root    4096 Apr 30 04:28 postfix-2.11.0
-rw-r–r–  1 root root   46756 Apr 30 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r–r–  1 root root  142842 Apr 30 04:28 postfix-dev_2.11.0-1_all.deb
-rw-r–r–  1 root root  851842 Apr 30 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r–r–  1 root root   53898 Apr 30 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r–r–  1 root root   48500 Apr 30 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r–r–  1 root root   48610 Apr 30 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r–r–  1 root root   48324 Apr 30 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r–r–  1 root root   55701 Jun  7  2013 postfix-vda-v13-2.10.0.patch
-rw-r–r–  1 root root  267855 Apr 30 04:27 postfix_2.11.0-1.diff.gz
-rw-r–r–  1 root root    1522 Apr 30 04:27 postfix_2.11.0-1.dsc
-rw-r–r–  1 root root    3885 Apr 30 04:28 postfix_2.11.0-1_amd64.changes
-rw-r–r–  1 root root 1329238 Apr 30 04:28 postfix_2.11.0-1_amd64.deb
-rw-r–r–  1 root root 4034741 Feb 12 01:38 postfix_2.11.0.orig.tar.gz
root@server1:/usr/src#

Seleziona i pacchetti postfix e postfix-mysql e installali in questo modo:

dpkg -i postfix_2.11.0-1_amd64.deb postfix-mysql_2.11.0-1_amd64.deb

4 Crea Il Database MySQL Per Postfix/Courier

Ora creiamo un database chiamato mail:

mysqladmin -u root -p create mail

Ti verrà posta questa domanda:

Inserisci Password: <– yourrootsqlpassword

Successivamente, andiamo nella shell MySQL:

mysql -u root -p

Nella shell MySQL, creiamo l’utente mail_admin con la password mail_admin_password (sostituiscila con la tua password) che ha privilegi SELECT, INSERT, UPDATE, DELETE sul database mail. Questo utente sarà utilizzato da Postfix e Courier per connettersi al database mail:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.
TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;

Ancora nella shell MySQL, creiamo le tabelle necessarie per Postfix e Courier:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) ENGINE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;

quit;

Come avrai notato, con il comando quit; siamo usciti dalla shell MySQL e siamo tornati nella shell Linux.

La tabella domains memorizzerà ciascun dominio virtuale per il quale Postfix dovrebbe ricevere email (ad esempio example.com).

domain
example.com

La tabella forwardings è per l’aliasing di un indirizzo email a un altro, ad esempio inoltrare email per [email protected] a [email protected].

sourcedestination
[email protected][email protected]

La tabella users memorizza tutti gli utenti virtuali (cioè indirizzi email, perché l’indirizzo email e il nome utente sono gli stessi) e le password (in forma crittografata!) e un valore di quota per ciascuna casella di posta (in questo esempio il valore predefinito è 10485760 byte, il che significa 10MB).

emailpasswordquota
[email protected]No9.E4skNvGa. (“segreto” in forma crittografata)10485760

La tabella transport è opzionale, è per utenti avanzati. Permette di inoltrare email per singoli utenti, interi domini o tutte le email a un altro server. Ad esempio,

domaintransport
example.comsmtp:[1.2.3.4]

inoltrerebbe tutte le email per example.com tramite il protocollo smtp al server con l’indirizzo IP 1.2.3.4 (le parentesi quadre [] significano “non effettuare una ricerca del record MX DNS” (il che ha senso per gli indirizzi IP…). Se utilizzi un nome di dominio completamente qualificato (FQDN) al suo posto, non utilizzeresti le parentesi quadre.).

A proposito, (presumo che l’indirizzo IP del tuo sistema di server di posta sia 192.168.0.100) puoi accedere a phpMyAdmin su http://192.168.0.100/phpmyadmin/ in un browser e accedere come mail_admin. Poi puoi dare un’occhiata al database. Più avanti puoi utilizzare phpMyAdmin per amministrare il tuo server di posta.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.