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 su

per 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 dash

Usare 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-utils

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 libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

Ti 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 postfix
cd /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_version

L’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.patch

Successivamente 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-buildpackage

Ora andiamo in una directory sopra, dove sono stati creati i nuovi pacchetti .deb:

cd ..

Il comando

ls -l

mostra 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.gz

Seleziona 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.deb

4 Crea Il Database MySQL Per Postfix/Courier

Ora creiamo un database chiamato mail:

mysqladmin -u root -p create mail

Ti verrà chiesto di rispondere a questa domanda:

Inserisci Password: <– yourrootsqlpassword

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 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].

sourcedestination
[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).

emailpasswordquota
[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,

domaintransport
example.comsmtp:[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 restart

Esegui

netstat -tap | grep mysql

per 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_*.cf

Ora 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 -m

Successivamente 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 -x509

Nome 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.key

6 Configura Saslauthd

Prima esegui

mkdir -p /var/spool/postfix/var/run/saslauthd

Poi 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 sasl

Poi riavvia Postfix e Saslauthd:

/etc/init.d/postfix restart  
/etc/init.d/saslauthd restart

7 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/authmysqlrc

Poi 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 restart

Eseguendo

telnet localhost pop3

puoi 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

newaliases

dopo e riavviare Postfix:

/etc/init.d/postfix restart

9 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 pax

Successivamente 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_mode

Il 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 restart

Ora 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 restart

Ora esegui

netstat -tap

e 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 pyzor

DCC 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/dccifd

Ora 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 --lint

Non dovrebbe mostrare errori.

Riavvia amavisd-new successivamente:

/etc/init.d/amavis restart

Ora aggiorniamo i nostri set di regole di SpamAssassin come segue:

sa-update --no-gpg

Creiamo un lavoro cron in modo che i set di regole vengano aggiornati regolarmente. Esegui

crontab -e

per aprire l’editor dei lavori cron. Crea il seguente lavoro cron:

| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.