« Mise en place d'un serveur de mail complet » : différence entre les versions
Ligne 42 : | Ligne 42 : | ||
* <code>~all</code> signifie que toutes les autres ips n'ont probablement pas le droit d'envoyer de mails. | * <code>~all</code> signifie que toutes les autres ips n'ont probablement pas le droit d'envoyer de mails. | ||
* <code>-all</code> signifie que toutes les autres ips n'ont pas le droit d'envoyer de mails. | * <code>-all</code> signifie que toutes les autres ips n'ont pas le droit d'envoyer de mails. | ||
=Postfix= | |||
Commençons par installer les différents composants de postfix ainsi que sasl qui nous permettra de gérer le smtp-auth histoire de ne pas laisser notre serveur en open-relay et servir de relai pour le spam. | |||
<pre>aptitude install postfix postfix-mysql libsasl2-2 libsasl2-modules sasl2-bin libpam-mysql procmail</pre> | |||
Debian vous laissera choisir entre plusieurs configurations pour postfix. Choisissez pas de configuration. | |||
Stoppez les services inutiles pour le moment : | |||
<pre> | |||
/etc/init.d/postfix stop | |||
/etc/init.d/saslauthd stop | |||
</pre> | |||
Le fichier de configuration principal de postfix est <code>/etc/postfix/main.cf</code>. Ouvrez le avec votre éditeur de texte et modifiez les lignes suivantes: | |||
<pre> | |||
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) | |||
biff = no | |||
disable_vrfy_command = yes | |||
smtpd_helo_required = yes | |||
#strict_rfc821_envelopes = yes | |||
mydomain = core.csnu.org | |||
# ajoute .$mydomain si quelqu'un envoi un mail sans préciser le domaine (utile en local quand vous utilisez la fonction mail) | |||
append_dot_mydomain = yes | |||
# Uncomment the next line to generate "delayed mail" warnings | |||
#delay_warning_time = 4h | |||
myhostname = core.csnu.org | |||
alias_maps = proxy:hash:/etc/aliases | |||
alias_database = hash:/etc/aliases | |||
myorigin = /etc/mailname | |||
mydestination = core.csnu.org, localhost.localdomain, localhost | |||
relayhost = | |||
mynetworks = 127.0.0.0/8, [::1]/128, 213.186.47.110, [2001:41d0:1:d6e::110] | |||
mailbox_command = procmail -a "$EXTENSION" | |||
mailbox_size_limit = 0 | |||
recipient_delimiter = + | |||
message_size_limit = 10240000 | |||
inet_interfaces = 127.0.0.1, [::1], 213.186.47.110, [2001:41d0:1:d6e::110] | |||
inet_protocols = ipv4, ipv6 | |||
#ips à binder pour envoyer des mails via smtp | |||
#smtp_bind_address=213.186.47.110 | |||
#smtp_bind_address6=2001:41d0:1:d6e::110 | |||
</pre> | |||
Nous venons de définir la directive <code>myorigin</code> de postfix comme étant le fichier <code>/etc/mailname</code>. Cette directive défini de qui provient les mails envoyés par les utilisateurs locaux. Dans notre cas, les mails doivent provenir du domaine de notre machine, à savoir, core.csnu.org. Tapez donc : | |||
<pre> | |||
echo "core.csnu.org" > /etc/mailname | |||
chmod o+r /etc/mailname | |||
</pre> | |||
Une autre directive importante que nous avons défini est <code>mydestination</code>. Cette directive défini quels domaines postfix doit considérer comme locaux. Lorsque postfix reçoit un mail pour l'un de ces domaines, il les délivre dans la boite locale correspondante. | |||
Techniquement, postfix est maintenant déjà près à recevoir des mails destinés à @core.csnu.org. Il reste donc à configurer le domaine virtuel et à ne pas relayer les spams. | |||
==Configuration de postfix pour le support MySQL des domaines virtuels== | |||
Créez une base de donné nommée postfix: | |||
<pre>mysqladmin -u root --password='motdepasse' create postfix</pre> | |||
motdepasse correspond au mot-de-passe MySQL de l'utilisateur root | |||
Ensuite, créez l'utilisateur postfix ayant pour mot-de-passe 'password' et attribuez lui les droits sur la base de donné postfix : | |||
<pre> | |||
$ mysql -u root -p | |||
Enter password: | |||
GRANT ALL PRIVILEGES ON postfix.* TO "postfix"@"localhost" IDENTIFIED BY 'password'; | |||
quit; | |||
</pre> | |||
Puis créez les tables dans la base de donné postfix : | |||
<pre><nowiki> | |||
# mysql -u root -p | |||
Enter password: | |||
USE postfix; | |||
CREATE TABLE `alias` ( | |||
`address` varchar(255) NOT NULL default '', | |||
`goto` text NOT NULL, | |||
`domain` varchar(255) NOT NULL default '', | |||
`created` datetime NOT NULL default '0000-00-00 00:00:00', | |||
`modified` datetime NOT NULL default '0000-00-00 00:00:00', | |||
`active` tinyint(1) NOT NULL default '1', | |||
PRIMARY KEY (address) | |||
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; | |||
USE postfix; | |||
CREATE TABLE `domain` ( | |||
`domain` varchar(255) NOT NULL default '', | |||
`description` varchar(255) NOT NULL default '', | |||
`aliases` int(10) NOT NULL default '0', | |||
`mailboxes` int(10) NOT NULL default '0', | |||
`maxquota` int(10) NOT NULL default '0', | |||
`transport` varchar(255) default NULL, | |||
`backupmx` tinyint(1) NOT NULL default '0', | |||
`created` datetime NOT NULL default '0000-00-00 00:00:00', | |||
`modified` datetime NOT NULL default '0000-00-00 00:00:00', | |||
`active` tinyint(1) NOT NULL default '1', | |||
PRIMARY KEY (domain) | |||
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; | |||
USE postfix; | |||
CREATE TABLE `mailbox` ( | |||
`username` varchar(255) NOT NULL default '', | |||
`password` varchar(255) NOT NULL default '', | |||
`name` varchar(255) NOT NULL default '', | |||
`maildir` varchar(255) NOT NULL default '', | |||
`quota` int(10) NOT NULL default '0', | |||
`domain` varchar(255) NOT NULL default '', | |||
`created` datetime NOT NULL default '0000-00-00 00:00:00', | |||
`modified` datetime NOT NULL default '0000-00-00 00:00:00', | |||
`active` tinyint(1) NOT NULL default '1', | |||
PRIMARY KEY (`username`) | |||
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes'; | |||
quit; | |||
</nowiki></pre> | |||
Nous avons donc créé 3 tables : | |||
* <code>alias</code> qui contiendra les alias, c'est-à-dire, les redirections de mails. | |||
* <code>domain</code> qui contiendra les domaines virtuels gérés par postfix. | |||
* <code>mailbox</code> qui contiendra les boites mails virtuels. | |||
Maintenant, nous allons créer l'utilisateur <code>vmail</code> et son groupe <code>vmail</code>. C'est cet utilisateur qui centralisera les boites mails virtuels. | |||
Dans ce exemple, le répertoire personnel de cet utilisateur est <code>/srv/vmail</code>. C'est dans ce répertoire que les comptes mails seront stockés. | |||
<pre> | |||
groupadd -g 5000 vmail | |||
useradd -g vmail -u 5000 vmail -d /srv/vmail -m | |||
</pre> | |||
Éditez encore une fois le fichier <code>/etc/postfix/main.cf</code> et ajoutez y les lignes suivantes : | |||
<pre> | |||
#mysql | |||
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf | |||
virtual_gid_maps = static:5000 | |||
virtual_mailbox_base = /srv/vmail | |||
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf | |||
virtual_mailbox_limit = 51200000 | |||
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf | |||
virtual_minimum_uid = 5000 | |||
virtual_transport = virtual | |||
virtual_uid_maps = static:5000 | |||
# Support du quota (il n'est pas compilé sur le postfix de debian). | |||
virtual_create_maildirsize = yes | |||
virtual_mailbox_extended = yes | |||
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf | |||
virtual_mailbox_limit_override = yes | |||
virtual_maildir_limit_message = The user you are trying to reach is over quota. Please, try again later. | |||
virtual_overquota_bounce = yes | |||
#Pour les domaines à relayer: | |||
#relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf | |||
</pre> | |||
Petite explication pour, par exemple, la ligne <code>virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf</code> : | |||
* mysql: spécifie que le fichier qui suit est la configuration pour accéder à la base MySQL des alias virtuels. | |||
* proxy: spécifie qu'il faudra lire le fichier en utilisant le mécanisme proxy de postfix. En effet, par défaut, pour des raisons de sécurité, postfix est chrooté et ne pourra donc pas avoir accès aux fichiers de configurations MySQL une fois lancé. Pour palier à ce problème, postfix inclut un démon "proxy" qui ne sera pas chrooté et qui pourra donc lire les fichiers nécessaires. | |||
Plus généralement : | |||
* <code>virtual_alias_maps</code> défini les alias virtuels | |||
* <code>virtual_mailbox_base</code> défini le répertoire où seront stockés les boites mails. C'est typiquement le homedir de l'utilisateur défini par <code>virtual_uid_maps</code>. | |||
* <code>virtual_mailbox_domains</code> défini les domaines pour lesquels postfix sera la destination finale. L'agent utilisé pour délivrer les mails sera celui de <code>virtual_transport</code>. | |||
* <code>virtual_mailbox_maps</code> défini les utilisateurs virtuels. | |||
* <code>virtual_transport</code> défini avec quel logiciel postfix doit délivrer les mails. Par défaut, c'est le démon virtual inclut avec postfix qui s'en charge | |||
Il va maintenant falloir créer les différents fichiers de configuration pour MySQL. | |||
Créez le fichier <code>/etc/postfix/mysql_virtual_alias_maps.cf</code> contenant: | |||
<pre> | |||
user = postfix | |||
password = password | |||
hosts = localhost | |||
dbname = postfix | |||
query = SELECT goto FROM alias WHERE address='%s' AND active = 1 | |||
</pre> | |||
Créez le fichier <code>/etc/postfix/mysql_virtual_domains_maps.cf</code> contenant: | |||
<pre> | |||
user = postfix | |||
password = password | |||
hosts = localhost | |||
dbname = postfix | |||
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1' | |||
</pre> | |||
Créez le fichier <code>/etc/postfix/mysql_virtual_mailbox_maps.cf</code> contenant: | |||
<pre> | |||
user = postfix | |||
password = password | |||
hosts = localhost | |||
dbname = postfix | |||
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1 | |||
</pre> | |||
Créez le fichier <code>/etc/postfix/mysql_virtual_mailbox_limit_maps.cf</code> contenant: | |||
<pre> | |||
user = postfix | |||
password = password | |||
hosts = localhost | |||
dbname = postfix | |||
query = SELECT quota FROM mailbox WHERE username='%s' | |||
</pre> | |||
Créez le fichier <code>/etc/postfix/mysql_relay_domains_maps.cf</code> contenant: | |||
<pre> | |||
user = postfix | |||
password = password | |||
hosts = localhost | |||
dbname = postfix | |||
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' and active = '1' | |||
</pre> | |||
Soyez très attentif à la ligne <code>hosts</code> de chacun de ces fichiers. Comme je l'ai déjà dit, étant donné que postfix est chrooté, on passe par le proxy postfix qui permet à postfix de se servir directement du fichier socket de MySQL pour accéder aux bases. Dans ce cas, il faut laisser <code>hosts = localhost</code>. Une autre méthode serait de ne pas utiliser le système proxy, mais d'entrer 127.0.0.1 en tant qu'host. Dans ce cas, il faudra veiller à ce que mysql n'ait pas l'option skip-networking d'activée. | |||
Dernière chose à faire ici : il faut utiliser postmap sur chacun des fichiers afin de les transformer en table que postfix affectionne : | |||
<pre> | |||
cd /etc/postfix | |||
postmap mysql_virtual_alias_maps.cf | |||
postmap mysql_virtual_domains_maps.cf | |||
postmap mysql_virtual_mailbox_maps.cf | |||
postmap mysql_virtual_mailbox_limit_maps.cf | |||
postmap mysql_relay_domains_maps.cf | |||
</pre> | |||
Cette opération est à recommencer après chaque modification de l'un de ces fichiers. | |||
Pour finir, modifiez les permissions étant donné que les mot-de-passes mysql sont stockés en clair. | |||
Veilliez bien à conserver le fichier main.cf accessible à tous le monde étant donné que sendmail a besoin d'y accéder pour envoyer des mails. | |||
<pre> | |||
chown root:postfix /etc/postfix/* | |||
chmod 640 /etc/postfix/* | |||
chmod o+r /etc/postfix/main.cf | |||
chmod +x /etc/postfix/postfix-script | |||
</pre> |
Version du 4 février 2011 à 18:31
Ce tutoriel va vous expliquer comment mettre en place un serveur mail complet pour plusieurs domaines et supportant l'ipv6 sous debian lenny. Les éléments suivants seront utilisés :
- un serveur smtp : postfix
- un mail delivery agent (mda) : maildrop
- un serveur pop/imap : courier
- un scanneur de contenu : amavis
- un antispam : spamassassin
- un antivirus : ClamAV
- un gestionnaire de mailing list : mailman
- des webmails : Squirrelmail et roundcube
Afin de gérer facilement les domaines, certains services seront couplés avec MySQL. Pour ceux qui veulent bénéficier du filtrage pour les boites imaps, je vous montrerais aussi comment coupler postfix avec maildrop. En dernier lieu, nous verront rapidement comment configurer un serveur mx secondaire pour vos domaines.
Nous allons mettre en place un service email pour deux domaines : core.csnu.org et csnu.org core.csnu.org représente le serveur en lui-même, et permet de délivrer les mails aux utilisateurs locaux du serveur. csnu.org est ce qu'on appel un domaine virtuel. Nous gèrerons les mails de ce domaine via MySQL.
Au niveau dns, core.csnu.org est le domaine identifiant la machine. Il possède l'adresse ipv4 213.186.47.110 et l'adresse ipv6 2001:41d0:1:d6e::110. csnu.org est un alias pour core.csnu.org.
Les changements de permissions effectués dans ce howto supposent que vous êtes en umask 0027
Champs dns MX
Pour que les mails a destination de vos deux domaines arrivent bien sur votre serveur, il faut configurer des champs dns MX. Pour cela, éditez la zone dns de votre domaine (/srv/bind/csnu.org.hosts
dans mon cas) et ajoutez/modifiez les lignes suivantes:
core.csnu.org. IN MX 1 core.csnu.org. csnu.org. IN MX 1 core.csnu.org. core.csnu.org. IN A 213.186.47.110 core.csnu.org. IN AAAA 2001:41d0:1:d6e::110 list.csnu.org. IN CNAME core.csnu.org.
Si vous n'avez pas d'adresse ipv6 configuré sur votre serveur, vous n'aurez pas besoin du champ AAAA
.
Vous pouvez aussi configurer un champ spf. Le spf (Sender Policy Framework) est une mesure antispam permettant aux autres serveurs de savoir quels serveurs ont le droit d'envoyer des mails pour votre domaine. Voici mes champs dns spf :
core.csnu.org. IN TXT "v=spf1 mx -all" csnu.org. IN TXT "v=spf1 mx ~all"
mx
signifie que seules les serveurs mx ont le droit d'envoyer des mails pour le domaine en question.~all
signifie que toutes les autres ips n'ont probablement pas le droit d'envoyer de mails.-all
signifie que toutes les autres ips n'ont pas le droit d'envoyer de mails.
Postfix
Commençons par installer les différents composants de postfix ainsi que sasl qui nous permettra de gérer le smtp-auth histoire de ne pas laisser notre serveur en open-relay et servir de relai pour le spam.
aptitude install postfix postfix-mysql libsasl2-2 libsasl2-modules sasl2-bin libpam-mysql procmail
Debian vous laissera choisir entre plusieurs configurations pour postfix. Choisissez pas de configuration.
Stoppez les services inutiles pour le moment :
/etc/init.d/postfix stop /etc/init.d/saslauthd stop
Le fichier de configuration principal de postfix est /etc/postfix/main.cf
. Ouvrez le avec votre éditeur de texte et modifiez les lignes suivantes:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no disable_vrfy_command = yes smtpd_helo_required = yes #strict_rfc821_envelopes = yes mydomain = core.csnu.org # ajoute .$mydomain si quelqu'un envoi un mail sans préciser le domaine (utile en local quand vous utilisez la fonction mail) append_dot_mydomain = yes # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h myhostname = core.csnu.org alias_maps = proxy:hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = core.csnu.org, localhost.localdomain, localhost relayhost = mynetworks = 127.0.0.0/8, [::1]/128, 213.186.47.110, [2001:41d0:1:d6e::110] mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + message_size_limit = 10240000 inet_interfaces = 127.0.0.1, [::1], 213.186.47.110, [2001:41d0:1:d6e::110] inet_protocols = ipv4, ipv6 #ips à binder pour envoyer des mails via smtp #smtp_bind_address=213.186.47.110 #smtp_bind_address6=2001:41d0:1:d6e::110
Nous venons de définir la directive myorigin
de postfix comme étant le fichier /etc/mailname
. Cette directive défini de qui provient les mails envoyés par les utilisateurs locaux. Dans notre cas, les mails doivent provenir du domaine de notre machine, à savoir, core.csnu.org. Tapez donc :
echo "core.csnu.org" > /etc/mailname chmod o+r /etc/mailname
Une autre directive importante que nous avons défini est mydestination
. Cette directive défini quels domaines postfix doit considérer comme locaux. Lorsque postfix reçoit un mail pour l'un de ces domaines, il les délivre dans la boite locale correspondante.
Techniquement, postfix est maintenant déjà près à recevoir des mails destinés à @core.csnu.org. Il reste donc à configurer le domaine virtuel et à ne pas relayer les spams.
Configuration de postfix pour le support MySQL des domaines virtuels
Créez une base de donné nommée postfix:
mysqladmin -u root --password='motdepasse' create postfix
motdepasse correspond au mot-de-passe MySQL de l'utilisateur root
Ensuite, créez l'utilisateur postfix ayant pour mot-de-passe 'password' et attribuez lui les droits sur la base de donné postfix :
$ mysql -u root -p Enter password: GRANT ALL PRIVILEGES ON postfix.* TO "postfix"@"localhost" IDENTIFIED BY 'password'; quit;
Puis créez les tables dans la base de donné postfix :
# mysql -u root -p Enter password: USE postfix; CREATE TABLE `alias` ( `address` varchar(255) NOT NULL default '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (address) ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; USE postfix; CREATE TABLE `domain` ( `domain` varchar(255) NOT NULL default '', `description` varchar(255) NOT NULL default '', `aliases` int(10) NOT NULL default '0', `mailboxes` int(10) NOT NULL default '0', `maxquota` int(10) NOT NULL default '0', `transport` varchar(255) default NULL, `backupmx` tinyint(1) NOT NULL default '0', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (domain) ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; USE postfix; CREATE TABLE `mailbox` ( `username` varchar(255) NOT NULL default '', `password` varchar(255) NOT NULL default '', `name` varchar(255) NOT NULL default '', `maildir` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) ) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes'; quit;
Nous avons donc créé 3 tables :
alias
qui contiendra les alias, c'est-à-dire, les redirections de mails.domain
qui contiendra les domaines virtuels gérés par postfix.mailbox
qui contiendra les boites mails virtuels.
Maintenant, nous allons créer l'utilisateur vmail
et son groupe vmail
. C'est cet utilisateur qui centralisera les boites mails virtuels.
Dans ce exemple, le répertoire personnel de cet utilisateur est /srv/vmail
. C'est dans ce répertoire que les comptes mails seront stockés.
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /srv/vmail -m
Éditez encore une fois le fichier /etc/postfix/main.cf
et ajoutez y les lignes suivantes :
#mysql virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_gid_maps = static:5000 virtual_mailbox_base = /srv/vmail virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_limit = 51200000 virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 5000 virtual_transport = virtual virtual_uid_maps = static:5000 # Support du quota (il n'est pas compilé sur le postfix de debian). virtual_create_maildirsize = yes virtual_mailbox_extended = yes virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf virtual_mailbox_limit_override = yes virtual_maildir_limit_message = The user you are trying to reach is over quota. Please, try again later. virtual_overquota_bounce = yes #Pour les domaines à relayer: #relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf
Petite explication pour, par exemple, la ligne virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
:
- mysql: spécifie que le fichier qui suit est la configuration pour accéder à la base MySQL des alias virtuels.
- proxy: spécifie qu'il faudra lire le fichier en utilisant le mécanisme proxy de postfix. En effet, par défaut, pour des raisons de sécurité, postfix est chrooté et ne pourra donc pas avoir accès aux fichiers de configurations MySQL une fois lancé. Pour palier à ce problème, postfix inclut un démon "proxy" qui ne sera pas chrooté et qui pourra donc lire les fichiers nécessaires.
Plus généralement :
virtual_alias_maps
défini les alias virtuelsvirtual_mailbox_base
défini le répertoire où seront stockés les boites mails. C'est typiquement le homedir de l'utilisateur défini parvirtual_uid_maps
.virtual_mailbox_domains
défini les domaines pour lesquels postfix sera la destination finale. L'agent utilisé pour délivrer les mails sera celui devirtual_transport
.virtual_mailbox_maps
défini les utilisateurs virtuels.virtual_transport
défini avec quel logiciel postfix doit délivrer les mails. Par défaut, c'est le démon virtual inclut avec postfix qui s'en charge
Il va maintenant falloir créer les différents fichiers de configuration pour MySQL.
Créez le fichier /etc/postfix/mysql_virtual_alias_maps.cf
contenant:
user = postfix password = password hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
Créez le fichier /etc/postfix/mysql_virtual_domains_maps.cf
contenant:
user = postfix password = password hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1'
Créez le fichier /etc/postfix/mysql_virtual_mailbox_maps.cf
contenant:
user = postfix password = password hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
Créez le fichier /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
contenant:
user = postfix password = password hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s'
Créez le fichier /etc/postfix/mysql_relay_domains_maps.cf
contenant:
user = postfix password = password hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' and active = '1'
Soyez très attentif à la ligne hosts
de chacun de ces fichiers. Comme je l'ai déjà dit, étant donné que postfix est chrooté, on passe par le proxy postfix qui permet à postfix de se servir directement du fichier socket de MySQL pour accéder aux bases. Dans ce cas, il faut laisser hosts = localhost
. Une autre méthode serait de ne pas utiliser le système proxy, mais d'entrer 127.0.0.1 en tant qu'host. Dans ce cas, il faudra veiller à ce que mysql n'ait pas l'option skip-networking d'activée.
Dernière chose à faire ici : il faut utiliser postmap sur chacun des fichiers afin de les transformer en table que postfix affectionne :
cd /etc/postfix postmap mysql_virtual_alias_maps.cf postmap mysql_virtual_domains_maps.cf postmap mysql_virtual_mailbox_maps.cf postmap mysql_virtual_mailbox_limit_maps.cf postmap mysql_relay_domains_maps.cf
Cette opération est à recommencer après chaque modification de l'un de ces fichiers.
Pour finir, modifiez les permissions étant donné que les mot-de-passes mysql sont stockés en clair. Veilliez bien à conserver le fichier main.cf accessible à tous le monde étant donné que sendmail a besoin d'y accéder pour envoyer des mails.
chown root:postfix /etc/postfix/* chmod 640 /etc/postfix/* chmod o+r /etc/postfix/main.cf chmod +x /etc/postfix/postfix-script