Postfix Configuration · 7 min read · Sep 28, 2025

Utenti e domini virtuali con Postfix, Courier, MySQL e SquirrelMail (Debian Lenny) - Pagina 2

5 Configurare 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 usare localhost. Se uso 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

| [...] 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):

server1:/usr/src# netstat -tap | grep mysql  
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      4559/mysqld  
server1:/usr/src#

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 'message_size_limit = 30720000'  
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_create_maildirsize = yes'  
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 il limite di 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 di 2 lettere) [AU]: <– Inserisci il nome del tuo Paese (ad es., “IT”).
Nome dello Stato o della Provincia (nome completo) [Some-State]: <– Inserisci il nome del tuo Stato o Provincia.
Nome della Località (es. città) []: <– Inserisci la tua città.
Nome dell’Organizzazione (es. azienda) [Internet Widgits Pty Ltd]: <– Inserisci il nome della tua organizzazione (ad es., il nome della tua azienda).
Nome dell’Unità Organizzativa (es. sezione) []: <– Inserisci il nome della tua unità organizzativa (es. “Reparto IT”).
Nome Comune (es. IL TUO nome) []: <– Inserisci il nome di dominio completamente qualificato 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 Configurare 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 avviarsi 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 gli utenti di postfix: "-c -m /var/spool/postfix/var/run/saslauthd" #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: 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' |

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 Configurare 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 sta funzionando correttamente. Dovrebbe restituire +OK Hello there. (Digita quit per tornare alla shell di Linux.)

server1:/etc/courier# telnet localhost pop3  
Trying 127.0.0.1...  
Connected to localhost.  
Escape character is '^]'.  
+OK Hello there.  
quit  
+OK Better luck next time.  
Connection closed by foreign host.  
server1:/etc/courier#

8 Modificare /etc/aliases

Ora dovremmo aprire /etc/aliases. Assicurati che il 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
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.