Postfix Tutorial · 20 min read · Sep 25, 2025
Utenti e Domini Virtuali Con Postfix, Courier, MySQL e SquirrelMail (Ubuntu 13.10)
Questo tutorial è Copyright (c) 2014 di Falko Timme & Srijan Kishore. È 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 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. 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), il che è più facile da comprendere e ricordare.
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 Nota Preliminare
Questo tutorial è basato su Ubuntu 13.10 Server (Saucy Salamander), quindi dovresti impostare un’installazione di base del server Ubuntu 13.10 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.
Assicurati di essere loggato come root (digita
sudo super diventare root), perché dobbiamo eseguire tutti i passaggi di questo tutorial come utente root.
È molto importante che tu faccia di /bin/sh un symlink a /bin/bash…
dpkg-reconfigure dashUsare dash come shell di sistema predefinita (/bin/sh)? <– No
… e che tu disabiliti AppArmor:
/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils2 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 libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpassTi verrà chiesto di rispondere a alcune domande:
Nuova password per l’utente MySQL “root”: <– yourrootsqlpassword
Ripeti la password per l’utente MySQL “root”: <– yourrootsqlpassword
Creare directory per l’amministrazione web-based? <– No
Tipo generale di configurazione della posta: <– Internet Site
Nome della posta di sistema: <– server1.example.com
Certificato SSL richiesto <– Ok
Server web da riconfigurare automaticamente: <– apache2
Configurare il database per phpmyadmin con dbconfig-common? <– No
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 Postfix 2.10.2 installato. Puoi scoprire la tua versione di Postfix eseguendo
postconf -d | grep mail_versionL’output dovrebbe apparire così:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.10.2
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.10.2
patch -p1 < ../postfix-vda-v13-2.10.0.patchSuccessivamente apri debian/rules e cambia DEB_BUILD_HARDENING da 1 a 0:
vi debian/rules| [...] export DEB_BUILD_HARDENING=0 [...] |
Se non lo fai, la tua build fallirà con i seguenti messaggi di errore:
maildir.c: In function âdeliver_maildirâ:
maildir.c:974:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:977:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:983:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c:986:17: error: format not a string literal and no format arguments [-Werror=format-security]
maildir.c: In function âsql2fileâ:
maildir.c:404:25: warning: ignoring return value of âreadâ, declared with attribute warn_unused_result [-Wunused-result]
maildir.c:417:26: warning: ignoring return value of âwriteâ, declared with attribute warn_unused_result [-Wunused-result]
cc1: some warnings being treated as errors
make: * [maildir.o] Error 1
make: Leaving directory `/usr/src/postfix-2.10.2/src/virtual'
make[1]: * [update] Error 1
make[1]: Leaving directory `/usr/src/postfix-2.10.2'
make: *** [build] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
root@server1:/usr/src/postfix-2.10.2#Ora possiamo costruire i nuovi pacchetti Postfix.deb:
dpkg-buildpackageOra andiamo in una directory sopra, dove sono stati creati i nuovi pacchetti .deb:
cd ..Il comando
ls -lmostra i pacchetti disponibili:
root@server1:/usr/src# ls -l
total 7124
drwxr-xr-x 18 root root 4096 Apr 16 04:29 postfix-2.10.2
-rw-r--r-- 1 root root 48594 Apr 16 04:29 postfix-cdb_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 161974 Apr 16 04:29 postfix-dev_2.10.2-1_all.deb
-rw-r--r-- 1 root root 1094344 Apr 16 04:29 postfix-doc_2.10.2-1_all.deb
-rw-r--r-- 1 root root 57342 Apr 16 04:29 postfix-ldap_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50554 Apr 16 04:29 postfix-mysql_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50804 Apr 16 04:29 postfix-pcre_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 50756 Apr 16 04:29 postfix-pgsql_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 55701 Jun 7 2013 postfix-vda-v13-2.10.0.patch
-rw-r--r-- 1 root root 282175 Apr 16 04:28 postfix_2.10.2-1.diff.gz
-rw-r--r-- 1 root root 1522 Apr 16 04:28 postfix_2.10.2-1.dsc
-rw-r--r-- 1 root root 3899 Apr 16 04:29 postfix_2.10.2-1_amd64.changes
-rw-r--r-- 1 root root 1542368 Apr 16 04:29 postfix_2.10.2-1_amd64.deb
-rw-r--r-- 1 root root 3828326 Sep 12 2013 postfix_2.10.2.orig.tar.gzSeleziona i pacchetti postfix e postfix-mysql e installali in questo modo:
dpkg -i postfix_2.10.2-1_amd64.deb postfix-mysql_2.10.2-1_amd64.deb4 Crea Il Database MySQL Per Postfix/Courier
Ora creiamo un database chiamato mail:
mysqladmin -u root -p create mailTi verrà chiesto di rispondere a questa domanda:
Inserisci Password: <– yourrootsqlpassword
Successivamente, andiamo nella shell di MySQL:
mysql -u root -pNella 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 necessarie per Postfix e Courier:
USE mail;CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) ENGINE=MyISAM;CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) ENGINE=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’alias 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 ogni 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) al suo posto, 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.
5 Configura Postfix
Ora dobbiamo dire a Postfix dove può trovare tutte le informazioni nel database. Pertanto dobbiamo creare sei file di testo. Noterai che dico a Postfix di connettersi a MySQL all’indirizzo IP 127.0.0.1 invece di localhost. Questo perché Postfix è in esecuzione in una chroot jail e non ha accesso al socket MySQL a cui tenterebbe di connettersi se dicessi a Postfix di utilizzare localhost. Se utilizzo 127.0.0.1, Postfix utilizza il networking TCP per connettersi a MySQL, il che non è un problema anche in una chroot jail (l’alternativa sarebbe spostare il socket MySQL nella chroot jail, il che causa alcuni altri problemi).
Assicurati che /etc/mysql/my.cnf contenga la seguente riga:
vi /etc/mysql/my.cnf| [...] # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address = 127.0.0.1 [...] |
Se hai dovuto modificare /etc/mysql/my.cnf, riavvia MySQL ora:
/etc/init.d/mysql restartEsegui
netstat -tap | grep mysqlper assicurarti che MySQL stia ascoltando su 127.0.0.1 (localhost.localdomain):
root@server1:~# netstat -tap | grep mysql
tcp 0 0 localhost.localdo:mysql *:* LISTEN 24970/mysqld
root@server1:~#Ora creiamo i nostri sei file di testo.
vi /etc/postfix/mysql-virtual_domains.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_forwardings.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailboxes.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_email2email.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_transports.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT transport FROM transport WHERE domain='%s' hosts = 127.0.0.1 |
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf| user = mail_admin password = mail_admin_password dbname = mail query = SELECT quota FROM users WHERE email='%s' hosts = 127.0.0.1 |
Poi cambia i permessi e il gruppo di questi file:
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cfOra creiamo un utente e un gruppo chiamati vmail con la home directory /home/vmail. Qui verranno memorizzate tutte le caselle di posta.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -mSuccessivamente facciamo alcune configurazioni di Postfix. Assicurati di sostituire server1.example.com con un FQDN valido, altrimenti il tuo Postfix potrebbe non funzionare correttamente!
postconf -e 'myhostname = server1.example.com'
postconf -e 'mydestination = server1.example.com, localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_maildir_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "L'utente che stai cercando di contattare ha superato la quota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'Successivamente creiamo il certificato SSL necessario per TLS:
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509Nome del Paese (codice a 2 lettere) [AU]: <– Inserisci il tuo Nome del Paese (ad esempio, “DE”).
Nome dello Stato o della Provincia (nome completo) [Some-State]: <– Inserisci il tuo Nome dello Stato o della Provincia.
Nome della Località (ad es., città) []: <– Inserisci la tua Città.
Nome dell’Organizzazione (ad es., azienda) [Internet Widgits Pty Ltd]: <– Inserisci il tuo Nome dell’Organizzazione (ad es., il nome della tua azienda).
Nome dell’Unità Organizzativa (ad es., sezione) []: <– Inserisci il tuo Nome dell’Unità Organizzativa (ad es. “Reparto IT”).
Nome Comune (ad es., IL TUO nome) []: <– Inserisci il Nome di Dominio Completo del sistema (ad es. “server1.example.com”).
Indirizzo Email []: <– Inserisci il tuo Indirizzo Email.
Poi cambia i permessi di smtpd.key:
chmod o= /etc/postfix/smtpd.key6 Configura Saslauthd
Prima esegui
mkdir -p /var/spool/postfix/var/run/saslauthdPoi modifica /etc/default/saslauthd. Imposta START su yes e cambia la riga OPTIONS=”-c -m /var/run/saslauthd” in OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”:
vi /etc/default/saslauthd| # # Impostazioni per il demone saslauthd # Si prega di leggere /usr/share/doc/sasl2-bin/README.Debian per dettagli. # # Dovrebbe saslauthd essere eseguito automaticamente all'avvio? (predefinito: no) START=yes # Descrizione di questa istanza di saslauthd. Raccomandato. # (suggerimento: Demone di Autenticazione SASL) DESC="Demone di Autenticazione SASL" # Nome breve di questa istanza di saslauthd. Fortemente raccomandato. # (suggerimento: saslauthd) NAME="saslauthd" # Quali meccanismi di autenticazione dovrebbe usare saslauthd? (predefinito: pam) # # Opzioni disponibili in questo pacchetto Debian: # getpwent -- usa la funzione di libreria getpwent() # kerberos5 -- usa Kerberos 5 # pam -- usa PAM # rimap -- usa un server IMAP remoto # shadow -- usa il file di password shadow locale # sasldb -- usa il file di database sasldb locale # ldap -- usa LDAP (la configurazione è in /etc/saslauthd.conf) # # Solo un'opzione può essere utilizzata alla volta. Vedi la pagina man di saslauthd # per ulteriori informazioni. # # Esempio: MECHANISMS="pam" MECHANISMS="pam" # Opzioni aggiuntive per questo meccanismo. (predefinito: nessuna) # Vedi la pagina man di saslauthd per informazioni sulle opzioni specifiche del meccanismo. MECH_OPTIONS="" # Quanti processi saslauthd dovremmo eseguire? (predefinito: 5) # Un valore di 0 creerà un nuovo processo per ogni connessione. THREADS=5 # Altre opzioni (predefinito: -c -m /var/run/saslauthd) # Nota: DEVI specificare l'opzione -m o saslauthd non verrà eseguito! # # ATTENZIONE: NON SPECIFICARE L'OPZIONE -d. # L'opzione -d farà sì che saslauthd venga eseguito in primo piano invece che come # un demone. Questo PREVENTERÀ IL CORRETTO AVVIO DEL TUO SISTEMA. Se desideri # eseguire saslauthd in modalità debug, eseguilo manualmente per sicurezza. # # Vedi /usr/share/doc/sasl2-bin/README.Debian per informazioni specifiche per Debian. # Vedi la pagina man di saslauthd e l'output di 'saslauthd -h' per informazioni generali # su queste opzioni. # # Esempio per utenti Postfix chroot: "-c -m /var/spool/postfix/var/run/saslauthd" # Esempio per utenti Postfix non chroot: "-c -m /var/run/saslauthd" # # Per sapere se il tuo Postfix è in esecuzione chroot, controlla /etc/postfix/master.cf. # Se ha la riga "smtp inet n - y - - smtpd" o "smtp inet n - - - - smtpd" # allora il tuo Postfix è in esecuzione in una chroot. # Se ha la riga "smtp inet n - n - - smtpd" allora il tuo Postfix NON è # in esecuzione in una chroot. #OPTIONS="-c -m /var/run/saslauthd" OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r" |
Poi crea il file /etc/pam.d/smtp. Dovrebbe contenere solo le seguenti due righe (assicurati di inserire i dettagli corretti del tuo database):
vi /etc/pam.d/smtp| auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1 |
Successivamente crea il file /etc/postfix/sasl/smtpd.conf. Dovrebbe apparire così:
vi /etc/postfix/sasl/smtpd.conf| pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: sql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail_admin sql_passwd: mail_admin_password sql_database: mail sql_select: select password from users where email = '%u@%r' |
Successivamente aggiungi l’utente postfix al gruppo sasl (questo assicura che Postfix abbia il permesso di accedere a saslauthd):
adduser postfix saslPoi riavvia Postfix e Saslauthd:
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart7 Configura Courier
Ora dobbiamo dire a Courier che dovrebbe autenticarsi contro il nostro database MySQL. Prima, modifica /etc/courier/authdaemonrc e cambia il valore di authmodulelist in modo che legga:
vi /etc/courier/authdaemonrc| [...] authmodulelist="authmysql" [...] |
Poi fai un backup di /etc/courier/authmysqlrc e svuota il vecchio file:
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrcPoi apri /etc/courier/authmysqlrc e metti le seguenti righe:
vi /etc/courier/authmysqlrc| MYSQL_SERVER localhost MYSQL_USERNAME mail_admin MYSQL_PASSWORD mail_admin_password MYSQL_PORT 0 MYSQL_DATABASE mail MYSQL_USER_TABLE users MYSQL_CRYPT_PWFIELD password #MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') #MYSQL_NAME_FIELD MYSQL_QUOTA_FIELD quota |
Durante l’installazione, i certificati SSL per IMAP-SSL e POP3-SSL vengono creati con il nome host localhost. Per cambiare questo nel nome host corretto (server1.example.com in questo tutorial), elimina i certificati…
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem… e modifica i seguenti due file; sostituisci CN=localhost con CN=server1.example.com (puoi anche modificare gli altri valori, se necessario):
vi /etc/courier/imapd.cnf| [...] CN=server1.example.com [...] |
vi /etc/courier/pop3d.cnf| [...] CN=server1.example.com [...] |
Poi ricrea i certificati…
mkimapdcert
mkpop3dcert… e riavvia Courier:
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restartEseguendo
telnet localhost pop3puoi vedere se il tuo server POP3 funziona correttamente. Dovrebbe restituire +OK Hello there. (Digita quit per tornare alla shell di Linux.)
root@server1:/etc/courier# telnet localhost pop3
Trying ::1…
Connected to localhost.localdomain.
Escape character is ‘^]’.
+OK Hello there.
<– quit
+OK Better luck next time.
Connection closed by foreign host.
root@server1:/etc/courier#
8 Modifica /etc/aliases
Ora dovremmo aprire /etc/aliases. Assicurati che postmaster punti a root e root al tuo nome utente o al tuo indirizzo email, ad esempio in questo modo:
vi /etc/aliases| [...] postmaster: root root: [email protected] [...] |
oppure in questo modo (se administrator è il tuo nome utente):
| [...] postmaster: root root: administrator [...] |
Ogni volta che modifichi /etc/aliases, devi eseguire
newaliasesdopo e riavviare Postfix:
/etc/init.d/postfix restart9 Installa amavisd-new, SpamAssassin e ClamAV
Per installare amavisd-new, spamassassin e clamav, esegui il seguente comando:
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop paxSuccessivamente dobbiamo configurare amavisd-new. La configurazione è suddivisa in vari file che risiedono nella directory /etc/amavis/conf.d. Dai un’occhiata a ciascuno di essi per familiarizzare con la configurazione. La maggior parte delle impostazioni va bene, tuttavia dobbiamo modificare tre file:
Prima dobbiamo abilitare ClamAV e SpamAssassin in /etc/amavis/conf.d/15-content_filter_mode decommentando le righe @bypass_virus_checks_maps e @bypass_spam_checks_maps:
vi /etc/amavis/conf.d/15-content_filter_modeIl file dovrebbe apparire così:
| use strict; # Puoi modificare questo file per riabilitare il controllo SPAM tramite spamassassin # e per riabilitare il controllo antivirus. # # Modalità predefinita di controllo antivirus # Si prega di notare che il controllo antivirus è DISABILITATO per # impostazione predefinita. # Se desideri abilitarlo, si prega di decommentare le seguenti righe: @bypass_virus_checks_maps = ( \\%bypass_virus_checks, \\@bypass_virus_checks_acl, \\$bypass_virus_checks_re); # # Modalità predefinita di controllo SPAM # Si prega di notare che il controllo anti-spam è DISABILITATO per # impostazione predefinita. # Se desideri abilitarlo, si prega di decommentare le seguenti righe: @bypass_spam_checks_maps = ( \\%bypass_spam_checks, \\@bypass_spam_checks_acl, \\$bypass_spam_checks_re); 1; # assicurati di avere un ritorno definito |
E poi dovresti dare un’occhiata alle impostazioni di spam e alle azioni per le email spam/virus in /etc/amavis/conf.d/20-debian_defaults. Non c’è bisogno di cambiare nulla se le impostazioni predefinite vanno bene per te. Il file contiene molte spiegazioni, quindi non c’è bisogno di spiegare le impostazioni qui:
vi /etc/amavis/conf.d/20-debian_defaults| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # abilita l'hashing della directory di quarantena $log_recip_templ = undef; # disabilita le voci di log di livello-0 per destinatario $DO_SYSLOG = 1; # log tramite syslogd (preferito) $syslog_ident = 'amavis'; # tag di identificazione syslog, prepeso a tutti i messaggi $syslog_facility = 'mail'; $syslog_priority = 'debug'; # passa a info per eliminare l'output di debug, ecc $enable_db = 1; # abilita l'uso di BerkeleyDB/libdb (SNMP e nanny) $enable_global_cache = 1; # abilita l'uso della cache basata su libdb se $enable_db=1 $inet_socket_port = 10024; # socket di ascolto predefinito $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # aggiungi intestazioni di informazioni spam se a, o sopra quel livello $sa_tag2_level_deflt = 6.31; # aggiungi intestazioni 'spam rilevato' a quel livello $sa_kill_level_deflt = 6.31; # attiva azioni evasive per spam $sa_dsn_cutoff_level = 10; # livello di spam oltre il quale non viene inviato un DSN [...] $final_virus_destiny = D_DISCARD; # (dati non persi, vedere quarantena virus) $final_banned_destiny = D_BOUNCE; # D_REJECT quando MTA front-end $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Prone ai falsi positivi (per spam) [...] |
Infine, modifica /etc/amavis/conf.d/50-user e aggiungi la riga $pax=’pax’; nel mezzo:
vi /etc/amavis/conf.d/50-user| use strict; # # Inserisci qui le tue direttive di configurazione. Esse sovrascriveranno quelle nei # file precedenti. # # Vedi /usr/share/doc/amavisd-new/ per documentazione ed esempi delle # direttive che puoi utilizzare in questo file # $pax='pax'; #------------ Non modificare nulla sotto questa linea ------------- 1; # assicurati di avere un ritorno definito |
Successivamente, esegui questi comandi per aggiungere l’utente clamav al gruppo amavis e riavviare amavisd-new e ClamAV:
adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-freshclam restart
/etc/init.d/clamav-daemon restartOra dobbiamo configurare Postfix per inviare le email in arrivo tramite amavisd-new:
postconf -e 'content_filter = amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options = no_address_mappings'Successivamente, aggiungi le seguenti righe a /etc/postfix/master.cf:
vi /etc/postfix/master.cf| [...] amavis unix - - - - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes 127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks |
Poi riavvia Postfix:
/etc/init.d/postfix restartOra esegui
netstat -tape dovresti vedere Postfix (master) in ascolto sulla porta 25 (smtp) e 10025, e amavisd-new sulla porta 10024:
root@server1:/etc/courier# netstat -tap
Connessioni Internet attive (server ed stabilite)
Proto Recv-Q Send-Q Indirizzo Locale Indirizzo Straniero Stato PID/Nome programma
tcp 0 0 *:http *:* LISTEN 6134/apache2
tcp 0 0 *:ssh *:* LISTEN 610/sshd
tcp 0 0 *:smtp *:* LISTEN 23128/master
tcp 0 0 localhost.localdo:10024 *:* LISTEN 21937/amavisd-new (
tcp 0 0 localhost.localdo:10025 *:* LISTEN 23128/master
tcp 0 0 localhost.localdo:mysql *:* LISTEN 4308/mysqld
tcp 0 52 server1.example.com:ssh 192.168.0.206:57597 ESTABLISHED 976/0
tcp6 0 0 [::]:ssh [::]:* LISTEN 610/sshd
tcp6 0 0 [::]:smtp [::]:* LISTEN 23128/master
tcp6 0 0 [::]:imaps [::]:* LISTEN 18191/couriertcpd
tcp6 0 0 [::]:pop3s [::]:* LISTEN 18259/couriertcpd
tcp6 0 0 [::]:pop3 [::]:* LISTEN 18222/couriertcpd
tcp6 0 0 [::]:imap2 [::]:* LISTEN 18154/couriertcpd
root@server1:/etc/courier# 10 Installa Razor, Pyzor E DCC E Configura SpamAssassin
Razor, Pyzor e DCC sono filtri spam che utilizzano una rete di filtraggio collaborativa. Per installare Razor e Pyzor, esegui
apt-get install razor pyzorDCC non è disponibile nei repository di Ubuntu 13.10, quindi lo installiamo come segue:
cd /tmp
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z
tar xzvf dcc-dccproc.tar.Z
cd dcc-dccproc-1.3.1.154
./configure --with-uid=amavis
make
make install
chown -R amavis:amavis /var/dcc
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifdOra dobbiamo dire a SpamAssassin di utilizzare questi tre programmi. Modifica /etc/spamassassin/local.cf e aggiungi le seguenti righe:
vi /etc/spamassassin/local.cf| [...] #dcc use_dcc 1 dcc_path /usr/local/bin/dccproc #pyzor use_pyzor 1 pyzor_path /usr/bin/pyzor #razor use_razor2 1 razor_config /etc/razor/razor-agent.conf #bayes use_bayes 1 use_bayes_rules 1 bayes_auto_learn 1 |
Poi dobbiamo abilitare il plugin DCC in SpamAssassin. Apri /etc/spamassassin/v310.pre e decommenta la riga loadplugin Mail::SpamAssassin::Plugin::DCC:
vi /etc/spamassassin/v310.pre| [...] # DCC - eseguire controlli DCC sui messaggi. # # DCC è disabilitato qui perché non è open source. Vedi la licenza DCC per ulteriori dettagli. # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |
Puoi controllare la tua configurazione di SpamAssassin eseguendo:
spamassassin --lintNon dovrebbe mostrare errori.
Riavvia amavisd-new successivamente:
/etc/init.d/amavis restartOra aggiorniamo i nostri set di regole di SpamAssassin come segue:
sa-update --no-gpgCreiamo un lavoro cron in modo che i set di regole vengano aggiornati regolarmente. Esegui
crontab -eper aprire l’editor dei lavori cron. Crea il seguente lavoro cron:
| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.