Configuration Postfix · 8 min read · Sep 28, 2025
Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Debian Lenny) - Page 2
5 Configurer Postfix
Maintenant, nous devons dire à Postfix où il peut trouver toutes les informations dans la base de données. Par conséquent, nous devons créer six fichiers texte. Vous remarquerez que je dis à Postfix de se connecter à MySQL à l’adresse IP 127.0.0.1 au lieu de localhost. C’est parce que Postfix s’exécute dans un chroot jail et n’a pas accès au socket MySQL auquel il essaierait de se connecter si je disais à Postfix d’utiliser localhost. Si j’utilise 127.0.0.1, Postfix utilise le réseau TCP pour se connecter à MySQL, ce qui ne pose aucun problème même dans un chroot jail (l’alternative serait de déplacer le socket MySQL dans le chroot jail, ce qui entraîne d’autres problèmes).
Veuillez vous assurer que /etc/mysql/my.cnf contient la ligne suivante :
vi /etc/mysql/my.cnf| [...] bind-address = 127.0.0.1 [...] |
Si vous avez dû modifier /etc/mysql/my.cnf, veuillez redémarrer MySQL maintenant :
/etc/init.d/mysql restartExécutez
netstat -tap | grep mysqlpour vous assurer que MySQL écoute sur 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#Maintenant, créons nos six fichiers texte.
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 |
Ensuite, changez les permissions et le groupe de ces fichiers :
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cfMaintenant, nous créons un utilisateur et un groupe appelés vmail avec le répertoire personnel /home/vmail. C’est là que toutes les boîtes aux lettres seront stockées.
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -mEnsuite, nous faisons quelques configurations de Postfix. Assurez-vous de remplacer server1.example.com par un FQDN valide, sinon votre Postfix pourrait ne pas fonctionner correctement !
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'utilisateur que vous essayez d'atteindre est en dépassement de 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'Ensuite, nous créons le certificat SSL nécessaire pour TLS :
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509Nom du pays (code à 2 lettres) [AU]: <– Entrez le nom de votre pays (par exemple, “DE”).
Nom de l’État ou de la province (nom complet) [Some-State]: <– Entrez le nom de votre État ou province.
Nom de la localité (par exemple, ville) []: <– Entrez votre ville.
Nom de l’organisation (par exemple, entreprise) [Internet Widgits Pty Ltd]: <– Entrez le nom de votre organisation (par exemple, le nom de votre entreprise).
Nom de l’unité organisationnelle (par exemple, section) []: <– Entrez le nom de votre unité organisationnelle (par exemple, “Département IT”).
Nom commun (par exemple, VOTRE nom) []: <– Entrez le nom de domaine entièrement qualifié du système (par exemple, “server1.example.com”).
Adresse e-mail []: <– Entrez votre adresse e-mail.
Ensuite, changez les permissions de smtpd.key :
chmod o= /etc/postfix/smtpd.key6 Configurer Saslauthd
Tout d’abord, exécutez
mkdir -p /var/spool/postfix/var/run/saslauthdEnsuite, éditez /etc/default/saslauthd. Mettez START sur yes et changez la ligne OPTIONS=”-c -m /var/run/saslauthd” en OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r” :
vi /etc/default/saslauthd| # # Paramètres pour le démon saslauthd # Veuillez lire /usr/share/doc/sasl2-bin/README.Debian pour plus de détails. # # Le démon saslauthd doit-il s'exécuter automatiquement au démarrage ? (par défaut : non) START=yes # Description de cette instance de saslauthd. Recommandé. # (suggestion : SASL Authentication Daemon) DESC="SASL Authentication Daemon" # Nom court de cette instance de saslauthd. Fortement recommandé. # (suggestion : saslauthd) NAME="saslauthd" # Quels mécanismes d'authentification saslauthd doit-il utiliser ? (par défaut : pam) # # Options disponibles dans ce paquet Debian : # getpwent -- utiliser la fonction de bibliothèque getpwent() # kerberos5 -- utiliser Kerberos 5 # pam -- utiliser PAM # rimap -- utiliser un serveur IMAP distant # shadow -- utiliser le fichier de mot de passe local shadow # sasldb -- utiliser le fichier de base de données sasldb local # ldap -- utiliser LDAP (la configuration est dans /etc/saslauthd.conf) # # Une seule option peut être utilisée à la fois. Voir la page de manuel de saslauthd pour plus d'informations. # # Exemple : MECHANISMS="pam" MECHANISMS="pam" # Options supplémentaires pour ce mécanisme. (par défaut : aucune) # Voir la page de manuel de saslauthd pour des informations sur les options spécifiques au mécanisme. MECH_OPTIONS="" # Combien de processus saslauthd devons-nous exécuter ? (par défaut : 5) # Une valeur de 0 créera un nouveau processus pour chaque connexion. THREADS=5 # Autres options (par défaut : -c -m /var/run/saslauthd) # Remarque : Vous DEVEZ spécifier l'option -m ou saslauthd ne s'exécutera pas ! # # AVERTISSEMENT : NE PAS SPÉCIFIER L'OPTION -d. # L'option -d fera en sorte que saslauthd s'exécute au premier plan au lieu de comme un démon. Cela EMPÊCHERA VOTRE SYSTÈME DE DÉMARRER CORRECTEMENT. Si vous souhaitez exécuter saslauthd en mode débogage, veuillez l'exécuter manuellement pour être en sécurité. # # Voir /usr/share/doc/sasl2-bin/README.Debian pour des informations spécifiques à Debian. # Voir la page de manuel de saslauthd et la sortie de 'saslauthd -h' pour des informations générales sur ces options. # # Exemple pour les utilisateurs de 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" |
Ensuite, créez le fichier /etc/pam.d/smtp. Il doit contenir uniquement les deux lignes suivantes (assurez-vous de remplir vos détails de base de données corrects) :
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 |
Ensuite, créez le fichier /etc/postfix/sasl/smtpd.conf. Il doit ressembler à ceci :
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' |
Ensuite, ajoutez l’utilisateur postfix au groupe sasl (cela garantit que Postfix a la permission d’accéder à saslauthd) :
adduser postfix saslPuis redémarrez Postfix et Saslauthd :
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart7 Configurer Courier
Maintenant, nous devons dire à Courier qu’il doit s’authentifier contre notre base de données MySQL. Tout d’abord, éditez /etc/courier/authdaemonrc et changez la valeur de authmodulelist pour qu’elle se lise :
vi /etc/courier/authdaemonrc| [...] authmodulelist="authmysql" [...] |
Ensuite, faites une sauvegarde de /etc/courier/authmysqlrc et videz l’ancien fichier :
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrcEnsuite, ouvrez /etc/courier/authmysqlrc et mettez les lignes suivantes dedans :
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 |
Lors de l’installation, les certificats SSL pour IMAP-SSL et POP3-SSL sont créés avec le nom d’hôte localhost. Pour changer cela en le nom d’hôte correct (server1.example.com dans ce tutoriel), supprimez les certificats…
cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem… et modifiez les deux fichiers suivants ; remplacez CN=localhost par CN=server1.example.com (vous pouvez également modifier les autres valeurs, si nécessaire) :
vi /etc/courier/imapd.cnf| [...] CN=server1.example.com [...] |
vi /etc/courier/pop3d.cnf| [...] CN=server1.example.com [...] |
Ensuite, recréez les certificats…
mkimapdcert
mkpop3dcert… et redémarrez 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 restartEn exécutant
telnet localhost pop3vous pouvez voir si votre serveur POP3 fonctionne correctement. Il devrait renvoyer +OK Hello there. (Tapez quit pour revenir à l’invite de commande 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 Modifier /etc/aliases
Maintenant, nous devrions ouvrir /etc/aliases. Assurez-vous que postmaster pointe vers root et root vers votre propre nom d’utilisateur ou votre adresse e-mail, par exemple comme ceci :
vi /etc/aliases| [...] postmaster: root root: [email protected] [...] |
ou comme ceci (si administrator est votre propre nom d’utilisateur) :
| [...] postmaster: root root: administrator [...] |
Chaque fois que vous modifiez /etc/aliases, vous devez exécuter
newaliasesensuite et redémarrer Postfix :
/etc/init.d/postfix restartRecevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.