Postfix e MySQL · 6 min read · Sep 27, 2025
Utenti e Domini Virtuali Con Postfix, Courier, MySQL E SquirrelMail (Debian Lenny)
Utenti e Domini Virtuali Con Postfix, Courier, MySQL E SquirrelMail (Debian Lenny)
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 di conseguenza). Le password sono memorizzate in forma criptata nel database (la maggior parte dei documenti che ho trovato trattava password in testo semplice, il che rappresenta un rischio per la sicurezza). Oltre a ciò, 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 Debian Lenny, quindi dovresti impostare un’installazione di base del server Debian Lenny prima di continuare con questo tutorial (ad esempio, come mostrato nei capitoli 1 -7 di questo tutorial: The Perfect Server - Debian Lenny (Debian 5.0) [ISPConfig 2]). Il sistema dovrebbe avere un indirizzo IP statico. Utilizzo 192.168.0.100 come mio indirizzo IP in questo tutorial e server1.example.com come nome host.
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 postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpassTi 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
Nome del gruppo di lavoro/dominio: <– WORKGROUP
Modificare smb.conf per utilizzare le impostazioni WINS da DHCP? <– No
Server web da riconfigurare automaticamente: <– apache2
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 postfixcd /usr/src
apt-get source postfix(Assicurati di utilizzare la versione corretta di Postfix nei comandi seguenti. Ho installato Postfix 2.5.5. Puoi scoprire la tua versione di Postfix eseguendo
postconf -d | grep mail_versionL’output dovrebbe apparire così:
server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.5.5
milter_macro_v = $mail_name $mail_version
server1:/usr/src#)
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix-2.5.5
patch -p1 < ../postfix-2.5.5-vda-ng.patch
dpkg-buildpackagePotresti vedere un avviso come questo alla fine del comando dpkg-buildpackage:
dpkg-buildpackage: warning: Failed to sign .dsc and .changes filePuoi ignorare questo messaggio.
Ora andiamo su una directory sopra, dove sono stati creati i nuovi pacchetti .deb:
cd ..Il comando
ls -lmostra i pacchetti disponibili:
server1:/usr/src# ls -l
total 5880
drwxr-xr-x 19 root root 4096 2009-02-20 14:15 postfix-2.5.5
-rw-r--r-- 1 root src 236910 2009-02-20 14:12 postfix_2.5.5-1.1.diff.gz
-rw-r--r-- 1 root src 1178 2009-02-20 14:12 postfix_2.5.5-1.1.dsc
-rw-r--r-- 1 root src 3695 2009-02-20 14:17 postfix_2.5.5-1.1_i386.changes
-rw-r--r-- 1 root src 1233138 2009-02-20 14:17 postfix_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 3157877 2008-09-02 23:18 postfix_2.5.5.orig.tar.gz
-rw-r--r-- 1 root src 58389 2008-09-06 05:02 postfix-2.5.5-vda-ng.patch
-rw-r--r-- 1 root src 41572 2009-02-20 14:17 postfix-cdb_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 141394 2009-02-20 14:17 postfix-dev_2.5.5-1.1_all.deb
-rw-r--r-- 1 root src 915978 2009-02-20 14:17 postfix-doc_2.5.5-1.1_all.deb
-rw-r--r-- 1 root src 48934 2009-02-20 14:17 postfix-ldap_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 43512 2009-02-20 14:17 postfix-mysql_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 43448 2009-02-20 14:17 postfix-pcre_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 43586 2009-02-20 14:17 postfix-pgsql_2.5.5-1.1_i386.deb
server1:/usr/src#Seleziona i pacchetti postfix e postfix-mysql e installali in questo modo:
dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb4 Crea Il Database MySQL Per Postfix/Courier
Ora creiamo un database chiamato mail:
mysqladmin -u root -p create mailSuccessivamente, andiamo nella shell MySQL:
mysql -u root -pNella 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) )
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 bigint(20) 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 MySQL e siamo tornati nella shell di 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].
| source | destination |
| [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 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. Consente 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) invece 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.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.