Postfix Config · 3 min read · Oct 06, 2025

Soluzione Completa per Server di Posta con Domini e Utenti Virtuali (Debian Etch, Postfix, Mysql, Dovecot, DSpam, ClamAV, Postgrey, RBL) - Pagina 4

B. Configurazione di Postfix per Utenti e Domini Virtuali

Anche se i server di posta non consegneranno posta agli utenti e domini virtuali, rifiuteranno le destinazioni valide/non valide. Pertanto, abbiamo bisogno che i server mx possano connettersi al server SQL per verificare le destinazioni. Procedi e inserisci le informazioni in postconf:

# postconf -e 'virtual_alias_domains ='
# postconf -e 'virtual_alias_maps = proxy:mysql:$config_directory/mysql_virtual_alias_maps.cf'
# postconf -e 'virtual_mailbox_domains = proxy:mysql:$config_directory/mysql_virtual_domains_maps.cf'
# postconf -e 'virtual_mailbox_maps = proxy:mysql:$config_directory/mysql_virtual_mailbox_maps.cf'
# postconf -e 'virtual_mailbox_base = /vmail'
# postconf -e 'virtual_minimum_uid = 150'
# postconf -e 'virtual_uid_maps = static:150'
# postconf -e 'virtual_gid_maps = static:8'
# postconf -e 'virtual_create_maildirsize = yes'
# postconf -e 'virtual_mailbox_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 propria quota."
# postconf -e 'virtual_overquota_bounce = yes'
# postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql_virtual_transports.cf'

Ci sono diversi ‘problemi’ qui. Questa configurazione ospiterà le caselle di posta degli utenti virtuali in /vmail. Se hai bisogno di memorizzare le tue caselle di posta in un’altra posizione, modifica la riga virtual_mailbox_base di conseguenza.

I virtual_minimum_uid e virtual_uid_maps puntano all’ID utente 150. Questo ID utente è per un utente “Virtual Mail” creato specificamente. Utilizza il gruppo standard “mail”, con il gid predefinito (Debian) di 8. Puoi creare l’utente e la directory in questo modo:

# useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Casella di Posta Virtuale" vmail
# mkdir /var/vmail
# chmod 770 /var/vmail/
# chown vmail:mail /var/vmail/

Ora dobbiamo installare gli strumenti client NFS:

# apt-get install nfs-common portmap

La directory deve quindi essere montata sulla condivisione NFS. Per fare un semplice test, esegui il seguente comando:

# mount files-1.internal.example.com:/vmail /vmail

Dovresti ora avere accesso alla condivisione /vmail da files-1. Prova a scrivere un file (non dovrebbe funzionare!):

# cd /vmail
# touch tmp

NOTA: Dovresti ricevere un errore di sola lettura!

Assumendo che tutto funzioni, procedi a smontare l’NFS:

# cd /
umount /vmail

E poi rendi il montaggio permanente inserendo il seguente nel tuo /etc/fstab:

[...]  
files-1.internal.example.com:/vmail /vmail nfs ro,rsize=4096,hard,intr,tcp,noatime,nodev,async 0 0

Procedi a montare il file system un’ultima volta:

# mount /vmail

… e sei a posto!

C. Configurazione MySQL di Postfix

Postfix è stato installato con supporto MySQL, ma ciò non significa che sappia già come utilizzare il nostro database. Deve essere fornito con varie informazioni di query SQL per ogni tipo di tabella nel nostro database. Queste informazioni sono memorizzate nei file MySQL definiti nel file main.cf. Nota che nei seguenti file, l’ultima riga contiene un singolo commento (preceduto da #) con la query completa. Le versioni recenti di Postfix possono utilizzare questo invece delle altre dichiarazioni. Se stai utilizzando una versione più recente, commenta tutte le altre righe e decommenta la dichiarazione della query.

/etc/postfix/mysql_virtual_alias_maps.cf
user = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
/etc/postfix/mysql_virtual_domains_maps.cf
user = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = ‘0? and active = ‘1?
#query = SELECT domain FROM domain WHERE domain=’%s’ AND backupmx = ‘0? AND active = ‘1?
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = ‘1?
#query = SELECT quota FROM mailbox WHERE username=’%s’ AND active = ‘1?
/etc/postfix/mysql_virtual_mailbox_maps.cf
user = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = mailbox
select_field = CONCAT(domain,’/',maildir)
where_field = username
additional_conditions = and active = ‘1?
#query = SELECT CONCAT(domain,’/',maildir) FROM mailbox WHERE username=’%s’ AND active = ‘1?
/etc/postfix/mysql_virtual_transports.cf
user = vmail_user
password = vmail_user_password
hosts = sql-1.internal.example.com
dbname = virtual_mail
table = domain
select_field = transport
where_field = domain
additional_conditions = and active = ‘1?
#query = SELECT transport FROM domain WHERE domain=’%s’ AND active = ‘1?
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.