Postfix e MySQL · 5 min read · Sep 28, 2025

Utenti e Domini Virtuali Con Postfix, Courier e MySQL (CentOS 5.1)

Utenti e Domini Virtuali Con Postfix, Courier e MySQL (CentOS 5.1)

Versione 1.0
Autore: Falko Timme

Questo tutorial è Copyright (c) 2007 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 di conseguenza). Le password sono memorizzate in forma crittografata 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.

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), il che è più facile da comprendere e ricordare.

Questo tutorial è basato su CentOS 5.1 (i386). Dovresti già aver configurato un sistema CentOS di base, come descritto qui: https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig e https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p2. Inoltre, dovresti assicurarti che il firewall sia disattivato (almeno per ora) e che SELinux sia disabilitato (questo è importante!), come mostrato nel capitolo sei su https://www.howtoforge.com/centos-5.1-server-lamp-email-dns-ftp-ispconfig-p3.

Questo howto è inteso come una guida pratica; non copre i fondamenti 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 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 Modifica /etc/hosts

Il nostro nome host in questo esempio è server1.example.com, e ha l’indirizzo IP 192.168.0.100, quindi modifichiamo /etc/hosts come segue:

vi /etc/hosts

| # Non rimuovere la seguente riga, o vari programmi # che richiedono funzionalità di rete falliranno. 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 ::1 localhost6.localdomain6 localhost6 |

2 Installa Alcuni Software

Prima importiamo le chiavi GPG per i pacchetti software:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Poi aggiorniamo i pacchetti esistenti sul sistema:

yum update

Ora 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 5.1:

rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

(Se il link sopra non funziona più, puoi trovare la versione attuale di rpmforge-release qui: http://apt.sw.be/packages/rpmforge-release/)

Dopo 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 php-mcrypt phpmyadmin rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel

4 Installa Courier-IMAP, Courier-Authlib e Maildrop

Sfortunatamente non ci sono pacchetti rpm per Courier-IMAP, Courier-Authlib e Maildrop, quindi dobbiamo installarli come descritto in questo tutorial: Come Installare courier-imap, courier-authlib e maildrop Su Fedora, RedHat, CentOS

Nel caso tu abbia problemi a creare i pacchetti rpm, puoi scaricare i miei:

  • courier-authlib-0.60.2-1.i386.rpm
  • courier-authlib-devel-0.60.2-1.i386.rpm
  • courier-authlib-mysql-0.60.2-1.i386.rpm
  • courier-imap-4.2.1-1.i386.rpm
  • maildrop-2.0.4-1.i386.rpm

5 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/5.1/os/SRPMS/postfix-2.3.3-2.src.rpm  
rpm -ivh postfix-2.3.3-2.src.rpm

L’ultimo comando mostrerà alcuni avvisi che puoi ignorare:

warnings: user mockbuild does not exist - using root  
warnings: group mockbuild does not exist - using root
cd /usr/src/redhat/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz  
gunzip postfix-2.3.3-vda.patch.gz  
cd /usr/src/redhat/SPECS/

Ora dobbiamo modificare il file postfix.spec:

vi postfix.spec

Cambia %define MYSQL 0 in %define MYSQL 1, aggiungi Patch0: postfix-2.3.3-vda.patch alla sezione # Patches, e infine aggiungi %patch0 -p1 -b .vda alla sezione %setup -q:

| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.3.3-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.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 [...] %setup -q # Applica le patch obbligatorie %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus [...] |

Poi costruiamo il nostro nuovo pacchetto rpm di Postfix con supporto per quota e MySQL:

rpmbuild -ba postfix.spec

Vedrai molti avvisi come questi che puoi ignorare:

msg.h:12:1: warning: "/*" within comment  
msg.h:14:1: warning: "/*" within comment  
msg.h:33:1: warning: "/*" within comment  
msg.h:34:1: warning: "/*" within comment  
msg.h:35:1: warning: "/*" within comment  
msg.h:36:1: warning: "/*" within comment

Il nostro pacchetto rpm di Postfix è creato in /usr/src/redhat/RPMS/i386, quindi andiamo lì:

cd /usr/src/redhat/RPMS/i386

Il comando

ls -l

mostra i pacchetti disponibili:

[root@server1 i386]# ls -l  
total 11280  
-rw-r--r-- 1 root root 3819299 Dec  5 15:25 postfix-2.3.3-2.i386.rpm  
-rw-r--r-- 1 root root 7655069 Dec  5 15:25 postfix-debuginfo-2.3.3-2.i386.rpm  
-rw-r--r-- 1 root root   50346 Dec  5 15:25 postfix-pflogsumm-2.3.3-2.i386.rpm  
[root@server1 i386]#

Scegli il pacchetto Postfix e installalo in questo modo:

rpm -ivh postfix-2.3.3-2.i386.rpm

(Nel caso tu abbia problemi a creare il pacchetto rpm di Postfix, puoi scaricare il mio da qui: postfix-2.3.3-2.i386.rpm.)

6 Imposta le Password di MySQL e Configura phpMyAdmin

Avvia MySQL:

chkconfig --levels 235 mysqld on  
/etc/init.d/mysqld start

Poi imposta le password per l’account root di MySQL:

mysqladmin -u root password yourrootsqlpassword  
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

Ora configuriamo phpMyAdmin. Modifichiamo la configurazione di Apache in modo che phpMyAdmin consenta connessioni non solo da localhost (commentando la sezione ):

vi /etc/httpd/conf.d/phpmyadmin.conf

| # # Applicazione web per gestire MySQL # # # Order Deny,Allow # Deny from all # Allow from 127.0.0.1 # Alias /phpmyadmin /usr/share/phpmyadmin Alias /phpMyAdmin /usr/share/phpmyadmin Alias /mysqladmin /usr/share/phpmyadmin |

Successivamente cambiamo l’autenticazione in phpMyAdmin da cookie a http:

vi /usr/share/phpmyadmin/config.inc.php

| [...] /* Tipo di autenticazione */ $cfg['Servers'][$i]['auth_type'] = 'http'; [...] |

Poi creiamo i collegamenti di avvio del sistema per Apache e lo avviamo:

chkconfig --levels 235 httpd on  
/etc/init.d/httpd start

Ora puoi indirizzare il tuo browser a http://server1.example.com/phpmyadmin/ o http://192.168.0.100/phpmyadmin/ e accedere con il nome utente root e la tua nuova password root di MySQL.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.