Postfix e MySQL · 5 min read · Nov 11, 2025
Utenti e Domini Virtuali Con Postfix, Courier e MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)
Questo è un “copia e incolla” HowTo! Il modo più semplice per seguire questo tutorial è utilizzare un client da riga di comando/client SSH (come PuTTY per Windows) e semplicemente copiare e incollare i comandi (eccetto dove devi fornire informazioni personali come indirizzi IP, nomi host, password,…). Questo aiuta a evitare errori di battitura.
Utenti e Domini Virtuali Con Postfix, Courier e MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)
Versione 1.0
Autore: Falko Timme
Questo tutorial è Copyright (c) 2005 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 basato su Postfix che si basa 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 criptata 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.
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ù ricariche 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 (anziché un nome utente + un indirizzo email), il che è più facile da comprendere e ricordare.
Questo tutorial è basato su Debian Sarge (Debian 3.1). Dovresti già aver configurato un sistema Debian di base, come descritto qui: https://www.howtoforge.com/perfect_setup_debian_sarge e https://www.howtoforge.com/perfect_setup_debian_sarge_p2.
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 impostare 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 Installa Postfix, Courier, Saslauthd, MySQL, phpMyAdmin
Tutto questo può essere installato con un solo comando:
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin (1 riga!)
Ti verranno poste alcune domande:
Abilitare suExec? <– Sì
Creare directory per l’amministrazione basata sul web? <– No
Tipo generale di configurazione? <– Sito internet
Dove dovrebbe andare la posta per root? <– NESSUNO
Nome della posta? <– server1.example.com
Altre destinazioni per accettare posta? (vuoto per nessuna) <– server1.example.com, localhost, localhost.localdomain
Forzare aggiornamenti sincroni sulla coda della posta? <– No
Certificato SSL richiesto <– Ok
Installa Suggerimenti <– Ok
Quale server web desideri riconfigurare automaticamente? <– apache, apache2
Vuoi che riavvii apache ora? <– Sì
2 Applica la Patch Quota a Postfix
Dobbiamo ottenere i sorgenti di Postfix, patcharli con la patch quota, costruire nuovi pacchetti .deb di Postfix e installare quei pacchetti .deb:
apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch (1 riga!)
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb
3 Crea il Database MySQL per Postfix/Courier
Per impostazione predefinita, MySQL è installato senza una password di root, che cambiamo immediatamente (sostituisci yourrootsqlpassword con la password che desideri utilizzare):
mysqladmin -u root password yourrootsqlpassword
Ora creiamo un database chiamato mail:
mysqladmin -u root -p create mail
Successivamente, andiamo nella shell di MySQL:
mysql -u root -p
Nella shell di 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 di MySQL, creiamo le tabelle di cui Postfix e Courier hanno bisogno:
USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
Come avrai notato, con il comando quit; siamo usciti dalla shell di MySQL e siamo tornati nella shell di Linux.
La tabella domains memorizzerà ogni 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].
| source | destination |
| [email protected] | [email protected] |
La tabella users memorizza tutti gli utenti virtuali (cioè indirizzi email, poiché l’indirizzo email e il nome utente sono gli stessi) e le password (in forma criptata!) e un valore di quota per ciascuna casella di posta (in questo esempio il valore predefinito è 10485760 byte, il che significa 10MB).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“segreto” in forma criptata) | 10485760 |
La tabella transport è facoltativa, è per utenti avanzati. Permette di inoltrare email per singoli utenti, interi domini o tutte le email a un altro server. Ad esempio,
| domain | transport |
| example.com | smtp:[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, (sto suggerendo che l’indirizzo IP del tuo sistema di server di posta è 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ù tardi puoi usare phpMyAdmin per amministrare il tuo server di posta.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.