Postfix Tutorial · 9 min read · Oct 14, 2025
Utenti e Domini Virtuali Con Postfix, Courier, MySQL E SquirrelMail (CentOS 6.3 x86_64)
Questo tutorial è Copyright (c) 2013 di Falko Timme. È 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 in modo appropriato). Le password sono memorizzate in forma criptata nel database (la maggior parte dei documenti che ho trovato trattava password in chiaro, 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 proprie 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 le basi teoriche. Queste sono trattate 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 configurare un tale sistema. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non rilascio alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Questo tutorial è basato su CentOS 6.3 x86_64, quindi dovresti impostare un’installazione di base del server CentOS 6.3 prima di continuare con questo tutorial. Il sistema dovrebbe avere un indirizzo IP statico. Utilizzo 192.168.0.100 come il mio indirizzo IP in questo tutorial e server1.example.com come nome host.
Dovresti assicurarti che il firewall sia disattivato (almeno per ora) e che SELinux sia disabilitato (questo è importante!).
2 Abilitare Repository Aggiuntivi E Installare Alcuni Software
Per prima cosa importiamo le chiavi GPG per i pacchetti software:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*Poi abilitiamo i repository RPMforge e EPEL sul nostro sistema CentOS poiché molti dei pacchetti che installeremo nel corso di questo tutorial non sono disponibili nei repository ufficiali di CentOS 6.3:
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtcd /tmp
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm(Se il link sopra non funziona più, puoi trovare la versione attuale di rpmforge-release qui: http://packages.sw.be/rpmforge-release/)
rpm --import https://fedoraproject.org/static/0608B895.txt
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpmyum install yum-prioritiesModifica /etc/yum.repos.d/epel.repo…
vi /etc/yum.repos.d/epel.repo… e aggiungi la riga priority=10 alla sezione [epel]:
| [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |
Poi aggiorniamo i pacchetti esistenti sul sistema:
yum updateOra installiamo alcuni software di cui abbiamo bisogno in seguito:
yum groupinstall 'Development Tools'3 Installare Apache, MySQL, phpMyAdmin
Tutto questo può essere installato con un solo comando (inclusi i pacchetti di cui abbiamo bisogno per costruire Courier-IMAP):
yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel libidn-devel db4-devel mod_ssl telnet sqlite-devel4 Installare Courier-IMAP, Courier-Authlib, E Maildrop
Sfortunatamente non ci sono pacchetti rpm per Courier-IMAP, Courier-Authlib e Maildrop, quindi dobbiamo costruirli noi stessi.
I pacchetti RPM non dovrebbero essere costruiti come root; courier-imap rifiuterà persino di compilare se rileva che la compilazione viene eseguita come utente root. Pertanto, creiamo ora un normale account utente (falko in questo esempio) e gli diamo una password:
useradd -m -s /bin/bash falko
passwd falkoAvremo bisogno del comando sudo più tardi in modo che l’utente falko possa compilare e installare i pacchetti rpm. Ma prima, dobbiamo consentire a falko di eseguire tutti i comandi utilizzando sudo:
Esegui
visudoNel file che si apre c’è una riga root ALL=(ALL) ALL. Aggiungi una riga simile per falko appena sotto quella riga:
| [...] ## Consenti a root di eseguire qualsiasi comando ovunque root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |
Ora siamo pronti per costruire il nostro pacchetto rpm. Prima diventa l’utente falko:
su falkoSuccessivamente creiamo il nostro ambiente di build:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/BUILDROOT
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosOra creiamo una directory di download e scarichiamo i file sorgente da http://www.courier-mta.org/download.php:
mkdir $HOME/downloads
cd $HOME/downloadswget --no-check-certificate https://sourceforge.net/projects/courier/files/authlib/0.65.0/courier-authlib-0.65.0.tar.bz2/download
wget --no-check-certificate https://sourceforge.net/projects/courier/files/imap/4.12.0/courier-imap-4.12.0.tar.bz2/download
wget --no-check-certificate https://sourceforge.net/projects/courier/files/maildrop/2.6.0/maildrop-2.6.0.tar.bz2/downloadOra (ancora in $HOME/downloads) possiamo costruire courier-authlib:
sudo rpmbuild -ta courier-authlib-0.65.0.tar.bz2Dopo il processo di build, i pacchetti rpm possono essere trovati in /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 se sei su un sistema i386). Il comando
sudo ls -l /root/rpmbuild/RPMS/x86_64mostra i pacchetti rpm disponibili:
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 544
-rw-r--r-- 1 root root 126728 Mar 4 12:49 courier-authlib-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 274772 Mar 4 12:49 courier-authlib-debuginfo-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 37824 Mar 4 12:49 courier-authlib-devel-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17256 Mar 4 12:49 courier-authlib-ldap-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12000 Mar 4 12:49 courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12984 Mar 4 12:49 courier-authlib-pgsql-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8244 Mar 4 12:49 courier-authlib-pipe-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 10620 Mar 4 12:49 courier-authlib-sqlite-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34644 Mar 4 12:49 courier-authlib-userdb-0.65.0-1.el6.x86_64.rpm
[falko@server1 downloads]$Seleziona quelli che vuoi installare e installali in questo modo:
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.65.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.65.0-1.el6.x86_64.rpmOra torniamo alla nostra directory di download:
cd $HOME/downloadsEsegui i seguenti comandi per creare le directory richieste/cambiare i permessi delle directory (perché altrimenti il processo di build per Courier-Imap fallirà):
sudo mkdir -p /var/cache/ccache/tmp
sudo chmod o+rwx /var/cache/ccache/
sudo chmod 777 /var/cache/ccache/tmpOra esegui di nuovo rpmbuild, questa volta senza sudo, altrimenti la compilazione fallirà perché è stata eseguita come root:
rpmbuild -ta courier-imap-4.12.0.tar.bz2Dopo il processo di build, i pacchetti rpm possono essere trovati in $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386 se sei su un sistema i386):
cd $HOME/rpm/RPMS/x86_64Il comando
ls -lmostra i pacchetti rpm disponibili:
[falko@server1 x86_64]$ ls -l
total 1116
-rw-rw-r-- 1 falko falko 332112 Mar 4 12:53 courier-imap-4.12.0-1.x86_64.rpm
-rw-rw-r-- 1 falko falko 805288 Mar 4 12:53 courier-imap-debuginfo-4.12.0-1.x86_64.rpm
[falko@server1 x86_64]$Puoi installare courier-imap in questo modo:
sudo rpm -ivh courier-imap-4.12.0-1.x86_64.rpmOra torniamo alla nostra directory di download:
cd $HOME/downloadsE esegui rpmbuild di nuovo, questa volta per costruire un pacchetto maildrop:
sudo rpmbuild -ta maildrop-2.6.0.tar.bz2Dopo il processo di build, i pacchetti rpm possono essere trovati in /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 se sei su un sistema i386). Il comando
sudo ls -l /root/rpmbuild/RPMS/x86_64mostra i pacchetti rpm disponibili:
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 1732
-rw-r--r-- 1 root root 126728 Mar 4 12:49 courier-authlib-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 274772 Mar 4 12:49 courier-authlib-debuginfo-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 37824 Mar 4 12:49 courier-authlib-devel-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17256 Mar 4 12:49 courier-authlib-ldap-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12000 Mar 4 12:49 courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12984 Mar 4 12:49 courier-authlib-pgsql-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8244 Mar 4 12:49 courier-authlib-pipe-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 10620 Mar 4 12:49 courier-authlib-sqlite-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34644 Mar 4 12:49 courier-authlib-userdb-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 286752 Mar 4 13:03 maildrop-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 751304 Mar 4 13:03 maildrop-debuginfo-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 102052 Mar 4 13:03 maildrop-devel-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 66184 Mar 4 13:03 maildrop-man-2.6.0-1.x86_64.rpm
[falko@server1 downloads]$Puoi ora installare maildrop in questo modo:
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.6.0-1.x86_64.rpmDopo aver compilato e installato tutti i pacchetti necessari, puoi diventare di nuovo root digitando
exit5 Applicare la Patch Quota a Postfix
Dobbiamo ottenere il sorgente rpm di Postfix, patcharlo con la patch quota, costruire un nuovo pacchetto rpm di Postfix e installarlo.
cd /usr/src
wget http://vault.centos.org/6.3/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm
rpm -ivh postfix-2.6.6-2.2.el6_1.src.rpmL’ultimo comando mostrerà alcuni avvisi che puoi ignorare:
warnings: user mockbuild does not exist - using root
warnings: group mockbuild does not exist - using rootcd /root/rpmbuild/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz
gunzip postfix-2.6.5-vda-ng.patch.gz
cd /root/rpmbuild/SPECS/Ora dobbiamo modificare il file postfix.spec:
vi postfix.specAggiungi Patch0: postfix-2.6.5-vda-ng.patch alla sezione # Patches, e %patch0 -p1 -b .vda-ng alla sezione %setup -q:
| [...] # Patches Patch0: postfix-2.6.5-vda-ng.patch Patch1: postfix-2.6.1-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.1-datecalc.patch Patch10: postfix-2.6.6-CVE-2011-0411.patch Patch11: postfix-2.6.6-CVE-2011-1720.patch [...] %prep %setup -q # Applica le patch obbligatorie %patch0 -p1 -b .vda-ng %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |
Poi costruiamo il nostro nuovo pacchetto rpm di Postfix con supporto quota e MySQL:
rpmbuild -ba postfix.specIl nostro pacchetto rpm di Postfix viene creato in /root/rpmbuild/RPMS/x86_64 (/root/rpmbuild/RPMS/i386 se sei su un sistema i386), quindi andiamo lì:
cd /root/rpmbuild/RPMS/x86_64Il comando
ls -lmostra i pacchetti disponibili:
[root@server1 x86_64]# ls -l
total 10748
-rw-r--r-- 1 root root 126728 Mar 4 12:49 courier-authlib-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 274772 Mar 4 12:49 courier-authlib-debuginfo-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 37824 Mar 4 12:49 courier-authlib-devel-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17256 Mar 4 12:49 courier-authlib-ldap-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12000 Mar 4 12:49 courier-authlib-mysql-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 12984 Mar 4 12:49 courier-authlib-pgsql-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8244 Mar 4 12:49 courier-authlib-pipe-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 10620 Mar 4 12:49 courier-authlib-sqlite-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34644 Mar 4 12:49 courier-authlib-userdb-0.65.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 286752 Mar 4 13:03 maildrop-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 751304 Mar 4 13:03 maildrop-debuginfo-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 102052 Mar 4 13:03 maildrop-devel-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 66184 Mar 4 13:03 maildrop-man-2.6.0-1.x86_64.rpm
-rw-r--r-- 1 root root 2138908 Mar 4 13:15 postfix-2.6.6-2.2.el6.x86_64.rpm
-rw-r--r-- 1 root root 7021184 Mar 4 13:15 postfix-debuginfo-2.6.6-2.2.el6.x86_64.rpm
-rw-r--r-- 1 root root 61752 Mar 4 13:15 postfix-perl-scripts-2.6.6-2.2.el6.x86_64.rpm
[root@server1 x86_64]# Per assicurarti che nessuna versione di postfix sia stata precedentemente installata sul tuo sistema, usa:
yum remove postfixScegli il pacchetto Postfix e installalo in questo modo:
rpm -ivh postfix-2.6.6-2.2.el6.x86_64.rpmRicevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.