Postfix Setup · 7 min read · Nov 07, 2025
Utenti e Domini Virtuali Con Postfix, Courier, MySQL E SquirrelMail (CentOS 4.8 i386)
Utenti e Domini Virtuali Con Postfix, Courier, MySQL E SquirrelMail (CentOS 4.8 i386)
Versione 1.0
Autore: Falko Timme
Questo tutorial è Copyright (c) 2009 da 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 trattavano 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 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 rilascio alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Questo tutorial è basato su CentOS 4.8 i386, quindi dovresti impostare un’installazione di base del server CentOS 4.8 prima di continuare con questo tutorial (ad esempio, come mostrato nei primi cinque capitoli di The Perfect Server - CentOS 4.8 Server i386 [ISPConfig 2]). 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!).
Ho testato questa configurazione su un sistema i386. La configurazione dovrebbe essere simile o forse anche identica per un sistema x86_64, ma non l’ho testata.
2 Installa Alcuni Software
Prima aggiorniamo i nostri pacchetti esistenti sul sistema:
yum updateOra installiamo alcuni software di cui abbiamo bisogno più avanti:
yum groupinstall 'Development Tools'yum groupinstall 'Development Libraries'3 Installa Apache, MySQL, phpMyAdmin
Prima abilitiamo il repository RPMforge sul nostro sistema CentOS poiché molti dei pacchetti che installeremo nel corso di questo tutorial non sono disponibili nei repository ufficiali di CentOS 4.8:
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtrpm -Uhv http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpmDopo possiamo installare i pacchetti necessari 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 openldap-servers libtool gdbm-devel pam-devel gamin-devel4 Installa 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 (compileuser in questo esempio) e gli diamo una password:
useradd -m -s /bin/bash compileuser
passwd compileuserAvremo bisogno del comando sudo più avanti in modo che l’utente compileuser possa compilare e installare i pacchetti rpm. Ma prima, dobbiamo consentire a compileuser 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 subito sotto quella riga:
| [...] root ALL=(ALL) ALL compileuser ALL=(ALL) ALL [...] |
Ora siamo pronti per costruire il nostro pacchetto rpm. Prima diventa l’utente compileuser:
su compileuserSuccessivamente creiamo il nostro ambiente di costruzione:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosOra scarichiamo i file sorgente da http://www.courier-mta.org/download.php:
cd /tmp
wget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.4.tar.bz2
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.6.0.tar.bz2
wget http://prdownloads.sourceforge.net/courier/maildrop-2.2.0.tar.bz2Ora (ancora in /tmp) possiamo costruire courier-authlib:
sudo rpmbuild -ta courier-authlib-0.62.4.tar.bz2Dopo il processo di costruzione, i pacchetti rpm possono essere trovati in $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 se sei su un sistema x86_64):
cd $HOME/rpm/RPMS/i386Il comando
ls -lmostra i pacchetti rpm disponibili:
[compileuser@server1 i386]$ ls -l
total 616
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
[compileuser@server1 i386]$Seleziona quelli che desideri installare e installali in questo modo:
sudo rpm -ivh courier-authlib-0.62.4-1.i386.rpm courier-authlib-mysql-0.62.4-1.i386.rpm courier-authlib-devel-0.62.4-1.i386.rpmOra torniamo alla directory /tmp:
cd /tmped eseguiamo di nuovo rpmbuild, questa volta senza sudo, altrimenti la compilazione fallirà perché è stata eseguita come root:
rpmbuild -ta courier-imap-4.6.0.tar.bz2Dopo il processo di costruzione, i pacchetti rpm possono essere trovati in $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 se sei su un sistema x86_64):
cd $HOME/rpm/RPMS/i386Il comando
ls -lmostra i pacchetti rpm disponibili:
[compileuser@server1 i386]$ ls -l
total 1812
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm
[compileuser@server1 i386]$Puoi installare courier-imap in questo modo:
sudo rpm -ivh courier-imap-4.6.0-1.i386.rpmOra torniamo alla directory /tmp:
cd /tmped eseguiamo di nuovo rpmbuild, questa volta per costruire un pacchetto maildrop:
sudo rpmbuild -ta maildrop-2.2.0.tar.bz2Dopo il processo di costruzione, i pacchetti rpm possono essere trovati in $HOME/rpm/RPMS/i386 ( $HOME/rpm/RPMS/x86_64 se sei su un sistema x86_64):
cd $HOME/rpm/RPMS/i386Il comando
ls -lmostra i pacchetti rpm disponibili:
[compileuser@server1 i386]$ ls -l
total 3012
-rw-r--r-- 1 root root 142923 Sep 24 15:50 courier-authlib-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 346388 Sep 24 15:50 courier-authlib-debuginfo-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 35075 Sep 24 15:50 courier-authlib-devel-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 17473 Sep 24 15:50 courier-authlib-ldap-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 13032 Sep 24 15:50 courier-authlib-mysql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 12585 Sep 24 15:50 courier-authlib-pgsql-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 7457 Sep 24 15:50 courier-authlib-pipe-0.62.4-1.i386.rpm
-rw-r--r-- 1 root root 32403 Sep 24 15:50 courier-authlib-userdb-0.62.4-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 357587 Sep 24 16:05 courier-imap-4.6.0-1.i386.rpm
-rw-r--r-- 1 compileuser compileuser 854996 Sep 24 16:05 courier-imap-debuginfo-4.6.0-1.i386.rpm
-rw-r--r-- 1 root root 283291 Sep 24 16:13 maildrop-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 734265 Sep 24 16:13 maildrop-debuginfo-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 122406 Sep 24 16:13 maildrop-devel-2.2.0-1.i386.rpm
-rw-r--r-- 1 root root 63497 Sep 24 16:13 maildrop-man-2.2.0-1.i386.rpm
[compileuser@server1 i386]$Puoi ora installare maildrop in questo modo:
sudo rpm -ivh maildrop-2.2.0-1.i386.rpmDopo aver compilato e installato tutti i pacchetti necessari, puoi tornare a root digitando
exit5 Applica 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://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/4.8/os/SRPMS/postfix-2.2.10-1.2.1.el4_7.src.rpm
rpm -ivh postfix-2.2.10-1.2.1.el4_7.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 /usr/src/redhat/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.2.10-vda.patch.gz
gunzip postfix-2.2.10-vda.patch.gz
cd /usr/src/redhat/SPECS/Ora dobbiamo modificare il file postfix.spec:
vi postfix.specCambia %define MYSQL 0 in %define MYSQL 1, aggiungi Patch0: postfix-2.2.10-vda.patch alla strofetta # Patches, e infine aggiungi %patch0 -p1 -b .vda alla strofetta %setup -q:
| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.2.10-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch4: postfix-hostname-fqdn.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch Patch10: postfix-2.2.10-CVE-2008-2936.patch [...] %setup -q # Apply obligatory patches %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch4 -p1 -b .postfix-hostname-fqdn %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus %patch10 -p1 -b .CVE-2008-2936 [...] |
Poi costruiamo il nostro nuovo pacchetto rpm di Postfix con supporto quota e MySQL:
rpmbuild -ba postfix.specIl nostro pacchetto rpm di Postfix è creato in /usr/src/redhat/RPMS/i386, ( /usr/src/redhat/RPMS/x86_64 su un sistema x86_64) quindi andiamo lì:
cd /usr/src/redhat/RPMS/i386Il comando
ls -lmostra i pacchetti disponibili:
[root@server1 i386]# ls -l
total 10052
-rw-r--r-- 1 root root 3237646 Sep 28 16:49 postfix-2.2.10-1.2.1.i386.rpm
-rw-r--r-- 1 root root 6984691 Sep 28 16:49 postfix-debuginfo-2.2.10-1.2.1.i386.rpm
-rw-r--r-- 1 root root 49047 Sep 28 16:49 postfix-pflogsumm-2.2.10-1.2.1.i386.rpm
[root@server1 i386]#Seleziona il pacchetto Postfix e installalo in questo modo:
rpm -ivh postfix-2.2.10-1.2.1.i386.rpmRicevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.