Serveur de messagerie · 3 min read · Oct 06, 2025

Solution complète de serveur de messagerie avec domaines et utilisateurs virtuels (Debian Etch, Postfix, Mysql, Dovecot, DSpam, ClamAV, Postgrey, RBL) - Page 4

B. Configuration de Postfix pour les utilisateurs et domaines virtuels

Bien que les échangeurs de courrier ne livreront pas de courrier aux utilisateurs et domaines virtuels, ils rejetteront en fonction des destinations valides/invalide. Nous avons donc besoin que les serveurs mx puissent se connecter au serveur SQL pour vérifier les destinations. Allez-y et mettez les informations dans 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'utilisateur que vous essayez d'atteindre a dépassé son quota."
# postconf -e 'virtual_overquota_bounce = yes'
# postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql_virtual_transports.cf'

Il y a plusieurs ‘pièges’ ici. Cette configuration hébergera les boîtes aux lettres des utilisateurs virtuels dans /vmail. Si vous devez stocker vos boîtes aux lettres dans un autre emplacement, modifiez la ligne virtual_mailbox_base en conséquence.

Le virtual_minimum_uid et virtual_uid_maps pointent vers l’identifiant utilisateur 150. Cet identifiant utilisateur est pour un utilisateur “Mail Virtuel” créé spécifiquement. Il utilise le groupe standard “mail”, avec le gid par défaut (Debian) de 8. Vous pouvez créer l’utilisateur et le répertoire comme ceci:

# useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Boîte aux lettres virtuelle" vmail
# mkdir /var/vmail
# chmod 770 /var/vmail/
# chown vmail:mail /var/vmail/

Maintenant, nous devons installer les outils client NFS:

# apt-get install nfs-common portmap

Le répertoire doit ensuite être monté sur le partage NFS. Pour faire un test simple, exécutez ce qui suit:

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

Vous devriez maintenant avoir accès au partage /vmail depuis files-1. Essayez d’écrire un fichier (Cela ne devrait pas fonctionner !):

# cd /vmail
# touch tmp

NOTE: Vous devriez obtenir une erreur de lecture seule !

En supposant que tout fonctionne, allez-y et démontez le NFS:

# cd /
umount /vmail

Et ensuite, rendez le montage permanent en mettant ce qui suit dans votre /etc/fstab:

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

Allez-y et montez le système de fichiers une dernière fois:

# mount /vmail

… et vous êtes prêt à partir !

C. Configuration MySQL de Postfix

Postfix a été installé avec le support MySQL, mais cela ne signifie pas qu’il sait déjà comment utiliser notre base de données. Il doit être fourni avec diverses informations de requête SQL pour chaque type de table dans notre base de données. Ces informations sont stockées dans les fichiers MySQL définis dans le fichier main.cf. Notez que dans les fichiers suivants, la dernière ligne contient un seul commentaire (précédé par #) avec la requête complète. Les versions récentes de Postfix peuvent utiliser cela au lieu des autres déclarations. Si vous utilisez une version plus récente, commentez simplement toutes les autres lignes et décommentez la déclaration de requête.

/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

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.