<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Space2d</id>
	<title>Lea Linux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Space2d"/>
	<link rel="alternate" type="text/html" href="https://lea-linux.org/documentations/Sp%C3%A9cial:Contributions/Space2d"/>
	<updated>2026-04-15T00:00:25Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=15075</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=15075"/>
		<updated>2007-11-25T21:37:29Z</updated>

		<summary type="html">&lt;p&gt;Space2d : Changement domaine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.dequidt.org/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.dequidt.org/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.priv&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.priv &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.priv&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
# le &amp;quot;reject_unknown_sender_domain&amp;quot; verifie que le domaine existe&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain,&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = email&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.priv&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.priv&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.priv -&amp;gt; user1@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.priv -&amp;gt; user1@domain.priv,user1@otherdomain.priv (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.priv -&amp;gt; catchall@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.priv -&amp;gt; @otherdomain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.priv via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.priv ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo domain.priv&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.priv&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.priv&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.priv&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.priv&lt;br /&gt;
/var/spool/vmail/domain.priv/user&lt;br /&gt;
/var/spool/vmail/domain.priv/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.priv/user/cur&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.priv/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.priv&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Si vous utilisez amavisd-new, vous n&#039;avez pas besoin du démon spamd. En effet, amavisd-new est un démon qui appelle directement les fonctions de spamassassin. &lt;br /&gt;
&lt;br /&gt;
SI vous n&#039;utilisez pas amavisd-new, vous pouvez activer le démon spamd. Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Il vous faudra alors choisir un moyen d&#039;intégrer spamd dans l&#039;ensemble. Une telle configuration n&#039;est pas très simple. Nous ne discuterons donc que l&#039;intégration basée sur amavisd-new.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = undef; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 5.0;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)Si vous utilisez amavisd-new, il n&#039;y a pas besoin d&#039;activer spamd, le démon de spamassassin. En effet, amavisd-new appelle directement les fonctions de spamassassin et est lui même un démon.&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=15074</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=15074"/>
		<updated>2007-11-25T21:36:55Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.dequdit.org/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.dequdit.org/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.priv&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.priv &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.priv&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
# le &amp;quot;reject_unknown_sender_domain&amp;quot; verifie que le domaine existe&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain,&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = email&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.priv&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.priv&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.priv -&amp;gt; user1@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.priv -&amp;gt; user1@domain.priv,user1@otherdomain.priv (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.priv -&amp;gt; catchall@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.priv -&amp;gt; @otherdomain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.priv via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.priv ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo domain.priv&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.priv&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.priv&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.priv&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.priv&lt;br /&gt;
/var/spool/vmail/domain.priv/user&lt;br /&gt;
/var/spool/vmail/domain.priv/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.priv/user/cur&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.priv/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.priv&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Si vous utilisez amavisd-new, vous n&#039;avez pas besoin du démon spamd. En effet, amavisd-new est un démon qui appelle directement les fonctions de spamassassin. &lt;br /&gt;
&lt;br /&gt;
SI vous n&#039;utilisez pas amavisd-new, vous pouvez activer le démon spamd. Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Il vous faudra alors choisir un moyen d&#039;intégrer spamd dans l&#039;ensemble. Une telle configuration n&#039;est pas très simple. Nous ne discuterons donc que l&#039;intégration basée sur amavisd-new.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = undef; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 5.0;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)Si vous utilisez amavisd-new, il n&#039;y a pas besoin d&#039;activer spamd, le démon de spamassassin. En effet, amavisd-new appelle directement les fonctions de spamassassin et est lui même un démon.&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=15073</id>
		<title>ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=15073"/>
		<updated>2007-11-25T21:36:35Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Partager ses fichiers]]&lt;br /&gt;
= ProFTPD, MySQL et Quota =&lt;br /&gt;
&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.dequidt.org/howto/proftpd-mysql-quota.html http://www.dequidt.org/howto]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Exemple d&#039;utilisation du support MySQL pour ProFTPD avec gestion des quotas&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de lire d&#039;abord le tutoriel de DuF : [http://lea-linux.org/reseau/partfic/proftpd.html  Introduction à proftpd]&lt;br /&gt;
&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Remarque : Ce document peut aussi convenir à la configuration du support PostGreSQL.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Au début, j&#039;utilisais le serveur ProFTPD avec la configuration d&#039;origine (ou presque), donc sur la base de l&#039;authentification unix. J&#039;ai eu besoin de modifier regulièrement les comptes FTP. Ajouter et supprimer les utlisateurs (compte linux) devient vite lourd. Je me suis donc penché sur le support MySQL de ProFTPD et je vous propose mes explications.&lt;br /&gt;
&lt;br /&gt;
Le fait d&#039;utiliser l&#039;authentification de ProFTPD par base de données vous permet, par exemple, de faire une page php de configuration ou d&#039;administrer facilement vos comptes ftp via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Soit vous installez ProFTPD à partir de package. (Soyez sur que le package va installer le support MySQL)&lt;br /&gt;
* Soit à partir des sources.&lt;br /&gt;
&lt;br /&gt;
=== Sous Debian (apt) ===&lt;br /&gt;
&lt;br /&gt;
Il suffit de taper en tant que &#039;&#039;&#039;root&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#apt-get install proftpd-mysql&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A partir des sources ===&lt;br /&gt;
&lt;br /&gt;
Téléchargez les sources en allant sur le [http://www.proftpd.org site de proftpd] pour obtenir la version la plus récente.&lt;br /&gt;
&lt;br /&gt;
Décompressez-les et lancez la compilation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;tar jxvf proftpd-&#039;&#039;version&#039;&#039;.tar.bz2&amp;lt;br /&amp;gt; cd proftpd-&#039;&#039;version&#039;&#039;&amp;lt;br /&amp;gt; ./configure\&amp;lt;br /&amp;gt; --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql\&amp;lt;br /&amp;gt; --with-includes=/usr/include/mysql\&amp;lt;br /&amp;gt; --with-libraries=/usr/lib&amp;lt;br /&amp;gt; make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et en tant que &#039;&#039;&#039;root&#039;&#039;&#039; : &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== La base de données ===&lt;br /&gt;
&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&lt;br /&gt;
* si vous n&#039;avez jamais modifié les utilisateurs de la base : &amp;lt;code&amp;gt;mysql -u root&amp;lt;/code&amp;gt;&lt;br /&gt;
* sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : proftpd) et les tables qu&#039;elle contient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; CREATE DATABASE `proftpd`;&amp;lt;br /&amp;gt; USE proftpd;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpgroup`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpgroup` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `groupname` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `members` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; KEY `groupname` (`groupname`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des groupes ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotalimits`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotalimits` (&amp;lt;br /&amp;gt; `name` varchar(30) default NULL,&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `par_session` enum(&#039;false&#039;,&#039;true&#039;) NOT NULL default &#039;false&#039;,&amp;lt;br /&amp;gt; `limit_type` enum(&#039;soft&#039;,&#039;hard&#039;) NOT NULL default &#039;soft&#039;,&amp;lt;br /&amp;gt; `bytes_up_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_limit` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotatotal`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotatotal` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `name` varchar(30) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `bytes_up_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_total` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des compteurs des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpuser`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpuser` (&amp;lt;br /&amp;gt; `id` int(10) unsigned NOT NULL auto_increment,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `userid` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `passwd` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `uid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `homedir` varchar(255) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `shell` varchar(16) NOT NULL default &#039;/bin/false&#039;,&amp;lt;br /&amp;gt; `count` int(11) NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `accessed` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `modified` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `LoginAllowed` enum(&#039;true&#039;,&#039;false&#039;) NOT NULL default &#039;true&#039;,&amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des utlisateurs ProFTPD&#039;; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut créer un nouvel utilisateur (ex : proftpd) avec un mot de passe (ex : password) qui a seulement les droits de lire les données de la base proftpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;GRANT USAGE ON proftpd.localhost TO &#039;&#039;&#039;proftpd&#039;&#039;&#039;@&#039;localhost&#039;&amp;lt;br /&amp;gt; IDENTIFIED BY &#039;&#039;&#039;password&#039;&#039;&#039; WITH GRANT OPTION;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Si votre serveur MySQL n&#039;est sur la même machine que ProFTPD remplacer localhost par le nom de la machine (du serveur MySQL) ou par *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration de ProFTPD ===&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;code&amp;gt;/etc/proftpd/proftpd.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;# On inclut le fichier modules.conf&amp;lt;br /&amp;gt; # =====================&amp;lt;br /&amp;gt; Include /etc/proftpd/modules.conf&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Configuration de base&amp;lt;br /&amp;gt; # =====================&amp;lt;br /&amp;gt; ServerName &amp;quot;Mon serveur FTP&amp;quot;&amp;lt;br /&amp;gt; ServerType standalone&amp;lt;br /&amp;gt; ServerIdent on &amp;quot;Bienvenue sur mon ftp. Veuillez-vous identifiez&amp;quot;&amp;lt;br /&amp;gt; DeferWelcome on&amp;lt;br /&amp;gt; ServerAdmin &amp;quot;ftp_admin@mydomain.com&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; MultilineRFC2228 on&amp;lt;br /&amp;gt; DefaultServer on&amp;lt;br /&amp;gt; ShowSymlinks on&amp;lt;br /&amp;gt; AllowOverwrite on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; TimeoutNoTransfer 600&amp;lt;br /&amp;gt; TimeoutStalled 600&amp;lt;br /&amp;gt; TimeoutIdle 1200&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ListOptions &amp;quot;-l&amp;quot;&amp;lt;br /&amp;gt; Defaultroot ~&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; DenyFilter \*.*/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Port 21&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # A configurer selon sa connection&amp;lt;br /&amp;gt; # ================================&amp;lt;br /&amp;gt; MaxInstances 6&amp;lt;br /&amp;gt; MaxLoginAttempts 3&amp;lt;br /&amp;gt; MaxClientsPerUser 10&amp;lt;br /&amp;gt; MaxClientsPerHost 2&amp;lt;br /&amp;gt; MaxHostsPerUser 4&amp;lt;br /&amp;gt; MaxClients 6 &amp;quot;Limite a 6 utilisateurs&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # ProFTPD est excecuté avec des droits réduits&amp;lt;br /&amp;gt; # ============================================&amp;lt;br /&amp;gt; User nobody&amp;lt;br /&amp;gt; Group nogroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Umask 022&amp;lt;br /&amp;gt; AllowStoreRestart on&amp;lt;br /&amp;gt; AllowRetrieveRestart on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod MySQL&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; # Les mots de passe sont crypté ds la base avec la fct ENCRYPT (MySQL)&amp;lt;br /&amp;gt; SQLAuthTypes Crypt&amp;lt;br /&amp;gt; SQLAuthenticate users* groups*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Modifiez cette ligne selon l&#039;utilisateur et le mot de passe définit plutôt&amp;lt;br /&amp;gt; SQLConnectInfo &#039;&#039;proftpd@localhost proftpd password&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table usertable&amp;lt;br /&amp;gt; SQLUserInfo ftpuser userid passwd uid gid homedir shell&amp;lt;br /&amp;gt; SQLUserWhereClause &amp;quot;LoginAllowed = &#039;true&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table &amp;quot;grouptable&amp;quot;&amp;lt;br /&amp;gt; SQLGroupInfo ftpgroup groupname gid members&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Créer le repertoire home de l&#039;utilisateur si il n&#039;existe pas&amp;lt;br /&amp;gt; SQLHomedirOnDemand on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Met à jour les compteurs à chaque connection d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog PASS updatecount&amp;lt;br /&amp;gt; SQLNamedQuery updatecount UPDATE &amp;quot;count=count+1, accessed=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; #Met à jour les compteurs à chaque upload ou download d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog STOR,DELE modified&amp;lt;br /&amp;gt; SQLNamedQuery modified UPDATE &amp;quot;modified=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod quota&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; QuotaEngine on&amp;lt;br /&amp;gt; QuotaDirectoryTally on&amp;lt;br /&amp;gt; QuotaDisplayUnits Mb&amp;lt;br /&amp;gt; QuotaShowQuotas on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Définit les requêtes SQL pour que ProFTPd recupere les infos sur les quotas&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-limit SELECT &amp;quot;name, quota_type, par_session, limit_type, bytes_up_limit, bytes_down_limit, bytes_transfer_limit, files_up_limit, files_down_limit, files_transfer_limit FROM ftpquotalimits WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-tally SELECT &amp;quot;name, quota_type, bytes_up_total, bytes_down_total, bytes_transfer_total, files_up_total, files_down_total, files_transfer_total FROM ftpquotatotal WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery update-quota-tally UPDATE &amp;quot;bytes_up_total = bytes_up_total + %{0}, bytes_down_total = bytes_down_total + %{1}, bytes_transfer_total = bytes_transfer_total + %{2}, files_up_total = files_up_total + %{3}, files_down_total = files_down_total + %{4}, files_transfer_total = files_transfer_total + %{5} WHERE name = &#039;%{6}&#039; AND quota_type = &#039;%{7}&#039;&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery insert-quota-tally INSERT &amp;quot;%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; QuotaLimitTable sql:/get-quota-limit&amp;lt;br /&amp;gt; QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; RootLogin off&amp;lt;br /&amp;gt; RequireValidShell off&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Gestion des logs&amp;lt;br /&amp;gt; # ================&amp;lt;br /&amp;gt; # Enregistre les requêtes SQL dans /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; SQLLogFile /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; # Enregistre les authentifications&amp;lt;br /&amp;gt; LogFormat auth &amp;quot;%v [%P] %h %t \&amp;quot;%r\&amp;quot; %s&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/auth.log AUTH auth&amp;lt;br /&amp;gt; # Enregistre les accès aux fichiers&amp;lt;br /&amp;gt; LogFormat write &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %s %b&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/access.log WRITE,READ write&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Recupère le nom à partir de l&#039;ip de la machine de l&#039;utilisateur ( resolution DNS )&amp;lt;br /&amp;gt; IdentLookups on&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez redémarrez le serveur ProFTPd pour appliquer la configuration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/proftpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que la configuration est faite, nous allons voir comment gérer les utilisateurs à travers la base de données.&lt;br /&gt;
&lt;br /&gt;
Je vous conseille d&#039;utiliser PHPMyAdmin pour ceux qui ne connaissent pas le langage SQL.&lt;br /&gt;
&lt;br /&gt;
=== Gestion des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur &#039;test&#039; avec un mot de passe &#039;pwd&#039;. Cet utilisateur a accès au repertoire &#039;/home/ftp/test&#039; avec les droits de l&#039;utilisateur (UID) 5500, et de groupe (GID) 5500, sans shell (&#039;/bin/false&#039;).&lt;br /&gt;
&lt;br /&gt;
La valeur &#039;LoginAllowed&#039; est mise à &#039;true&#039; pour autoriser la connection de cet utilisateur, à &#039;false&#039; pour l&#039;interdire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES (&#039;&#039;, &#039;test&#039;, ENCRYPT(&#039;pwd&#039;), &#039;5500&#039;, &#039;5500&#039;, &#039;/home/ftp/test&#039;, &#039;/bin/false&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;true&#039; ); &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;count&#039; représente le nombre d&#039;authentifications effectués par cet utilisateur,&amp;lt;br /&amp;gt; &#039;accessed&#039; la date du dernier accès et&amp;lt;br /&amp;gt; &#039;modified&#039; la date de la dernière écriture.&lt;br /&gt;
&lt;br /&gt;
==== Suppression d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Suppression de l&#039;utilisateur &#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpuser` WHERE `userid`=&#039;test&#039;;&amp;lt;br /&amp;gt; DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des groupes ===&lt;br /&gt;
&lt;br /&gt;
==== Affecter un utilisateur à un groupe ====&lt;br /&gt;
&lt;br /&gt;
Affecte l&#039;utilisateur &#039;test&#039; au groupe &#039;group_test&#039; avec les droits de groupe (GID) du groupe 5500&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES (&#039;group_test&#039;, &#039;5500&#039;, &#039;test&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Enlever un utilisateur d&#039;un groupe ====&lt;br /&gt;
&lt;br /&gt;
Enlève l&#039;utilisateur &#039;test&#039; du groupe &#039;group_test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des quotas ===&lt;br /&gt;
&lt;br /&gt;
La table &#039;ftpquotalimits&#039; contient la description des quotas.&amp;lt;br /&amp;gt; La table &#039;ftpquotatotal&#039; contient les statistiques d&#039;utilisation correspondant aux règles des quotas défini dans la table &#039;ftpquotalimits&#039;. Cette table permet à ProFTPd de gérer les quotas.&lt;br /&gt;
&lt;br /&gt;
==== Ajouter une règles de quotas ====&lt;br /&gt;
&lt;br /&gt;
Exécuter la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpquotalimits` ( `name`, `quota_type`, `par_session`, `limit_type`, `bytes_up_limit`, `bytes_down_limit`, `bytes_transfer_limit`, `files_up_limit`, `files_down_limit`, `files_transfer_limit` )&amp;lt;br /&amp;gt; VALUES ( &#039;NOM&#039; , &#039;TYPE&#039;, &#039;SESSION&#039;, &#039;LIMIT_TYPE&#039;, &#039;B_UP&#039;, &#039;B_DOWN&#039;, &#039;B_TRANS&#039;, &#039;F_UP&#039;, &#039;F_DOWN&#039;, &#039;F_TRANS&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
où&lt;br /&gt;
&lt;br /&gt;
* NOM : nom de l&#039;utilisateur, du groupe ou de la règle selon la valeur de TYPE.&lt;br /&gt;
* TYPE : &#039;user&#039; si le quota s&#039;applique à un utilisateur, &#039;group&#039; à un groupe, &#039;class&#039; à une classe (ici inutile), &#039;all&#039; à tous les utilisateurs.&lt;br /&gt;
* SESSION : &#039;true&#039; si les quotas doivent être remis à zéro à chaque nouvelle session, &#039;false&#039; sinon. (&#039;false&#039; est conseillé).&lt;br /&gt;
* LIMIT_TYPE : &#039;soft&#039; pour une mesure logicielle de la taille, &#039;hard&#039; pour une mesure hardware.&lt;br /&gt;
* B_UP : taille (en Mbytes) autorisé à être uploadé sur le serveur.&lt;br /&gt;
* B_DOWN : taille (en Mbytes) autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* B_TRANS : taille (en Mbytes) autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
* F_UP : nombre de fichiers autorisé à être uploadé sur le serveur.&lt;br /&gt;
* F_DOWN : nombre de fichiers autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* F_TRANS : nombre de fichiers autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Pour définir un quota ilimité à un des champs, mettez une valeur négative ou nulle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Les quotas de type &#039;all&#039;, &#039;class&#039; ou &#039;group&#039; ne définissent pas un quota pour chaque utilisateur mais un quota partagé par tous les utlisateurs concernés par cette règle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réinitialiser les quotas ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de supprimer l&#039;entrée (ligne) correspondant à la règle devant être réinitialisé. Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpquotatotal` WHERE `name`=&#039;test&#039; AND `quota_type`=&#039;user&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez réinitialiser tous les quotas, par exemple tous les mois, faîtes une tâc;he cron se connectant sur le serveur et executant la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;TRUNCATE TABLE `ftpquotatotal`;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Et voilà, c&#039;est terminé... Vous n&#039;avez plus qu&#039;à tester ;-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par space2d le 24/04/2005.&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14003</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14003"/>
		<updated>2006-12-03T01:00:18Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.priv&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.priv &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.priv&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain, #verifie que le domaine existe&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = email&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.priv&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.priv&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.priv -&amp;gt; user1@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.priv -&amp;gt; user1@domain.priv,user1@otherdomain.priv (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.priv -&amp;gt; catchall@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.priv -&amp;gt; @otherdomain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.priv via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.priv ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo domain.priv&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.priv&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.priv&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.priv&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.priv&lt;br /&gt;
/var/spool/vmail/domain.priv/user&lt;br /&gt;
/var/spool/vmail/domain.priv/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.priv/user/cur&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.priv/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.priv&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14002</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14002"/>
		<updated>2006-12-02T11:55:08Z</updated>

		<summary type="html">&lt;p&gt;Space2d : problème avec Catch-All&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.priv&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.priv &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.priv&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain, #verifie que le domaine existe&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases_mailbox.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = email&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.priv&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.priv&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.priv -&amp;gt; user1@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.priv -&amp;gt; user1@domain.priv,user1@otherdomain.priv (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.priv -&amp;gt; catchall@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.priv -&amp;gt; @otherdomain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.priv via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.priv ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo domain.priv&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.priv&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.priv&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.priv&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.priv&lt;br /&gt;
/var/spool/vmail/domain.priv/user&lt;br /&gt;
/var/spool/vmail/domain.priv/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.priv/user/cur&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.priv/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.priv&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14001</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14001"/>
		<updated>2006-12-02T10:55:47Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.priv&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.priv &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.priv&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain, #verifie que le domaine existe&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.priv&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.priv&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.priv -&amp;gt; user1@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.priv -&amp;gt; user1@domain.priv,user1@otherdomain.priv (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.priv -&amp;gt; catchall@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.priv -&amp;gt; @otherdomain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.priv via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.priv ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo domain.priv&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.priv&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.priv&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.priv&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.priv&lt;br /&gt;
/var/spool/vmail/domain.priv/user&lt;br /&gt;
/var/spool/vmail/domain.priv/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.priv/user/cur&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.priv/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.priv&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14000</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=14000"/>
		<updated>2006-12-02T10:52:02Z</updated>

		<summary type="html">&lt;p&gt;Space2d : remplacement du nom de domaine de test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.priv&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.priv &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.priv&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain, #verifie que le domaine existe&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.priv&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.priv&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.priv -&amp;gt; user1@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.priv -&amp;gt; user1@domain.priv,user1@otherdomain.priv (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.priv -&amp;gt; catchall@domain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.priv -&amp;gt; @otherdomain.priv&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.priv via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.priv ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo espace.fr.to&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.priv&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.priv&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.priv&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.priv&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.priv&lt;br /&gt;
/var/spool/vmail/domain.priv/user&lt;br /&gt;
/var/spool/vmail/domain.priv/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.priv/user/cur&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new&lt;br /&gt;
/var/spool/vmail/domain.priv/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.priv/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.priv&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Proposition_d%27article&amp;diff=13988</id>
		<title>Proposition d&#039;article</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Proposition_d%27article&amp;diff=13988"/>
		<updated>2006-11-29T11:25:09Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Rubrique : Le réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposition d&#039;article =&lt;br /&gt;
Indiquer ici les articles qui manquent et que vous vous proposez de créer, puis créez les ! Si vous avez besoin de mettre des images dans votre article, n&#039;hésitez pas à demander à Léa les [[Lea_Linux:Groupe_Editeur|droit d&#039;éditeurs]]. &#039;&#039;&#039;Ne mettez pas&#039;&#039;&#039; des articles que vous désireriez voir écrits par quelqu&#039;un d&#039;autre que vous ! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;cadre type=alert&amp;gt;&#039;&#039;&#039;Note :&#039;&#039;&#039; pour proposer un nouveau truc ou une nouvelle astuce, utiliser [[Trucs:Proposition_d&#039;un_truc|cette page]].&amp;lt;/cadre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il suffit d&#039;insérer dans la section qui correspond à votre article, quelque chose du genre : &lt;br /&gt;
* exemple : &amp;lt;nowiki&amp;gt;[[Nom de l&#039;article]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
qui donnera : &lt;br /&gt;
* exemple : [[Nom de l&#039;article]] (SVP ne créez pas l&#039;article &#039;&#039;&#039;Nom de l&#039;article&#039;&#039;&#039;).&lt;br /&gt;
== Rubrique : Installation ==&lt;br /&gt;
* [[UBUNTU et eagle-usb]] [[Utilisateur: mujma|Marc UJMA]]&lt;br /&gt;
* [[Guide d&#039;installation Linux SuSE 10.0 pas à pas]] leibowitz 29 janvier 2006&lt;br /&gt;
* [[Guide d&#039;installation et de configuration de Fluxbox,Conky, Idesk, Fbpager]] pingadaroça 31/01/06&lt;br /&gt;
* [[L&#039;erreur est humaine, ou bienvenue dans le monde de l&#039;informatique libre]] (à caser dans philo et histoire je pense, ou dans découvrir Linux... bref on verra ça après) --[[Utilisateur:Linux.tar.gz|Linux.tar.gz]] 7 sep 2006 à 17:01 (CEST)&lt;br /&gt;
* [[Installation et (surtout) configuration post-installation de Slackware 11.0]]&lt;br /&gt;
* [[Configuration de la messagerie sur Debian Etch avec sendmail/fetchmail/spamassassin]] (rédigé) -&amp;gt; visible à http://sebastien.millet1.club.fr&lt;br /&gt;
&lt;br /&gt;
== Rubrique : X Window ==&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Logiciels ==&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Matériel ==&lt;br /&gt;
[[Le X10 et Linux]]&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
&lt;br /&gt;
* [[Hardware-hard_plus-matos_bis]]&lt;br /&gt;
* [[AC775|Carte PCMCIA GPRS/EDGE Sierra Wireless AC775]]&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Le réseau ==&lt;br /&gt;
* [[Streaming mp3 avec Icecast2 et ices]]. --[[Utilisateur:CoKe|CoKe]] 4 avr 2006 à 16:04 (CEST)&lt;br /&gt;
* [[Debian GNU/Linux et IPv6]]. [[Utilisateur: Thomas Carlu|Thomas Carlu]] 25 oct 2005 à 1:15 (CEST)&lt;br /&gt;
* [[Sécurité des réseaux WIFI]]. --[[Utilisateur:Maston28|Maston28]] 13 nov 2005 à 16:30 (CET)&lt;br /&gt;
* [[Configurer le wifi avec une livebox, freebox etc...]] par Samiche, avril 2006&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[Tunnels ethernet avec openssh]]. --[[Utilisateur:Misc|Misc]] 12 fév 2006 à 13:30 (CET)&lt;br /&gt;
* [[Créer un point d&#039;accès sécurisé avec hostAPd]] --[[Utilisateur:Glandos|Glandos]] 26 avr 2006 à 23:16 (CEST)&lt;br /&gt;
*[[postfix-courier-mysql-quota-spamassassin-amavis|Serveur de mail multi-domaines postfix - mysql (quota, antivirus, spamassasin) sous Debian]] --[[Utilisateur:Space2d|Space2d]] 29 nov 2006 à 12:25 (CET)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Administrer ==&lt;br /&gt;
* [[Arrêter Windows et son routeur Linux]], [[Utilisateur:Vivecom|Vivecom]] 26 nov 2005 à 16:40 (CET)&lt;br /&gt;
* [[S&#039;identifier par une clé USB]], [[Utilisateur:thomas debay]] 28 fév 2006&lt;br /&gt;
* [[Les sauvegardes]], [[Utilisateur:oudoubah|oudoubah]] 05 sep 2006&lt;br /&gt;
&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[Gestion des ACL]] (ou [[ACL]] pour le titre). [[Utilisateur:Vincent Ramos|Vincent Ramos]] 24 oct 2005 à 23:00 (CEST)&lt;br /&gt;
::Fait. Bien qu&#039;améliorable, l&#039;article me semble complet. [[Utilisateur:Vincent Ramos|Vincent Ramos]] 26 oct 2005 à 00:22 (CEST) ;&lt;br /&gt;
* [[Attributs étendus]] (&#039;&#039;chattr&#039;&#039; sur ext2 et ext3, outils efs2progs) [[Utilisateur:Vincent Ramos|Vincent Ramos]] 26 oct 2005 à 17:40 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Noyau et modules ==&lt;br /&gt;
&lt;br /&gt;
* [[RT2500]] : compilation et installation du modules RT2500 Pour les cartes wifi , essai avec la carte &#039;&#039;&#039;PCI PC54G2&#039;&#039;&#039; , Auteur: Laplaine Freddy, Alias mr_pupu[corbeille]&lt;br /&gt;
&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[HOWTO Dkms]] : Utiliser dkms pour gérer ses drivers dynamiquement et facilement&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Développer ==&lt;br /&gt;
&lt;br /&gt;
* [[Ocaml]] : une présentation du langage ocaml&lt;br /&gt;
*[[FreePascal]] : Un langage familier pour nombre de développeurs [[Utilisateur: mujma|Marc UJMA]]&lt;br /&gt;
*[[Trucs:Obtenir le code HTML d&#039;un glyphe]] [[Utilisateur:Nicola|Nicola]] 2 jan 2006 à 19:10 (CET)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Léavancé ==&lt;br /&gt;
&lt;br /&gt;
* [[Virtualisation avec Xen]]&lt;br /&gt;
* [[OpenMosix]] axé Slackware mais applicable à d&#039;autres distributions&lt;br /&gt;
* [[Compilation Distribuée]] ou comment accélérer ses compilations&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13987</id>
		<title>Discussion:Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13987"/>
		<updated>2006-11-29T11:20:53Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* les repertoires ne sont pas crées dans /var/spool/vmail */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour&lt;br /&gt;
Un grand merci pour votre aide et vos compétences. Seulement, votre configuration fait de postfix un serveur &amp;quot;open relay&amp;quot; :o(&lt;br /&gt;
&lt;br /&gt;
Avez vous une solution ??&lt;br /&gt;
&lt;br /&gt;
Merci d&#039;avance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Correction faite dans la section main.cf&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 16 nov 2006 à 14:00 (CET)&lt;br /&gt;
&lt;br /&gt;
== les repertoires ne sont pas crées dans /var/spool/vmail ==&lt;br /&gt;
&lt;br /&gt;
Salut,&lt;br /&gt;
&lt;br /&gt;
nickel le tut ;)&lt;br /&gt;
&lt;br /&gt;
mais j ai du me rater quelque part&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
en effet dans /var/spool/vmail les repertoires correpondant a &lt;br /&gt;
&lt;br /&gt;
domaine.com et domaine.com/user n existe pas &lt;br /&gt;
&lt;br /&gt;
est ce qu il faut les creer avec maildirmake  ou alors je me suis raté quelque part ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
j ai l erreur suivante dans mon client de messagerie : &lt;br /&gt;
&lt;br /&gt;
-ERR chdir domaine.com/user/ failed&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
As-tu envoyer un mail à cet utilisateur ?&lt;br /&gt;
&lt;br /&gt;
Cette action permet la création de ce répertoire.&lt;br /&gt;
&lt;br /&gt;
(Il est aussi possible de le créer aussi par maildirmake)&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 29 nov 2006 à 12:20 (CET)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion:Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13965</id>
		<title>Discussion:Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion:Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13965"/>
		<updated>2006-11-16T13:00:22Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bonjour&lt;br /&gt;
Un grand merci pour votre aide et vos compétences. Seulement, votre configuration fait de postfix un serveur &amp;quot;open relay&amp;quot; :o(&lt;br /&gt;
&lt;br /&gt;
Avez vous une solution ??&lt;br /&gt;
&lt;br /&gt;
Merci d&#039;avance&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Correction faite dans la section main.cf&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 16 nov 2006 à 14:00 (CET)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13964</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13964"/>
		<updated>2006-11-16T12:58:37Z</updated>

		<summary type="html">&lt;p&gt;Space2d : risque open relay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`source`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.com&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.com &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.com&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
#restrictions d&#039;accès&lt;br /&gt;
# adresses d&#039;expédition&lt;br /&gt;
smtpd_sender_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unknown_sender_domain, #verifie que le domaine existe&lt;br /&gt;
        warn_if_reject reject_unverified_sender&lt;br /&gt;
&lt;br /&gt;
# adresses de destination&lt;br /&gt;
smtpd_recipient_restrictions =&lt;br /&gt;
        permit_mynetworks,&lt;br /&gt;
        reject_unauth_destination,&lt;br /&gt;
        reject_unknown_recipient_domain,&lt;br /&gt;
        reject_non_fqdn_recipient&lt;br /&gt;
&lt;br /&gt;
# client&lt;br /&gt;
smtpd_client_restrictions =&lt;br /&gt;
        reject_unknown_client,&lt;br /&gt;
        permit_mynetworks&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.com&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)&lt;br /&gt;
       VALUES (&#039;user@domain.com&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.com -&amp;gt; user1@domain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.com -&amp;gt; user1@domain.com,user1@otherdomain.com (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.com -&amp;gt; catchall@domain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.com -&amp;gt; @otherdomain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.com via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.com ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo espace.fr.to&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.com&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@espace.fr.to&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.com&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.com&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.com&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.com&lt;br /&gt;
/var/spool/vmail/domain.com/user&lt;br /&gt;
/var/spool/vmail/domain.com/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.com/user/cur&lt;br /&gt;
/var/spool/vmail/domain.com/user/new&lt;br /&gt;
/var/spool/vmail/domain.com/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.com/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.com&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Space2d&amp;diff=13919</id>
		<title>Utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Space2d&amp;diff=13919"/>
		<updated>2006-10-31T18:44:40Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Mes contributions sur lea-linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Moi==&lt;br /&gt;
&lt;br /&gt;
Etudiant en Master d&#039;informatique à Luminy (Marseille).&lt;br /&gt;
&lt;br /&gt;
*Developpeur c, java, php, mySQL.&lt;br /&gt;
*Administrateur [http://www.espace.fr.to E-Space] (Debian GNU/Linux)&lt;br /&gt;
*Co-Developpeur de  [http://genea4p.espace.fr.to Genea4p] : logiciel de généalogie en php&lt;br /&gt;
&lt;br /&gt;
==Mes contributions sur lea-linux==&lt;br /&gt;
*[[Reseau-partfic-proftpd_mysql|ProFTPD, MySQL et Quota]]&lt;br /&gt;
*[[Postfix-courier-mysql-quota-spamassassin-amavis|Postfix, Courier (pop,imap), avec support mysql et quota + antivirus &amp;amp; antispam]]&lt;br /&gt;
&lt;br /&gt;
==Mes autres doc==&lt;br /&gt;
Elles sont accessible à partir de [http://www.espace.fr.to/howto.html http://www.espace.fr.to/howto.html] &lt;br /&gt;
&lt;br /&gt;
* [http://www.espace.fr.to/howto/mrtg/t1.html MRTG]&lt;br /&gt;
* [http://www.espace.fr.to/howto/apache2/t1.html Apache2]&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=13766</id>
		<title>Discussion utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=13766"/>
		<updated>2006-09-28T17:07:23Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Pourquoi FDL ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Pourquoi FDL ? ==&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Fred (phorum)|Fred (phorum)]]&amp;gt; Tu fais bien ce que tu veux avec ta documentation bien sur, mais je ne comprends pas pourquoi tu désires utiliser la FDL plutôt que la CC-BY-SA ?&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Space2d|Space2d]]&amp;gt;Je les diffuse déjà sur mon site sous licence FDL. Je me usi rendu compte que j&#039;avais fais une erreur lors de cette publication.&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=13765</id>
		<title>Discussion utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=13765"/>
		<updated>2006-09-28T17:04:37Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Pourquoi FDL ? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Pourquoi FDL ? ==&lt;br /&gt;
&lt;br /&gt;
[[Utilisateur:Fred (phorum)|Fred (phorum)]]&amp;gt; Tu fais bien ce que tu veux avec ta documentation bien sur, mais je ne comprends pas pourquoi tu désires utiliser la FDL plutôt que la CC-BY-SA ?&lt;br /&gt;
Je les diffuse déjà sur mon site sous licence FDL. Je me usi rendu compte que j&#039;avais fais une erreur lors de cette publication.&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Proposition_d%27article&amp;diff=13764</id>
		<title>Proposition d&#039;article</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Proposition_d%27article&amp;diff=13764"/>
		<updated>2006-09-28T16:59:37Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Publiés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposition d&#039;article =&lt;br /&gt;
Indiquer ici les articles qui manquent et que vous vous proposez de créer, puis créez les ! Si vous avez besoin de mettre des images dans votre article, n&#039;hésitez pas à demander à Léa les [[Lea_Linux:Groupe_Editeur|droit d&#039;éditeurs]]. &#039;&#039;&#039;Ne mettez pas&#039;&#039;&#039; des articles que vous désireriez voir écrits par quelqu&#039;un d&#039;autre que vous ! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;cadre type=alert&amp;gt;&#039;&#039;&#039;Note :&#039;&#039;&#039; pour proposer un nouveau truc ou une nouvelle astuce, utiliser [[Trucs:Proposition_d&#039;un_truc|cette page]].&amp;lt;/cadre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il suffit d&#039;insérer dans la section qui correspond à votre article, quelque chose du genre : &lt;br /&gt;
* exemple : &amp;lt;nowiki&amp;gt;[[Nom de l&#039;article]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
qui donnera : &lt;br /&gt;
* exemple : [[Nom de l&#039;article]] (SVP ne créez pas l&#039;article &#039;&#039;&#039;Nom de l&#039;article&#039;&#039;&#039;).&lt;br /&gt;
== Rubrique : Installation ==&lt;br /&gt;
* [[UBUNTU et eagle-usb]] [[Utilisateur: mujma|Marc UJMA]]&lt;br /&gt;
* [[Guide d&#039;installation Linux SuSE 10.0 pas à pas]] leibowitz 29 janvier 2006&lt;br /&gt;
* [[Guide d&#039;installation et de configuration de Fluxbox,Conky, Idesk, Fbpager]] pingadaroça 31/01/06&lt;br /&gt;
* [[L&#039;erreur est humaine, ou bienvenue dans le monde de l&#039;informatique libre]] (à caser dans philo et histoire je pense, ou dans découvrir Linux... bref on verra ça après) --[[Utilisateur:Linux.tar.gz|Linux.tar.gz]] 7 sep 2006 à 17:01 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : X Window ==&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Logiciels ==&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Matériel ==&lt;br /&gt;
[[Le X10 et Linux]]&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
&lt;br /&gt;
* [[Hardware-hard_plus-matos_bis]]&lt;br /&gt;
* [[AC775|Carte PCMCIA GPRS/EDGE Sierra Wireless AC775]]&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Le réseau ==&lt;br /&gt;
* [[Streaming mp3 avec Icecast2 et ices]]. --[[Utilisateur:CoKe|CoKe]] 4 avr 2006 à 16:04 (CEST)&lt;br /&gt;
* [[Debian GNU/Linux et IPv6]]. [[Utilisateur: Thomas Carlu|Thomas Carlu]] 25 oct 2005 à 1:15 (CEST)&lt;br /&gt;
* [[Sécurité des réseaux WIFI]]. --[[Utilisateur:Maston28|Maston28]] 13 nov 2005 à 16:30 (CET)&lt;br /&gt;
* [[Configurer le wifi avec une livebox, freebox etc...]] par Samiche, avril 2006&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[Tunnels ethernet avec openssh]]. --[[Utilisateur:Misc|Misc]] 12 fév 2006 à 13:30 (CET)&lt;br /&gt;
* [[Créer un point d&#039;accès sécurisé avec hostAPd]] --[[Utilisateur:Glandos|Glandos]] 26 avr 2006 à 23:16 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Administrer ==&lt;br /&gt;
* [[Arrêter Windows et son routeur Linux]], [[Utilisateur:Vivecom|Vivecom]] 26 nov 2005 à 16:40 (CET)&lt;br /&gt;
* [[S&#039;identifier par une clé USB]], [[Utilisateur:thomas debay]] 28 fév 2006&lt;br /&gt;
* [[Les sauvegardes]], [[Utilisateur:oudoubah|oudoubah]] 05 sep 2006&lt;br /&gt;
&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[Gestion des ACL]] (ou [[ACL]] pour le titre). [[Utilisateur:Vincent Ramos|Vincent Ramos]] 24 oct 2005 à 23:00 (CEST)&lt;br /&gt;
::Fait. Bien qu&#039;améliorable, l&#039;article me semble complet. [[Utilisateur:Vincent Ramos|Vincent Ramos]] 26 oct 2005 à 00:22 (CEST) ;&lt;br /&gt;
* [[Attributs étendus]] (&#039;&#039;chattr&#039;&#039; sur ext2 et ext3, outils efs2progs) [[Utilisateur:Vincent Ramos|Vincent Ramos]] 26 oct 2005 à 17:40 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Noyau et modules ==&lt;br /&gt;
&lt;br /&gt;
* [[RT2500]] : compilation et installation du modules RT2500 Pour les cartes wifi , essai avec la carte &#039;&#039;&#039;PCI PC54G2&#039;&#039;&#039; , Auteur: Laplaine Freddy, Alias mr_pupu[corbeille]&lt;br /&gt;
&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[HOWTO Dkms]] : Utiliser dkms pour gérer ses drivers dynamiquement et facilement&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Développer ==&lt;br /&gt;
&lt;br /&gt;
* [[Ocaml]] : une présentation du langage ocaml&lt;br /&gt;
*[[FreePascal]] : Un langage familier pour nombre de développeurs [[Utilisateur: mujma|Marc UJMA]]&lt;br /&gt;
*[[Trucs:Obtenir le code HTML d&#039;un glyphe]] [[Utilisateur:Nicola|Nicola]] 2 jan 2006 à 19:10 (CET)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Léavancé ==&lt;br /&gt;
&lt;br /&gt;
* [[Virtualisation avec Xen]]&lt;br /&gt;
* [[OpenMosix]] axé Slackware mais applicable à d&#039;autres distributions&lt;br /&gt;
* [[Compilation Distribuée]] ou comment accélérer ses compilations&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Space2d&amp;diff=13758</id>
		<title>Utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Space2d&amp;diff=13758"/>
		<updated>2006-09-26T13:57:04Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Mes contributions sur lea-linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Moi==&lt;br /&gt;
&lt;br /&gt;
Etudiant en Master d&#039;informatique à Luminy (Marseille).&lt;br /&gt;
&lt;br /&gt;
*Developpeur c, java, php, mySQL.&lt;br /&gt;
*Administrateur [http://www.espace.fr.to E-Space] (Debian GNU/Linux)&lt;br /&gt;
*Co-Developpeur de  [http://genea4p.espace.fr.to Genea4p] : logiciel de généalogie en php&lt;br /&gt;
&lt;br /&gt;
==Mes contributions sur lea-linux==&lt;br /&gt;
*[[Reseau-partfic-proftpd_mysql|ProFTPD, MySQL et Quota]]&lt;br /&gt;
*[[Postfix-courier-mysql-quota-spamassassin-amavis|Postfix, Coureir (pop,imap), avec support mysql et quota + antivirus &amp;amp; antispam]]&lt;br /&gt;
&lt;br /&gt;
==Mes autres doc==&lt;br /&gt;
Elles sont accessible à partir de [http://www.espace.fr.to/howto.html http://www.espace.fr.to/howto.html] &lt;br /&gt;
&lt;br /&gt;
* [http://www.espace.fr.to/howto/mrtg/t1.html MRTG]&lt;br /&gt;
* [http://www.espace.fr.to/howto/apache2/t1.html Apache2]&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=13757</id>
		<title>ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=13757"/>
		<updated>2006-09-25T17:27:48Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Partager ses fichiers]]&lt;br /&gt;
= ProFTPD, MySQL et Quota =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;ProFTPD, MySQL et Quota&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:howto@espace.fr.to Space2d] &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Exemple d&#039;utilisation du support MySQL pour ProFTPD avec gestion des quotas&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de lire d&#039;abord le didactitiel de DuF : [[Reseau-partfic-proftpd|Introduction à proftpd]]&lt;br /&gt;
&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Remarque : ce document peut aussi convenir à la configuration du support PostGreSQL.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Au début, j&#039;utilisais le serveur ProFTPD avec la configuration d&#039;origine (ou presque), donc sur la base de l&#039;authentification unix. J&#039;ai eu besoin de modifier regulièrement les comptes FTP. Ajouter et supprimer les utlisateurs (compte linux) devient vite lourd. Je me suis donc penché sur le support MySQL de ProFTPD et je vous propose mes explications.&lt;br /&gt;
&lt;br /&gt;
Le fait d&#039;utiliser l&#039;authentification de ProFTPD par base de données vous permet, par exemple, de faire une page php de configuration ou d&#039;administrer facilement vos comptes ftp via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Soit vous installez ProFTPD à partir de package. (Soyez sur que le package va installer le support MySQL)&lt;br /&gt;
* Soit à partir des sources.&lt;br /&gt;
&lt;br /&gt;
=== Sous Debian (apt) ===&lt;br /&gt;
&lt;br /&gt;
Il suffit de taper en tant que &#039;&#039;&#039;root&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#apt-get install proftpd-mysql&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A partir des sources ===&lt;br /&gt;
&lt;br /&gt;
Téléchargez les sources en allant sur le [http://www.proftpd.org site de proftpd] pour obtenir la version la plus récente.&lt;br /&gt;
&lt;br /&gt;
Décompressez-les et lancez la compilation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;tar jxvf proftpd-&#039;&#039;version&#039;&#039;.tar.bz2&amp;lt;br /&amp;gt; cd proftpd-&#039;&#039;version&#039;&#039;&amp;lt;br /&amp;gt; ./configure\&amp;lt;br /&amp;gt; --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql\&amp;lt;br /&amp;gt; --with-includes=/usr/include/mysql\&amp;lt;br /&amp;gt; --with-libraries=/usr/lib&amp;lt;br /&amp;gt; make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et en tant que &#039;&#039;&#039;root&#039;&#039;&#039; : &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Créer un groupe &#039;&#039;ftpgroup&#039;&#039; avec un GID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;groupadd -g 5500 ftpgroup&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Explications :====&lt;br /&gt;
* &#039;&#039;&#039;groupadd&#039;&#039;&#039; : invoque la commande d&#039;ajout de groupe.&lt;br /&gt;
* &#039;&#039;&#039;-g 5500&#039;&#039;&#039; : défini le GID (numéro identifiant) du groupe.&lt;br /&gt;
* &#039;&#039;&#039;ftpgroup&#039;&#039;&#039; : défini le nom du group.&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur &#039;&#039;ftpuser&#039;&#039; avec un UID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;useradd -u 5500 -s /bin/false -d /bin/null -c &amp;quot;proftpd user&amp;quot; -g ftpgroup ftpuser&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Explications :====&lt;br /&gt;
* &#039;&#039;&#039;useradd&#039;&#039;&#039; : invoque la commande d&#039;ajout d&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-u 5500&#039;&#039;&#039; : défini l&#039;UID (numéro identifiant) de l&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-s /bin/false&#039;&#039;&#039; : défini le shell utilisé pour cet utilisateur, en l&#039;occurence, aucun puisque la connection sur une console linux est désactivée pour cet utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-d /bin/null&#039;&#039;&#039; : défini le répertoire de l&#039;utilisateur, également inexistant.&lt;br /&gt;
* &#039;&#039;&#039;-c &amp;quot;proftp user&amp;quot;&#039;&#039;&#039; : commentaire.&lt;br /&gt;
* &#039;&#039;&#039;-g ftpgroup&#039;&#039;&#039; : ajoute l&#039;utilisateur &#039;&#039;ftpuser&#039;&#039; au group &#039;&#039;ftpgroup&#039;&#039; précédemment créé.&lt;br /&gt;
* &#039;&#039;&#039;ftpuser&#039;&#039;&#039; : défini le nom de l&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
Le groupe et l&#039;utilisateur ainsi créés serviront de lien entre les utilisateurs créés dans la base MySQL et le système d&#039;authentification/droits du système.&lt;br /&gt;
&lt;br /&gt;
=== La base de données ===&lt;br /&gt;
&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&lt;br /&gt;
* si vous n&#039;avez jamais modifié les utilisateurs de la base : &amp;lt;code&amp;gt;mysql -u root&amp;lt;/code&amp;gt;&lt;br /&gt;
* sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : proftpd) et les tables qu&#039;elle contient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; CREATE DATABASE `proftpd`;&amp;lt;br /&amp;gt; USE proftpd;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpgroup`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpgroup` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `groupname` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `members` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; KEY `groupname` (`groupname`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des groupes ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotalimits`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotalimits` (&amp;lt;br /&amp;gt; `name` varchar(30) default NULL,&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `par_session` enum(&#039;false&#039;,&#039;true&#039;) NOT NULL default &#039;false&#039;,&amp;lt;br /&amp;gt; `limit_type` enum(&#039;soft&#039;,&#039;hard&#039;) NOT NULL default &#039;soft&#039;,&amp;lt;br /&amp;gt; `bytes_up_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_limit` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotatotal`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotatotal` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `name` varchar(30) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `bytes_up_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_total` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des compteurs des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpuser`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpuser` (&amp;lt;br /&amp;gt; `id` int(10) unsigned NOT NULL auto_increment,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `userid` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `passwd` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `uid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `homedir` varchar(255) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `shell` varchar(16) NOT NULL default &#039;/bin/false&#039;,&amp;lt;br /&amp;gt; `count` int(11) NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `accessed` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `modified` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `LoginAllowed` enum(&#039;true&#039;,&#039;false&#039;) NOT NULL default &#039;true&#039;,&amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des utlisateurs ProFTPD&#039;; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut créer un nouvel utilisateur (ex : proftpd) avec un mot de passe (ex : password) qui a seulement les droits de lire les données de la base proftpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;GRANT USAGE ON proftpd.* TO &#039;&#039;&#039;proftpd&#039;&#039;&#039;@&#039;localhost&#039;&amp;lt;br /&amp;gt; IDENTIFIED BY &#039;&#039;&#039;&#039;password&#039;&#039;&#039;&#039; WITH GRANT OPTION;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Si votre serveur MySQL n&#039;est pas sur la même machine que ProFTPD remplacez localhost par le nom de la machine (du serveur MySQL) ou par *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration de ProFTPD ===&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;code&amp;gt;/etc/proftpd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
ou &amp;lt;code&amp;gt;/usr/local/etc/proftpd.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;# Configuration de base&amp;lt;br /&amp;gt; # =====================&amp;lt;br /&amp;gt; ServerName &amp;quot;Mon serveur FTP&amp;quot;&amp;lt;br /&amp;gt; ServerType standalone&amp;lt;br /&amp;gt; ServerIdent on &amp;quot;Bienvenue sur mon ftp. Veuillez-vous identifiez&amp;quot;&amp;lt;br /&amp;gt; DeferWelcome on&amp;lt;br /&amp;gt; ServerAdmin &amp;quot;ftp_admin@mydomain.com&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; MultilineRFC2228 on&amp;lt;br /&amp;gt; DefaultServer on&amp;lt;br /&amp;gt; ShowSymlinks on&amp;lt;br /&amp;gt; AllowOverwrite on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; TimeoutNoTransfer 600&amp;lt;br /&amp;gt; TimeoutStalled 600&amp;lt;br /&amp;gt; TimeoutIdle 1200&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ListOptions &amp;quot;-l&amp;quot;&amp;lt;br /&amp;gt; Defaultroot ~&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; DenyFilter \*.*/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Port 21&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # A configurer selon sa connection&amp;lt;br /&amp;gt; # ================================&amp;lt;br /&amp;gt; MaxInstances 6&amp;lt;br /&amp;gt; MaxLoginAttempts 3&amp;lt;br /&amp;gt; MaxClientsPerUser 10&amp;lt;br /&amp;gt; MaxClientsPerHost 2&amp;lt;br /&amp;gt; MaxHostsPerUser 4&amp;lt;br /&amp;gt; MaxClients 6 &amp;quot;Limite a 6 utilisateurs&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # ProFTPD est exécuté avec des droits réduits&amp;lt;br /&amp;gt; # ============================================&amp;lt;br /&amp;gt; User nobody&amp;lt;br /&amp;gt; Group nogroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Umask 022&amp;lt;br /&amp;gt; AllowStoreRestart on&amp;lt;br /&amp;gt; AllowRetrieveRestart on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod MySQL&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; # Les mots de passe sont cryptés dans la base avec la fct ENCRYPT (MySQL)&amp;lt;br /&amp;gt; SQLAuthTypes Plaintext Crypt&amp;lt;br /&amp;gt; SQLAuthenticate users* groups*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Modifiez cette ligne selon l&#039;utilisateur et le mot de passe définit plus tôt&amp;lt;br /&amp;gt; SQLConnectInfo &#039;&#039;proftpd@localhost proftpd password&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table usertable&amp;lt;br /&amp;gt; SQLUserInfo ftpuser userid passwd uid gid homedir shell&amp;lt;br /&amp;gt; SQLUserWhereClause &amp;quot;LoginAllowed = &#039;true&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table &amp;quot;grouptable&amp;quot;&amp;lt;br /&amp;gt; SQLGroupInfo ftpgroup groupname gid members&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Créer le repertoire home de l&#039;utilisateur si il n&#039;existe pas&amp;lt;br /&amp;gt; SQLHomedirOnDemand on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Met à jour les compteurs à chaque connection d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog PASS updatecount&amp;lt;br /&amp;gt; SQLNamedQuery updatecount UPDATE &amp;quot;count=count+1, accessed=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; #Met à jour les compteurs à chaque upload ou download d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog STOR,DELE modified&amp;lt;br /&amp;gt; SQLNamedQuery modified UPDATE &amp;quot;modified=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod quota&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; QuotaEngine on&amp;lt;br /&amp;gt; QuotaDirectoryTally on&amp;lt;br /&amp;gt; QuotaDisplayUnits Mb&amp;lt;br /&amp;gt; QuotaShowQuotas on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Définit les requêtes SQL pour que ProFTPd recupere les infos sur les quotas&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-limit SELECT &amp;quot;name, quota_type, par_session, limit_type, bytes_up_limit, bytes_down_limit, bytes_transfer_limit, files_up_limit, files_down_limit, files_transfer_limit FROM ftpquotalimits WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-tally SELECT &amp;quot;name, quota_type, bytes_up_total, bytes_down_total, bytes_transfer_total, files_up_total, files_down_total, files_transfer_total FROM ftpquotatotal WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery update-quota-tally UPDATE &amp;quot;bytes_up_total = bytes_up_total + %{0}, bytes_down_total = bytes_down_total + %{1}, bytes_transfer_total = bytes_transfer_total + %{2}, files_up_total = files_up_total + %{3}, files_down_total = files_down_total + %{4}, files_transfer_total = files_transfer_total + %{5} WHERE name = &#039;%{6}&#039; AND quota_type = &#039;%{7}&#039;&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery insert-quota-tally INSERT &amp;quot;%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; QuotaLimitTable sql:/get-quota-limit&amp;lt;br /&amp;gt; QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; RootLogin off&amp;lt;br /&amp;gt; RequireValidShell off&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Gestion des logs&amp;lt;br /&amp;gt; # ================&amp;lt;br /&amp;gt; # Enregistre les requêtes SQL dans /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; SQLLogFile /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; # Enregistre les authentifications&amp;lt;br /&amp;gt; LogFormat auth &amp;quot;%v [%P] %h %t \&amp;quot;%r\&amp;quot; %s&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/auth.log AUTH auth&amp;lt;br /&amp;gt; # Enregistre les accès aux fichiers&amp;lt;br /&amp;gt; LogFormat write &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %s %b&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/access.log WRITE,READ write&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Recupère le nom à partir de l&#039;ip de la machine de l&#039;utilisateur ( resolution DNS )&amp;lt;br /&amp;gt; IdentLookups on&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin que les logs puissent être enregistrés et consultés, il faut créer au besoin le dossier /var/log/proftpd&lt;br /&gt;
&lt;br /&gt;
=== Démarrage de proftpd ===&lt;br /&gt;
&lt;br /&gt;
Il faut désormais créer le script qui va lancer proftpd. Copiez ces lignes dans /etc/init.d/proftpd (sur une Debian par exemple). Pour les systèmes autres que Debian, utilisez le fichier contenu dans le dossier contrib/dist/rpm/proftpd.init.d en le plaçant dans le dossier /etc/init.d sous le nom proftpd par la commande :  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
cp ./contrib/dist/rpm/proftpd.init.d /etc/init.d/proftpd&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;!/bin/sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Start the proftpd FTP daemon.&lt;br /&gt;
&lt;br /&gt;
PATH=/bin:/usr/bin:/sbin:/usr/sbin&amp;lt;br /&amp;gt;&lt;br /&gt;
DAEMON=/usr/sbin/proftpd&amp;lt;br /&amp;gt;&lt;br /&gt;
NAME=proftpd&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Defaults&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN=&amp;amp;quot;no&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
OPTIONS=&amp;amp;quot;&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PIDFILE=`grep -i &#039;pidfile&#039; /etc/proftpd.conf | sed -e &#039;s/pidfile[\t ]\+//i&#039;`&amp;lt;br /&amp;gt;&lt;br /&gt;
if [ &amp;amp;quot;x$PIDFILE&amp;amp;quot; = &amp;amp;quot;x&amp;amp;quot; ];&amp;lt;br /&amp;gt;&lt;br /&gt;
then&amp;lt;br /&amp;gt;&lt;br /&gt;
PIDFILE=/var/run/proftpd.pid&amp;lt;br /&amp;gt;&lt;br /&gt;
fi&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Read config (will override defaults)&amp;lt;br /&amp;gt;&lt;br /&gt;
[ -r /etc/default/proftpd ] &amp;amp;amp;&amp;amp;amp; . /etc/default/proftpd&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trap &amp;amp;quot;&amp;amp;quot; 1 &amp;lt;br /&amp;gt;&lt;br /&gt;
trap &amp;amp;quot;&amp;amp;quot; 15 &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
test -f $DAEMON || exit 0 &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Servertype could be inetd|standalone|none. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; In all cases check against inetd and xinetd support. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
if ! egrep -qi &amp;amp;quot;^&amp;lt;nowiki&amp;gt;[[:space:]] &amp;lt;/nowiki&amp;gt;*ServerType.*standalone&amp;amp;quot; /etc/proftpd.conf &amp;lt;br /&amp;gt;&lt;br /&gt;
then &amp;lt;br /&amp;gt;&lt;br /&gt;
  if [ $(dpkg-divert --list xinetd|wc -l) -eq 1 ]  &lt;br /&gt;
  then &lt;br /&gt;
  if egrep -qi &amp;amp;quot;server&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*=&amp;lt;nowiki&amp;gt; [[:space:]]&amp;lt;/nowiki&amp;gt;*/usr/sbin/proftpd&amp;amp;quot; /etc/xinetd.conf -o \ &lt;br /&gt;
  egrep -qi &amp;amp;quot;server&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*=&amp;lt;nowiki&amp;gt;[[:space:]] &amp;lt;/nowiki&amp;gt;*/usr/sbin/proftpd&amp;amp;quot; /etc/xinetd.d/* 2&amp;amp;gt;/dev/null &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  if ! egrep -qi &amp;amp;quot;^&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*ServerType.*inetd&amp;amp;quot; /etc/proftpd.conf &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
  else &lt;br /&gt;
  if egrep -qi &amp;amp;quot;^ftp.*/usr/sbin/proftpd&amp;amp;quot; /etc/inetd.conf 2&amp;amp;gt;/dev/null &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  if ! egrep -qi &amp;amp;quot;^&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*ServerType.*inetd&amp;amp;quot; /etc/proftpd.conf &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
&lt;br /&gt;
start()&lt;br /&gt;
{&lt;br /&gt;
    if start-stop-daemon --start --quiet --pidfile &amp;quot;$PIDFILE&amp;quot; \&lt;br /&gt;
        --exec $DAEMON -- $OPTIONS ; then&lt;br /&gt;
        echo &amp;quot;$NAME.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;.&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
signal()&lt;br /&gt;
  {&lt;br /&gt;
  if [ &amp;amp;quot;$1&amp;amp;quot; = &amp;amp;quot;stop&amp;amp;quot; ]; then&lt;br /&gt;
  SIGNAL=&amp;amp;quot;TERM&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;$1&amp;amp;quot; = &amp;amp;quot;reload&amp;amp;quot; ]; then&lt;br /&gt;
  SIGNAL=&amp;amp;quot;HUP&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  echo &amp;amp;quot;ERR: wrong parameter given to signal()&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  if start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile &amp;amp;quot;$PIDFILE&amp;amp;quot;; then&lt;br /&gt;
  echo &amp;amp;quot;$NAME.&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  SIGNAL=&amp;amp;quot;KILL&amp;amp;quot;&lt;br /&gt;
  if start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile &amp;amp;quot;$PIDFILE&amp;amp;quot;; then&lt;br /&gt;
  echo &amp;amp;quot;$NAME.&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  echo &amp;amp;quot;.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  if [ &amp;amp;quot;$SIGNAL&amp;amp;quot; = &amp;amp;quot;KILL&amp;amp;quot; ]; then&lt;br /&gt;
  rm -f &amp;amp;quot;$PIDFILE&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case &amp;amp;quot;$1&amp;amp;quot; in&lt;br /&gt;
start)&lt;br /&gt;
  if [ &amp;amp;quot;x$RUN&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo -n &amp;amp;quot;Starting ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  start&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;ProFTPd is started from inetd/xinetd.&amp;amp;quot;&lt;br /&gt;
  else &lt;br /&gt;
  echo &amp;amp;quot;ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
force-start)&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;Warning: ProFTPd is started from inetd/xinetd (trying to start anyway).&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  echo -n &amp;amp;quot;Starting ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  start&lt;br /&gt;
  ;; &lt;br /&gt;
  &lt;br /&gt;
stop)&lt;br /&gt;
  if [ &amp;amp;quot;x$RUN&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo -n &amp;amp;quot;Stopping ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  signal stop&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;ProFTPd is started from inetd/xinetd.&amp;amp;quot;&lt;br /&gt;
  else &lt;br /&gt;
  echo &amp;amp;quot;ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
force-stop)&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;Warning: ProFTPd is started from inetd/xinetd (trying to kill anyway).&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  echo -n &amp;amp;quot;Stopping ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  signal stop&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
reload)&lt;br /&gt;
  echo -n &amp;amp;quot;Reloading $NAME configuration...&amp;amp;quot;&lt;br /&gt;
  signal reload&lt;br /&gt;
  echo &amp;amp;quot; done.&amp;amp;quot;&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
force-reload|restart)&lt;br /&gt;
  if [ &amp;amp;quot;x$RUN&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo -n &amp;amp;quot;Restarting ProFTPD ftp daemon.&amp;amp;quot;&lt;br /&gt;
  signal stop&lt;br /&gt;
  echo -n &amp;amp;quot;.&amp;amp;quot;&lt;br /&gt;
  sleep 2&lt;br /&gt;
  echo -n &amp;amp;quot;.&amp;amp;quot;&lt;br /&gt;
  start&lt;br /&gt;
  echo &amp;amp;quot; done.&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;ProFTPd is started from inetd.&amp;amp;quot;&lt;br /&gt;
  else &lt;br /&gt;
  echo &amp;amp;quot;ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  ;;&lt;br /&gt;
 *)&lt;br /&gt;
  echo &amp;amp;quot;Usage: /etc/init.d/$NAME {start|force-start|stop|force-stop|reload|restart|force-reload}&amp;amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
  ;;&lt;br /&gt;
  esac&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez redémarrer le serveur ProFTPd pour appliquer la configuration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/proftpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que la configuration est faite, nous allons voir comment gérer les utilisateurs à travers la base de données.&lt;br /&gt;
&lt;br /&gt;
Je vous conseille d&#039;utiliser PHPMyAdmin pour ceux qui ne connaissent pas le langage SQL.&lt;br /&gt;
&lt;br /&gt;
=== Gestion des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur &#039;test&#039; avec un mot de passe &#039;pwd&#039;. Cet utilisateur a accès au repertoire &#039;/home/ftp/test&#039; avec les droits de l&#039;utilisateur (UID) 5500, et de groupe (GID) 5500, sans shell (&#039;/bin/false&#039;).&lt;br /&gt;
&lt;br /&gt;
La valeur &#039;LoginAllowed&#039; est mise à &#039;true&#039; pour autoriser la connection de cet utilisateur, à &#039;false&#039; pour l&#039;interdire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES (&#039;&#039;, &#039;test&#039;, ENCRYPT(&#039;pwd&#039;), &#039;5500&#039;, &#039;5500&#039;, &#039;/home/ftp/test&#039;, &#039;/bin/false&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;true&#039; ); &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;count&#039; représente le nombre d&#039;authentifications effectuées par cet utilisateur,&amp;lt;br /&amp;gt; &#039;accessed&#039; la date du dernier accès et&amp;lt;br /&amp;gt; &#039;modified&#039; la date de la dernière écriture.&lt;br /&gt;
&lt;br /&gt;
==== Suppression d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Suppression de l&#039;utilisateur &#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpuser` WHERE `userid`=&#039;test&#039;;&amp;lt;br /&amp;gt; DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des groupes ===&lt;br /&gt;
&lt;br /&gt;
==== Affecter un utilisateur à un groupe ====&lt;br /&gt;
&lt;br /&gt;
Affecte l&#039;utilisateur &#039;test&#039; au groupe &#039;group_test&#039; avec les droits de groupe (GID) du groupe 5500&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES (&#039;group_test&#039;, &#039;5500&#039;, &#039;test&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Enlever un utilisateur d&#039;un groupe ====&lt;br /&gt;
&lt;br /&gt;
Enlève l&#039;utilisateur &#039;test&#039; du groupe &#039;group_test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des quotas ===&lt;br /&gt;
&lt;br /&gt;
La table &#039;ftpquotalimits&#039; contient la description des quotas.&amp;lt;br /&amp;gt; La table &#039;ftpquotatotal&#039; contient les statistiques d&#039;utilisation correspondant aux règles des quotas défini dans la table &#039;ftpquotalimits&#039;. Cette table permet à ProFTPd de gérer les quotas.&lt;br /&gt;
&lt;br /&gt;
==== Ajouter une règles de quotas ====&lt;br /&gt;
&lt;br /&gt;
Exécuter la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpquotalimits` ( `name`, `quota_type`, `par_session`, `limit_type`, `bytes_up_limit`, `bytes_down_limit`, `bytes_transfer_limit`, `files_up_limit`, `files_down_limit`, `files_transfer_limit` )&amp;lt;br /&amp;gt; VALUES ( &#039;NOM&#039; , &#039;TYPE&#039;, &#039;SESSION&#039;, &#039;LIMIT_TYPE&#039;, &#039;B_UP&#039;, &#039;B_DOWN&#039;, &#039;B_TRANS&#039;, &#039;F_UP&#039;, &#039;F_DOWN&#039;, &#039;F_TRANS&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
où&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; : nom de l&#039;utilisateur, du groupe ou de la règle selon la valeur de &#039;&#039;&#039;quota_type&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;quota_type&#039;&#039;&#039; : &#039;user&#039; si le quota s&#039;applique à un utilisateur, &#039;group&#039; à un groupe, &#039;class&#039; à une classe (ici inutile), &#039;all&#039; à tous les utilisateurs.&lt;br /&gt;
* &#039;&#039;&#039;par_session&#039;&#039;&#039; : &#039;true&#039; si les quotas doivent être remis à zéro à chaque nouvelle session, &#039;false&#039; sinon. (&#039;false&#039; est conseillé).&lt;br /&gt;
* &#039;&#039;&#039;limit_type&#039;&#039;&#039; : &#039;soft&#039; pour une mesure logicielle de la taille, &#039;hard&#039; pour une mesure hardware.&lt;br /&gt;
* &#039;&#039;&#039;bytes_up_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à être uploadé sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;bytes_down_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* &#039;&#039;&#039;bytes_transfer_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
* &#039;&#039;&#039;files_up_limit&#039;&#039;&#039; : nombre de fichiers autorisé à être uploadé sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;files_down_limit&#039;&#039;&#039; : nombre de fichiers autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* &#039;&#039;&#039;files_transfer_limit&#039;&#039;&#039; : nombre de fichiers autorisé à transféré sur et à partir du serveur (upload+download).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Pour définir un quota illimité à l&#039;un des champs, mettez une valeur négative ou nulle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Les quotas de type &#039;all&#039;, &#039;class&#039; ou &#039;group&#039; ne définissent pas un quota pour chaque utilisateur mais un quota partagé par tous les utlisateurs concernés par cette règle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réinitialiser les quotas ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de supprimer l&#039;entrée (ligne) correspondant à la règle devant être réinitialisé. Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpquotatotal` WHERE `name`=&#039;test&#039; AND `quota_type`=&#039;user&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez réinitialiser tous les quotas, par exemple tous les mois, faîtes une tâche cron se connectant sur le serveur et exécutant la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;TRUNCATE TABLE `ftpquotatotal`;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Et voilà, c&#039;est terminé... Vous n&#039;avez plus qu&#039;à tester ;-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par space2d le 24/04/2005.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 24/04/2005, space2d&lt;br /&gt;
{{FDL}}&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13756</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13756"/>
		<updated>2006-09-25T17:26:55Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.com&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.com &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.com&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.com&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop`)&lt;br /&gt;
       VALUES (&#039;user@domain.com&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.com -&amp;gt; user1@domain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.com -&amp;gt; user1@domain.com,user1@otherdomain.com (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.com -&amp;gt; catchall@domain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.com -&amp;gt; @otherdomain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.com via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.com ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo espace.fr.to&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.com&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@espace.fr.to&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.com&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.com&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.com&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.com&lt;br /&gt;
/var/spool/vmail/domain.com/user&lt;br /&gt;
/var/spool/vmail/domain.com/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.com/user/cur&lt;br /&gt;
/var/spool/vmail/domain.com/user/new&lt;br /&gt;
/var/spool/vmail/domain.com/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.com/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.com&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{FDL}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Proposition_d%27article&amp;diff=13755</id>
		<title>Proposition d&#039;article</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Proposition_d%27article&amp;diff=13755"/>
		<updated>2006-09-25T17:07:20Z</updated>

		<summary type="html">&lt;p&gt;Space2d : /* Rubrique : Le réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Proposition d&#039;article =&lt;br /&gt;
Indiquer ici les articles qui manquent et que vous vous proposez de créer, puis créez les ! Si vous avez besoin de mettre des images dans votre article, n&#039;hésitez pas à demander à Léa les [[Lea_Linux:Groupe_Editeur|droit d&#039;éditeurs]]. &#039;&#039;&#039;Ne mettez pas&#039;&#039;&#039; des articles que vous désireriez voir écrits par quelqu&#039;un d&#039;autre que vous ! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;cadre type=alert&amp;gt;&#039;&#039;&#039;Note :&#039;&#039;&#039; pour proposer un nouveau truc ou une nouvelle astuce, utiliser [[Trucs:Proposition_d&#039;un_truc|cette page]].&amp;lt;/cadre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il suffit d&#039;insérer dans la section qui correspond à votre article, quelque chose du genre : &lt;br /&gt;
* exemple : &amp;lt;nowiki&amp;gt;[[Nom de l&#039;article]]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
qui donnera : &lt;br /&gt;
* exemple : [[Nom de l&#039;article]] (SVP ne créez pas l&#039;article &#039;&#039;&#039;Nom de l&#039;article&#039;&#039;&#039;).&lt;br /&gt;
== Rubrique : Installation ==&lt;br /&gt;
* [[UBUNTU et eagle-usb]] [[Utilisateur: mujma|Marc UJMA]]&lt;br /&gt;
* [[Guide d&#039;installation Linux SuSE 10.0 pas à pas]] leibowitz 29 janvier 2006&lt;br /&gt;
* [[Guide d&#039;installation et de configuration de Fluxbox,Conky, Idesk, Fbpager]] pingadaroça 31/01/06&lt;br /&gt;
* [[L&#039;erreur est humaine, ou bienvenue dans le monde de l&#039;informatique libre]] (à caser dans philo et histoire je pense, ou dans découvrir Linux... bref on verra ça après) --[[Utilisateur:Linux.tar.gz|Linux.tar.gz]] 7 sep 2006 à 17:01 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : X Window ==&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Logiciels ==&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Matériel ==&lt;br /&gt;
[[Le X10 et Linux]]&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
&lt;br /&gt;
* [[Hardware-hard_plus-matos_bis]]&lt;br /&gt;
* [[AC775|Carte PCMCIA GPRS/EDGE Sierra Wireless AC775]]&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Le réseau ==&lt;br /&gt;
* [[Streaming mp3 avec Icecast2 et ices]]. --[[Utilisateur:CoKe|CoKe]] 4 avr 2006 à 16:04 (CEST)&lt;br /&gt;
* [[Debian GNU/Linux et IPv6]]. [[Utilisateur: Thomas Carlu|Thomas Carlu]] 25 oct 2005 à 1:15 (CEST)&lt;br /&gt;
* [[Sécurité des réseaux WIFI]]. --[[Utilisateur:Maston28|Maston28]] 13 nov 2005 à 16:30 (CET)&lt;br /&gt;
* [[Configurer le wifi avec une livebox, freebox etc...]] par Samiche, avril 2006&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[Tunnels ethernet avec openssh]]. --[[Utilisateur:Misc|Misc]] 12 fév 2006 à 13:30 (CET)&lt;br /&gt;
* [[Créer un point d&#039;accès sécurisé avec hostAPd]] --[[Utilisateur:Glandos|Glandos]] 26 avr 2006 à 23:16 (CEST)&lt;br /&gt;
*[[Postfix-courier-mysql-quota-spamassassin-amavis]] --[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:07 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Administrer ==&lt;br /&gt;
* [[Arrêter Windows et son routeur Linux]], [[Utilisateur:Vivecom|Vivecom]] 26 nov 2005 à 16:40 (CET)&lt;br /&gt;
* [[S&#039;identifier par une clé USB]], [[Utilisateur:thomas debay]] 28 fév 2006&lt;br /&gt;
* [[Les sauvegardes]], [[Utilisateur:oudoubah|oudoubah]] 05 sep 2006&lt;br /&gt;
&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[Gestion des ACL]] (ou [[ACL]] pour le titre). [[Utilisateur:Vincent Ramos|Vincent Ramos]] 24 oct 2005 à 23:00 (CEST)&lt;br /&gt;
::Fait. Bien qu&#039;améliorable, l&#039;article me semble complet. [[Utilisateur:Vincent Ramos|Vincent Ramos]] 26 oct 2005 à 00:22 (CEST) ;&lt;br /&gt;
* [[Attributs étendus]] (&#039;&#039;chattr&#039;&#039; sur ext2 et ext3, outils efs2progs) [[Utilisateur:Vincent Ramos|Vincent Ramos]] 26 oct 2005 à 17:40 (CEST)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Noyau et modules ==&lt;br /&gt;
&lt;br /&gt;
* [[RT2500]] : compilation et installation du modules RT2500 Pour les cartes wifi , essai avec la carte &#039;&#039;&#039;PCI PC54G2&#039;&#039;&#039; , Auteur: Laplaine Freddy, Alias mr_pupu[corbeille]&lt;br /&gt;
&lt;br /&gt;
=== Publiés ===&lt;br /&gt;
* [[HOWTO Dkms]] : Utiliser dkms pour gérer ses drivers dynamiquement et facilement&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Développer ==&lt;br /&gt;
&lt;br /&gt;
* [[Ocaml]] : une présentation du langage ocaml&lt;br /&gt;
*[[FreePascal]] : Un langage familier pour nombre de développeurs [[Utilisateur: mujma|Marc UJMA]]&lt;br /&gt;
*[[Trucs:Obtenir le code HTML d&#039;un glyphe]] [[Utilisateur:Nicola|Nicola]] 2 jan 2006 à 19:10 (CET)&lt;br /&gt;
&lt;br /&gt;
== Rubrique : Léavancé ==&lt;br /&gt;
&lt;br /&gt;
* [[Virtualisation avec Xen]]&lt;br /&gt;
* [[OpenMosix]] axé Slackware mais applicable à d&#039;autres distributions&lt;br /&gt;
* [[Compilation Distribuée]] ou comment accélérer ses compilations&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13754</id>
		<title>Postfix Courier MySQL Quota SpamAssassin Amavis</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Postfix_Courier_MySQL_Quota_SpamAssassin_Amavis&amp;diff=13754"/>
		<updated>2006-09-25T17:05:21Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;Postfix, Courier Imap &amp;amp;amp; Pop, MySQL et Quota avec filtre AntiSpam et antivirus sous Debian&amp;lt;/h1&amp;gt;&lt;br /&gt;
Par [[Utilisateur:Space2d|Space2d]]&lt;br /&gt;
Page d&#039;origine sur [http://www.espace.fr.to/howto/postfix-courier-mysql-quota-spamassassin-amavis.html www.espace.fr.to/howto]&lt;br /&gt;
&lt;br /&gt;
Le but de cet howto est d&#039;expliquer comment mettre en place un serveur email complet, supportant plusieurs domaines sous Debian GNU/Linux.&lt;br /&gt;
Celui-ci sera composé des éléments suivants :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur smtp : Postfix (avec patch vda supportant la gestion des quotas)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur imap/pop : Courier&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un serveur mysql : MySQL&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un antivirus : Amavis&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;un filtre antispam : SpamAssassin&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Introduction&amp;lt;/h2&amp;gt;&lt;br /&gt;
Au début, j&#039;utilisais le serveur de courier postfix avec la configuration&lt;br /&gt;
d&#039;origine utilisant l&#039;authentification unix. J&#039;ai eu besoin de servir plusieurs domaines ainsi que des comptes mails virtuels.&lt;br /&gt;
En effet, l&#039;utilisation des utilisateurs unix n&#039;est pas adaptée à une configuration multidomaine.&lt;br /&gt;
Désormais, je peux administrer facilement mes domaines et comptes email via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
Il est aussi possible de créer une interface spécifique à cette gestion par exemple en utilisant php &lt;br /&gt;
&amp;lt;h2&amp;gt;Prérequis&amp;lt;/h2&amp;gt;&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
Cette documentation est écrite pour un système Debian GNU/linux&lt;br /&gt;
&amp;lt;h2&amp;gt;La base de données&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Description de la structure&amp;lt;/h3&amp;gt;&lt;br /&gt;
Cette base de données sera structurée dans les 4 tables suivantes :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les domaines&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;domaine&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les emails&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;mot de passe&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;quota&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès pop3 (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;accès imap (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;les alias&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;email&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;alias (contient une liste d&#039;emails séparés par une virgule vers lesquels seront dirigés les emails reçu par &#039;email&#039;)&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;compte email actif (1 pour oui, 0 pour non)&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt; &lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;h3&amp;gt;Creation de la base et de l&#039;utilisateur SQL&amp;lt;/h3&amp;gt;&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;si vous n&#039;avez jamais modifier les utilisateurs de la base, vous puvez acceder à la base de données en tant que root sans mot de passe.&lt;br /&gt;
     Il est conseillé d&#039;ajouter un mot de passe un root pour d&#039;évidente questions de sécurité avec la commande :&lt;br /&gt;
     &amp;lt;code&amp;gt;mysqladmin -u root password votre-mot-de-passe&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : postfix) et les tables qu&#039;elle contient.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE DATABASE `postfix`;&lt;br /&gt;
USE postfix;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `domain`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `domain` (&lt;br /&gt;
  `domain` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`domain`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Domaines Virtuels&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `mailbox`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `mailbox` (&lt;br /&gt;
  `email` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `password` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `quota` int(10) NOT NULL default &#039;0&#039;,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `imap` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  `pop3` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Boites Emails Virtuelles&#039;;&lt;br /&gt;
&lt;br /&gt;
-- &lt;br /&gt;
-- Structure de la table `alias`&lt;br /&gt;
-- &lt;br /&gt;
CREATE TABLE `alias` (&lt;br /&gt;
  `source` varchar(255) NOT NULL default &#039;&#039;,&lt;br /&gt;
  `destination` text NOT NULL,&lt;br /&gt;
  `actif` tinyint(1) NOT NULL default &#039;1&#039;,&lt;br /&gt;
  PRIMARY KEY  (`email`)&lt;br /&gt;
) ENGINE=MyISAM COMMENT=&#039;Postfix Admin - Alias Virtuels&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Ensuite, les différents services doivent accéder à cette base de données. Pour des raisons de sécurité évidentes,&lt;br /&gt;
il est nécessaire de créer un utilisateur MySQL qui n&#039;a accès qu&#039;en lecture (SELECT) à la base &#039;postfix&#039;. &lt;br /&gt;
Pour l&#039;exemple, celui-ci s&#039;appelera &#039;postfix&#039; avec comme mot de passe &#039;pass&#039;.&lt;br /&gt;
Pour le créer, il suffit de taper les commandes suivantes dans la console MySQL :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
GRANT SELECT ON `postfix`.* TO &#039;postfix&#039;@&#039;%&#039;&lt;br /&gt;
IDENTIFIED BY &#039;pass&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Postfix&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour l&#039;instant, Postfix ne supporte pas les quotas en natif. Cependant, le patch VDA offre cette possibilité.&lt;br /&gt;
Pour ne pas recompiler postfix en intégrant le patch VDA, nous allons utiliser le dépot de paquets non-officiel pour Debian : [http://debian.home-dn.net http://debian.home-dn.net]&lt;br /&gt;
Il faut ajouter les lignes suivantes à la liste des dépots de votre serveur dans le fichier &amp;lt;code&amp;gt;/etc/apt/sources.list&amp;lt;/code&amp;gt; (vous devez être logué en root pour pouvoir modifier ce fichier) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#postfix VDA&lt;br /&gt;
deb http://debian.home-dn.net/sarge postfix-vda/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il suffit de mettre à jour la liste des paquets et d&#039;intaller les paquets necessaires (en tant que root) :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install postfix postfix-mysql&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
L&#039;installateur Debian va demander quel type de configuration vous souhaitez utilisez. Dans notre cas, nous allons choisir &amp;quot;Pas de configuration&amp;quot;, afin d&#039;obtenir une configuration vierge.&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons configurer le système courier afin que les emails soient conservés dans un seul repertoire : &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt;.&lt;br /&gt;
Les boites seront rangés (au format maildir) dans un repertoire du type : &lt;br /&gt;
&amp;lt;code&amp;gt;/var/spool/vmail/virtualdomain/virtualmailbox/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Création de l&#039;utilisateur vmail&amp;lt;/h4&amp;gt;&lt;br /&gt;
Ce repertoire sera accessible en lecture et ecriture par un utilisateur nommé vmail (uid:5000,gid:5000) que nous allons créer ainsi :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
groupadd -g 5000 vmail&lt;br /&gt;
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichier de configuration principal&amp;lt;/h4&amp;gt;&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/postfix/main.cf&amp;lt;/code&amp;gt; définit les paramètres principaux du serveur postfix, notamment les paramètres des domaines virtuels.&lt;br /&gt;
Le fichier ci-après contient une configuration complète de postfix. Si vous avez déjà un tel fichier et que vous souhaitez seulement ajouter &lt;br /&gt;
le support des domaines virtuel mysql, il faut copier les directives commençant par virtual_...&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# /etc/postfix/main.cf&lt;br /&gt;
# Configuration Postfix&lt;br /&gt;
# espace.fr.to&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
smtpd_banner = $myhostname ESMTP (Debian/GNU)&lt;br /&gt;
biff = no&lt;br /&gt;
disable_vrfy_command = yes&lt;br /&gt;
smtpd_helo_required = yes&lt;br /&gt;
&lt;br /&gt;
# ajoute le domaine aux emails de la distribution locale&lt;br /&gt;
# ainsi vous pourrez envoyer des emails sans @domain.com&lt;br /&gt;
# par la commande sendmail&lt;br /&gt;
mydomain = domain.com &lt;br /&gt;
append_dot_mydomain = yes&lt;br /&gt;
&lt;br /&gt;
# Envoi une alerte de dépassement de délai par email&lt;br /&gt;
#delay_warning_time = 4h&lt;br /&gt;
&lt;br /&gt;
myhostname = smtp.domain.com&lt;br /&gt;
&lt;br /&gt;
# domaine de distribution local&lt;br /&gt;
mydestination = localhost, localhost.localdomain&lt;br /&gt;
&lt;br /&gt;
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist&lt;br /&gt;
# à cause de votre IP&lt;br /&gt;
relayhost =&lt;br /&gt;
&lt;br /&gt;
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l&#039;envoi de courier)&lt;br /&gt;
mynetworks = 127.0.0.0/8 192.168.0.0/24&lt;br /&gt;
inet_interfaces = all&lt;br /&gt;
&lt;br /&gt;
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf&lt;br /&gt;
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf&lt;br /&gt;
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf&lt;br /&gt;
virtual_mailbox_base = /var/spool/vmail/&lt;br /&gt;
virtual_uid_maps = static:5000&lt;br /&gt;
virtual_gid_maps = static:5000&lt;br /&gt;
&lt;br /&gt;
virtual_create_maildirsize = yes&lt;br /&gt;
virtual_mailbox_extended = yes&lt;br /&gt;
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
virtual_mailbox_limit_override = yes&lt;br /&gt;
virtual_maildir_limit_message = &amp;quot;Desole, la boite email de l&#039;utilisateur est pleine, essayez plus tard.&amp;quot;&lt;br /&gt;
virtual_overquota_bounce = yes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Fichiers de configuration d&#039;accès à la base de données&amp;lt;/h4&amp;gt;&lt;br /&gt;
Si vous avez un peu lu le fichier précédent, vous avez pu constater que nous faisons appel à des fichiers correspondances (mapping).&lt;br /&gt;
Ces fichiers fournissent les informations permettant à postfix de récupérer la configuration des domaines et emails virtuels dans la base de données crée précédemment.&lt;br /&gt;
&lt;br /&gt;
Vous devez créer les fichiers suivant dans &amp;lt;code&amp;gt;/etc/postfix/&amp;lt;/code&amp;gt; en remplaçant les paramètres par ceux de votre configuration (par exemple : le champ password).&amp;lt;br/&amp;gt;&lt;br /&gt;
Attention! Dans le champs host, n&#039;utilisez pas &#039;localhost&#039;. En effet postfix fonctionne en environnement &amp;quot;chrooté&amp;quot; dans le repertoire  (/var/spool/postfix), il ne peut donc pas accéder aux fichiers hors de ce repertoire notamment /var/run/mysqld/mysqld.sock. Hors, si vous utiliser &#039;localhost&#039;, postfix va essayer d&#039;accéder à ce fichier socket. Pour résoudre le problème nous faisons passer la connection par une connection TCP utilisant la boucle locale (lo) en utilisant l&#039;addresse ip 127.0.0.1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_domains.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = &#039;virtual&#039;&lt;br /&gt;
table = domain&lt;br /&gt;
where_field = domain&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_aliases.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = destination&lt;br /&gt;
table = alias&lt;br /&gt;
where_field = source&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailboxes.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
additional_conditions = AND actif=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# mysql-virtual_mailbox_limit_maps.cf&lt;br /&gt;
hosts = 127.0.0.1&lt;br /&gt;
user = postfix&lt;br /&gt;
password = pass&lt;br /&gt;
dbname = postfix&lt;br /&gt;
select_field = quota&lt;br /&gt;
table = mailbox&lt;br /&gt;
where_field = email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;&lt;br /&gt;
Ces fichiers doivent être accessibles seulement par root et par postfix. En effet, ils contiennent le mot de passe en clair d&#039;accès à la base de données.&lt;br /&gt;
Pour cela il suffit de lancer les commandes suivantes qui change le groupe de ces fichiers par &amp;quot;postfix&amp;quot; et affecte les droits d&#039;accès necessaires :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  chgrp postfix /etc/postfix/mysql-virtual_*.cf&lt;br /&gt;
  chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Redémarrez postfix &amp;lt;code&amp;gt;/etc/init.d/postfix restart&amp;lt;/code&amp;gt; et lancer &amp;lt;code&amp;gt;postfix check&amp;lt;/code&amp;gt; afin de verifier que vous n&#039;avez fait aucune erreur.&lt;br /&gt;
&amp;lt;h2&amp;gt;Courier&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
Le serveur Courier est composé de plusieurs éléments:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur imap&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le serveur pop&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;le démon d&#039;authentification (authdaemon) qui utilise le module approprié à la configuration (authmysql)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Pour installer tout ceci :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Le démon d&#039;authentification&amp;lt;/h4&amp;gt;&lt;br /&gt;
Il faut modifier le fichier &amp;lt;code&amp;gt;/etc/courier/authdaemonrc&amp;lt;/code&amp;gt; pour indiquer à authdaemon qu&#039;il doit utiliser le module mysql. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#authmodulelist=&amp;quot;authpam&amp;quot;&lt;br /&gt;
authmodulelist=&amp;quot;authmysql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis il faut configurer le module authmysql en editant le fichier &amp;lt;code&amp;gt;/etc/courier/authmysqlrc&amp;lt;/code&amp;gt; ainsi:&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
MYSQL_SERVER            localhost&lt;br /&gt;
MYSQL_USERNAME          postfix&lt;br /&gt;
MYSQL_PASSWORD          pass&lt;br /&gt;
MYSQL_DATABASE          postfix&lt;br /&gt;
MYSQL_USER_TABLE        mailbox&lt;br /&gt;
&lt;br /&gt;
MYSQL_CRYPT_PWFIELD     password&lt;br /&gt;
# MYSQL_CLEAR_PWFIELD    clear&lt;br /&gt;
&lt;br /&gt;
MYSQL_UID_FIELD         5000&lt;br /&gt;
MYSQL_GID_FIELD         5000&lt;br /&gt;
&lt;br /&gt;
MYSQL_LOGIN_FIELD       email&lt;br /&gt;
&lt;br /&gt;
MYSQL_HOME_FIELD        &amp;quot;/var/spool/vmail/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&#039;@&#039;,-1),&#039;/&#039;,SUBSTRING_INDEX(email,&#039;@&#039;,1),&#039;/&#039;)&lt;br /&gt;
&lt;br /&gt;
#Ligne à commenter &lt;br /&gt;
# MYSQL_NAME_FIELD       name&lt;br /&gt;
&lt;br /&gt;
MYSQL_QUOTA_FIELD       quota&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Veillez à ne pas mettre d&#039;espace en début de ligne. Courier est très suceptible ;)&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h4&amp;gt;Validation de la configuration&amp;lt;/h4&amp;gt;&lt;br /&gt;
Relancez les démons que vous venez de configurer :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/courier-authdaemon restart&lt;br /&gt;
/etc/init.d/courier-imap restart&lt;br /&gt;
/etc/init.d/courier-pop restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Test de la configuration&amp;lt;/h2&amp;gt;&lt;br /&gt;
Pour effectuer nos tests, nous allons créer un compte email &#039;test&#039; ainsi que le domain &#039;domain.com&#039; par les requêtes SQL suivantes :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
INSERT INTO `domain` (`domain`,`actif`) VALUES (&#039;test&#039;,1);&lt;br /&gt;
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop`)&lt;br /&gt;
       VALUES (&#039;user@domain.com&#039;,ENCRYPT(&#039;secret&#039;),0,1,1,1);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Remplissage de la base de données&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour plus de détail, referez-vous à [[#BD_structure]].&lt;br /&gt;
&amp;lt;h4&amp;gt;Domaines&amp;lt;/h4&amp;gt;Pour chaque domaine, inserez une ligne dans la table &#039;domain&#039; avec le champs actif à 1. &lt;br /&gt;
&amp;lt;h4&amp;gt;Boites emails&amp;lt;/h4&amp;gt;Pour chaque email, inserez une ligne dans la table &#039;email&#039; avec le champs actif à 1.&lt;br /&gt;
&amp;lt;h4&amp;gt;Alias&amp;lt;/h4&amp;gt;&lt;br /&gt;
Grâce à la table &#039;alias&#039;, vous pouvez effectuer plusieurs transferts (source-&amp;gt;destination) :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à email : alias@domain.com -&amp;gt; user1@domain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;email à emails : alias@domain.com -&amp;gt; user1@domain.com,user1@otherdomain.com (séparés par une virgule)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;de tous les emails du domaine qui ne sont pas définis vers un email : @domain.com -&amp;gt; catchall@domain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;d&#039;un domain vers un autre : @domain.com -&amp;gt; @otherdomain.com&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Postfix&amp;lt;/h3&amp;gt;&lt;br /&gt;
Nous allons envoyer un email à test@domain.com via la commande telnet :&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
~$ telnet 127.0.0.1 25&lt;br /&gt;
Trying 127.0.0.1...&lt;br /&gt;
Connected to 127.0.0.1.&lt;br /&gt;
Escape character is &#039;^]&#039;.&lt;br /&gt;
220 smtp.domain.com ESMTP (Debian/GNU)&lt;br /&gt;
&amp;lt;b&amp;gt;ehlo espace.fr.to&amp;lt;/b&amp;gt;&lt;br /&gt;
250-smtp.domain.com&lt;br /&gt;
250-PIPELINING&lt;br /&gt;
250-SIZE 10240000&lt;br /&gt;
250-ETRN&lt;br /&gt;
250 8BITMIME&lt;br /&gt;
mail from: &amp;amp;lt;test@espace.fr.to&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
rcpt to: &amp;amp;lt;user@domain.com&amp;amp;gt;&lt;br /&gt;
250 Ok&lt;br /&gt;
250 Ok&lt;br /&gt;
data&lt;br /&gt;
354 End data with &amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;.&amp;amp;lt;CR&amp;amp;gt;&amp;amp;lt;LF&amp;amp;gt;&lt;br /&gt;
Voici le premier mail de test.&lt;br /&gt;
.&lt;br /&gt;
250 Ok: queued as 8ECC524208&lt;br /&gt;
quit&lt;br /&gt;
221 Bye&lt;br /&gt;
Connection closed by foreign host.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Vous pouvez verifier que tout c&#039;est bien dérouler grâce au fichier de log &amp;lt;code&amp;gt;/var/log/mail.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
postfix/smtpd[2036]: connect from localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/smtpd[2036]: 8ECC524208: client=localhost.localdomain[127.0.0.1]&lt;br /&gt;
postfix/cleanup[2067]: 8ECC524208: message-id=&amp;amp;lt;20060923131054.8ECC524208@smtp.domain.com&amp;amp;gt;&lt;br /&gt;
postfix/qmgr[1876]: 8ECC524208: from=&amp;amp;lt;test@espace.fr.to&amp;amp;gt;, size=377, nrcpt=1 (queue active)&lt;br /&gt;
postfix/virtual[2076]: 8ECC524208: to=&amp;amp;lt;user@domain.com&amp;amp;gt;, relay=virtual, delay=0, \&lt;br /&gt;
  status=sent (delivered to maildir)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si vous trouvez la ligne contenant &amp;quot;status=sent (delivered to maildir)&amp;quot;, le mail a bien été reçu.&lt;br /&gt;
Vérifier alors le contenu du repertoire &amp;lt;code&amp;gt;/var/spool/vmail/&amp;lt;/code&amp;gt; avec la commande &amp;lt;code&amp;gt;find /var/spool/vmail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/var/spool/vmail/&lt;br /&gt;
/var/spool/vmail/domain.com&lt;br /&gt;
/var/spool/vmail/domain.com/user&lt;br /&gt;
/var/spool/vmail/domain.com/user/tmp&lt;br /&gt;
/var/spool/vmail/domain.com/user/cur&lt;br /&gt;
/var/spool/vmail/domain.com/user/new&lt;br /&gt;
/var/spool/vmail/domain.com/user/new/1159016974.V301I242fe.titan.espace.fr.to&lt;br /&gt;
/var/spool/vmail/domain.com/user/maildirsize&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Si celà correpond postfix est bien configuré et fonctionne correctement.&lt;br /&gt;
&amp;lt;h3&amp;gt;Test Courier&amp;lt;/h3&amp;gt;&lt;br /&gt;
Utlisez votre client de messagerie avec comme utilisateur &#039;user@domain.com&#039; et mot de passe &#039;secret&#039; pour effectuer ce test.&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention! L&#039;accès imap ou pop echouera si le repertoire de la boite email de l&#039;utilisateur n&#039;existe pas (si vous venez juste d&#039;ajouter l&#039;email dans la base de données). Je vous conseille d&#039;envoyer un email de bienvenue après la création d&#039;une nouvelle boite.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;Amavis (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt; &lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;apt-get install amavisd-new clamav clamav-daemon clamav-freshclam lha arj unrar zoo nomarch lzop unzoo bzip2&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Les packages lha et unrar font partie du dépot non-free de Sarge.&amp;lt;/div&amp;gt;&lt;br /&gt;
Lors de l&#039;installation du package clamav-freshclam, debconf va posez 2 questions :&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Méthode de mise à jour de la base de données des virus :&amp;quot;démon&amp;quot; si vous avez une connexion réseau permanente, &amp;quot;cron&amp;quot; créera une tache cron que vous pourrez modifier à votre convenance.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Miroir de la base de données : (choisissez le plus de proche chez vous)&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Faut-il notifier clamd des mises à jour ? : &amp;quot;Oui&amp;quot;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Afin que l&#039;antivirus clamav puisse lire les fichiers crées par amavis, il faut ajouter l&#039;utilisateur clamav au groupe amavis : &amp;lt;code&amp;gt;adduser clamav amavis&amp;lt;/code&amp;gt;&lt;br /&gt;
Ensuite, vous devez modifier le fichier de cofiguration &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ce domaine correspond au domaine local si vous n&#039;avez pas de domaine local utilisez &#039;localhost&#039;&lt;br /&gt;
$mydomain = &#039;yourdomain.org&#039;;&lt;br /&gt;
&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
&lt;br /&gt;
#amavis doit connaitre les domaines à controler (en effet il controle seulement les mails entrants)&lt;br /&gt;
@lookup_sql_dsn = ( [ &#039;DBI:mysql:postfix;host=127.0.0.1;port=3306&#039;, &#039;postfix&#039;, &#039;pass&#039; ] );&lt;br /&gt;
$sql_select_policy =&lt;br /&gt;
    &#039;SELECT &amp;quot;Y&amp;quot; as local FROM domains WHERE CONCAT(&amp;quot;@&amp;quot;,domain) IN (%k) AND actif=&amp;quot;1&amp;quot;&#039;;&lt;br /&gt;
&lt;br /&gt;
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)&lt;br /&gt;
$final_banned_destiny     = D_BOUNCE;  # (defaults to D_BOUNCE)&lt;br /&gt;
$final_spam_destiny       = D_REJECT;  # (defaults to D_REJECT)&lt;br /&gt;
$final_bad_header_destiny = D_PASS;  # (defaults to D_PASS), D_BOUNCE suggested&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;SpamAssassin (facultatif)&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Installation&amp;lt;/h3&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;apt-get install spamassassin libnet-dns-perl libmail-spf-query-perl \&lt;br /&gt;
                             libnet-ident-perl libio-socket-ssl-perl libsys-hostname-long-perl \&lt;br /&gt;
                             razor pyzor dcc-client&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Configuration&amp;lt;/h3&amp;gt;&lt;br /&gt;
Pour améliorer l&#039;analyse des emails par spamassassin, il faut utiliser le démons spamd.&lt;br /&gt;
Pour cela, modifiez le fichier &amp;lt;code&amp;gt;/etc/default/spamassassin&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;ENABLED=1&amp;lt;/div&amp;gt;&lt;br /&gt;
Puis, relancez le démon spamd : &amp;lt;code&amp;gt;/etc/init.d/spamassassin restart&amp;lt;/code&amp;gt;&lt;br /&gt;
Nous allons utiliser amavis pour appeler le filtre spamasssin. La configuration de Amavis est prête à l&#039;utiliser.&lt;br /&gt;
Il suffit de modifier quelques lignes dans &amp;lt;code&amp;gt;/etc/amavis/amavisd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# @bypass_virus_checks_acl = qw( . );  # uncomment to DISABLE anti-virus code&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );  # uncomment to DISABLE anti-spam code&lt;br /&gt;
#&lt;br /&gt;
# Any setting can be changed with a new assignment, so make sure&lt;br /&gt;
# you do not unintentionally override these settings further down!&lt;br /&gt;
# @bypass_spam_checks_acl  = qw( . );    # No default dependency on spamassassin&lt;br /&gt;
&lt;br /&gt;
$sa_local_tests_only = 0;&lt;br /&gt;
&lt;br /&gt;
$sa_tag_level_deflt = -1000; # note minimal pour ajouter les tags X-Spam... à l&#039;en-tête des emails&lt;br /&gt;
$sa_tag2_level_deflt = 3.5;  # note minimal pour ajouter le tag X-Spam-Flag: YES&lt;br /&gt;
                             # et modifier l&#039;objet&lt;br /&gt;
$sa_kill_level_deflt = 10;   # note à partir de laquelle les mails sont traités comme définis&lt;br /&gt;
                             # par la variable $final_spam_destiny (ici ils sont refusés)&lt;br /&gt;
$sa_spam_subject_tag = &#039;***SPAM*** &#039;; # chaine ajouté à l&#039;objet de l&#039;email&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
&lt;br /&gt;
{{CC-BY-SA}}&lt;br /&gt;
&lt;br /&gt;
--[[Utilisateur:Space2d|Space2d]] 25 sep 2006 à 19:05 (CEST)&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Space2d&amp;diff=11467</id>
		<title>Utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Space2d&amp;diff=11467"/>
		<updated>2006-01-26T11:41:44Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Moi==&lt;br /&gt;
&lt;br /&gt;
Etudiant en Master d&#039;informatique à Luminy (Marseille).&lt;br /&gt;
&lt;br /&gt;
*Developpeur c, java, php, mySQL.&lt;br /&gt;
*Administrateur [http://www.espace.fr.to E-Space] (Debian GNU/Linux)&lt;br /&gt;
*Co-Developpeur de  [http://genea4p.espace.fr.to Genea4p] : logiciel de généalogie en php&lt;br /&gt;
&lt;br /&gt;
==Mes contributions sur lea-linux==&lt;br /&gt;
*[[Reseau-partfic-proftpd_mysql|ProFTPD, MySQL et Quota]]&lt;br /&gt;
&lt;br /&gt;
==Mes autres doc==&lt;br /&gt;
Elles sont accessible à partir de [http://www.espace.fr.to/howto.html http://www.espace.fr.to/howto.html] &lt;br /&gt;
&lt;br /&gt;
* [http://www.espace.fr.to/howto/mrtg/t1.html MRTG]&lt;br /&gt;
* [http://www.espace.fr.to/howto/apache2/t1.html Apache2]&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=11466</id>
		<title>Discussion utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=11466"/>
		<updated>2006-01-26T11:39:14Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=11312</id>
		<title>ProFTPD MySQL et quotas</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=ProFTPD_MySQL_et_quotas&amp;diff=11312"/>
		<updated>2006-01-09T11:46:18Z</updated>

		<summary type="html">&lt;p&gt;Space2d : Correction de l&amp;#039;erreur constatée par SylvainBolay&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Partager ses fichiers]]&lt;br /&gt;
= ProFTPD, MySQL et Quota =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;ProFTPD, MySQL et Quota&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:howto@espace.fr.to Space2d] &amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Exemple d&#039;utilisation du support MySQL pour ProFTPD avec gestion des quotas&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Prérequis ==&lt;br /&gt;
&lt;br /&gt;
Je vous conseille de lire d&#039;abord le didactitiel de DuF : [[Reseau-partfic-proftpd|Introduction à proftpd]]&lt;br /&gt;
&lt;br /&gt;
Il vous faut un système avec un serveur MySQL installé avec si possible un serveur web et PHPMyAdmin pour faciliter l&#039;administration de la BD.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Remarque : ce document peut aussi convenir à la configuration du support PostGreSQL.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Au début, j&#039;utilisais le serveur ProFTPD avec la configuration d&#039;origine (ou presque), donc sur la base de l&#039;authentification unix. J&#039;ai eu besoin de modifier regulièrement les comptes FTP. Ajouter et supprimer les utlisateurs (compte linux) devient vite lourd. Je me suis donc penché sur le support MySQL de ProFTPD et je vous propose mes explications.&lt;br /&gt;
&lt;br /&gt;
Le fait d&#039;utiliser l&#039;authentification de ProFTPD par base de données vous permet, par exemple, de faire une page php de configuration ou d&#039;administrer facilement vos comptes ftp via l&#039;interface Web PHPMyAdmin.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Soit vous installez ProFTPD à partir de package. (Soyez sur que le package va installer le support MySQL)&lt;br /&gt;
* Soit à partir des sources.&lt;br /&gt;
&lt;br /&gt;
=== Sous Debian (apt) ===&lt;br /&gt;
&lt;br /&gt;
Il suffit de taper en tant que &#039;&#039;&#039;root&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;#apt-get install proftpd-mysql&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A partir des sources ===&lt;br /&gt;
&lt;br /&gt;
Téléchargez les sources en allant sur le [http://www.proftpd.org site de proftpd] pour obtenir la version la plus récente.&lt;br /&gt;
&lt;br /&gt;
Décompressez-les et lancez la compilation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;tar jxvf proftpd-&#039;&#039;version&#039;&#039;.tar.bz2&amp;lt;br /&amp;gt; cd proftpd-&#039;&#039;version&#039;&#039;&amp;lt;br /&amp;gt; ./configure\&amp;lt;br /&amp;gt; --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql\&amp;lt;br /&amp;gt; --with-includes=/usr/include/mysql\&amp;lt;br /&amp;gt; --with-libraries=/usr/lib&amp;lt;br /&amp;gt; make&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et en tant que &#039;&#039;&#039;root&#039;&#039;&#039; : &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Créer un groupe &#039;&#039;ftpgroup&#039;&#039; avec un GID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;groupadd -g 5500 ftpgroup&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Explications :====&lt;br /&gt;
* &#039;&#039;&#039;groupadd&#039;&#039;&#039; : invoque la commande d&#039;ajout de groupe.&lt;br /&gt;
* &#039;&#039;&#039;-g 5500&#039;&#039;&#039; : défini le GID (numéro identifiant) du groupe.&lt;br /&gt;
* &#039;&#039;&#039;ftpgroup&#039;&#039;&#039; : défini le nom du group.&lt;br /&gt;
&lt;br /&gt;
Créer un utilisateur &#039;&#039;ftpuser&#039;&#039; avec un UID de 5500 :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=code&amp;gt;useradd -u 5500 -s /bin/false -d /bin/null -c &amp;quot;proftpd user&amp;quot; -g ftpgroup ftpuser&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Explications :====&lt;br /&gt;
* &#039;&#039;&#039;useradd&#039;&#039;&#039; : invoque la commande d&#039;ajout d&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-u 5500&#039;&#039;&#039; : défini l&#039;UID (numéro identifiant) de l&#039;utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-s /bin/false&#039;&#039;&#039; : défini le shell utilisé pour cet utilisateur, en l&#039;occurence, aucun puisque la connection sur une console linux est désactivée pour cet utilisateur.&lt;br /&gt;
* &#039;&#039;&#039;-d /bin/null&#039;&#039;&#039; : défini le répertoire de l&#039;utilisateur, également inexistant.&lt;br /&gt;
* &#039;&#039;&#039;-c &amp;quot;proftp user&amp;quot;&#039;&#039;&#039; : commentaire.&lt;br /&gt;
* &#039;&#039;&#039;-g ftpgroup&#039;&#039;&#039; : ajoute l&#039;utilisateur &#039;&#039;ftpuser&#039;&#039; au group &#039;&#039;ftpgroup&#039;&#039; précédemment créé.&lt;br /&gt;
* &#039;&#039;&#039;ftpuser&#039;&#039;&#039; : défini le nom de l&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
Le groupe et l&#039;utilisateur ainsi créés serviront de lien entre les utilisateurs créés dans la base MySQL et le système d&#039;authentification/droits du système.&lt;br /&gt;
&lt;br /&gt;
=== La base de données ===&lt;br /&gt;
&lt;br /&gt;
Entrez dans l&#039;interface de la base de données :&lt;br /&gt;
&lt;br /&gt;
* si vous n&#039;avez jamais modifié les utilisateurs de la base : &amp;lt;code&amp;gt;mysql -u root&amp;lt;/code&amp;gt;&lt;br /&gt;
* sinon (avec un utilisateur/pwd ayant le droit de modifier la base): &amp;lt;code&amp;gt;mysql -u &#039;&#039;utilisateur&#039;&#039; -p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut tout d&#039;abord créer la base de données (ex : proftpd) et les tables qu&#039;elle contient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt; CREATE DATABASE `proftpd`;&amp;lt;br /&amp;gt; USE proftpd;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpgroup`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpgroup` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `groupname` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `members` varchar(16) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; KEY `groupname` (`groupname`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des groupes ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotalimits`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotalimits` (&amp;lt;br /&amp;gt; `name` varchar(30) default NULL,&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `par_session` enum(&#039;false&#039;,&#039;true&#039;) NOT NULL default &#039;false&#039;,&amp;lt;br /&amp;gt; `limit_type` enum(&#039;soft&#039;,&#039;hard&#039;) NOT NULL default &#039;soft&#039;,&amp;lt;br /&amp;gt; `bytes_up_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_limit` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_limit` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_limit` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpquotatotal`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpquotatotal` (&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `name` varchar(30) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `quota_type` enum(&#039;user&#039;,&#039;group&#039;,&#039;class&#039;,&#039;all&#039;) NOT NULL default &#039;user&#039;,&amp;lt;br /&amp;gt; `bytes_up_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_down_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `bytes_transfer_total` float NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_up_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_down_total` int(10) unsigned NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `files_transfer_total` int(10) unsigned NOT NULL default &#039;0&#039;&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des compteurs des quotas ProFTPD&#039;;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; -- Table structure for table `ftpuser`&amp;lt;br /&amp;gt; -- &amp;lt;br /&amp;gt; CREATE TABLE `ftpuser` (&amp;lt;br /&amp;gt; `id` int(10) unsigned NOT NULL auto_increment,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `userid` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `passwd` varchar(32) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `uid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt; `gid` smallint(6) NOT NULL default &#039;5500&#039;,&amp;lt;br /&amp;gt;&amp;lt;nowiki&amp;gt; `homedir` varchar(255) NOT NULL default &#039;&#039;,&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt; `shell` varchar(16) NOT NULL default &#039;/bin/false&#039;,&amp;lt;br /&amp;gt; `count` int(11) NOT NULL default &#039;0&#039;,&amp;lt;br /&amp;gt; `accessed` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `modified` datetime NOT NULL default &#039;0000-00-00 00:00:00&#039;,&amp;lt;br /&amp;gt; `LoginAllowed` enum(&#039;true&#039;,&#039;false&#039;) NOT NULL default &#039;true&#039;,&amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; ) TYPE=MyISAM COMMENT=&#039;Table des utlisateurs ProFTPD&#039;; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite il faut créer un nouvel utilisateur (ex : proftpd) avec un mot de passe (ex : password) qui a seulement les droits de lire les données de la base proftpd:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;GRANT USAGE ON proftpd.* TO &#039;&#039;&#039;proftpd&#039;&#039;&#039;@&#039;localhost&#039;&amp;lt;br /&amp;gt; IDENTIFIED BY &#039;&#039;&#039;password&#039;&#039;&#039; WITH GRANT OPTION;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Si votre serveur MySQL n&#039;est pas sur la même machine que ProFTPD remplacez localhost par le nom de la machine (du serveur MySQL) ou par *&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration de ProFTPD ===&lt;br /&gt;
&lt;br /&gt;
Editez le fichier &amp;lt;code&amp;gt;/etc/proftpd.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
ou &amp;lt;code&amp;gt;/usr/local/etc/proftpd.conf&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;# Configuration de base&amp;lt;br /&amp;gt; # =====================&amp;lt;br /&amp;gt; ServerName &amp;quot;Mon serveur FTP&amp;quot;&amp;lt;br /&amp;gt; ServerType standalone&amp;lt;br /&amp;gt; ServerIdent on &amp;quot;Bienvenue sur mon ftp. Veuillez-vous identifiez&amp;quot;&amp;lt;br /&amp;gt; DeferWelcome on&amp;lt;br /&amp;gt; ServerAdmin &amp;quot;ftp_admin@mydomain.com&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; MultilineRFC2228 on&amp;lt;br /&amp;gt; DefaultServer on&amp;lt;br /&amp;gt; ShowSymlinks on&amp;lt;br /&amp;gt; AllowOverwrite on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; TimeoutNoTransfer 600&amp;lt;br /&amp;gt; TimeoutStalled 600&amp;lt;br /&amp;gt; TimeoutIdle 1200&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; ListOptions &amp;quot;-l&amp;quot;&amp;lt;br /&amp;gt; Defaultroot ~&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; DenyFilter \*.*/&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Port 21&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # A configurer selon sa connection&amp;lt;br /&amp;gt; # ================================&amp;lt;br /&amp;gt; MaxInstances 6&amp;lt;br /&amp;gt; MaxLoginAttempts 3&amp;lt;br /&amp;gt; MaxClientsPerUser 10&amp;lt;br /&amp;gt; MaxClientsPerHost 2&amp;lt;br /&amp;gt; MaxHostsPerUser 4&amp;lt;br /&amp;gt; MaxClients 6 &amp;quot;Limite a 6 utilisateurs&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # ProFTPD est exécuté avec des droits réduits&amp;lt;br /&amp;gt; # ============================================&amp;lt;br /&amp;gt; User nobody&amp;lt;br /&amp;gt; Group nogroup&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; Umask 022&amp;lt;br /&amp;gt; AllowStoreRestart on&amp;lt;br /&amp;gt; AllowRetrieveRestart on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod MySQL&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; # Les mots de passe sont cryptés dans la base avec la fct ENCRYPT (MySQL)&amp;lt;br /&amp;gt; SQLAuthTypes Plaintext Crypt&amp;lt;br /&amp;gt; SQLAuthenticate users* groups*&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Modifiez cette ligne selon l&#039;utilisateur et le mot de passe définit plus tôt&amp;lt;br /&amp;gt; SQLConnectInfo &#039;&#039;proftpd@localhost proftpd password&#039;&#039;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table usertable&amp;lt;br /&amp;gt; SQLUserInfo ftpuser userid passwd uid gid homedir shell&amp;lt;br /&amp;gt; SQLUserWhereClause &amp;quot;LoginAllowed = &#039;true&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # On donne à ProFTPD le nom des colonnes de la table &amp;quot;grouptable&amp;quot;&amp;lt;br /&amp;gt; SQLGroupInfo ftpgroup groupname gid members&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Créer le repertoire home de l&#039;utilisateur si il n&#039;existe pas&amp;lt;br /&amp;gt; SQLHomedirOnDemand on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Met à jour les compteurs à chaque connection d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog PASS updatecount&amp;lt;br /&amp;gt; SQLNamedQuery updatecount UPDATE &amp;quot;count=count+1, accessed=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; #Met à jour les compteurs à chaque upload ou download d&#039;un utilisateur&amp;lt;br /&amp;gt; SQLLog STOR,DELE modified&amp;lt;br /&amp;gt; SQLNamedQuery modified UPDATE &amp;quot;modified=now() WHERE userid=&#039;%u&#039;&amp;quot; ftpuser&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Mod quota&amp;lt;br /&amp;gt; # =========&amp;lt;br /&amp;gt; QuotaEngine on&amp;lt;br /&amp;gt; QuotaDirectoryTally on&amp;lt;br /&amp;gt; QuotaDisplayUnits Mb&amp;lt;br /&amp;gt; QuotaShowQuotas on&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Définit les requêtes SQL pour que ProFTPd recupere les infos sur les quotas&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-limit SELECT &amp;quot;name, quota_type, par_session, limit_type, bytes_up_limit, bytes_down_limit, bytes_transfer_limit, files_up_limit, files_down_limit, files_transfer_limit FROM ftpquotalimits WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery get-quota-tally SELECT &amp;quot;name, quota_type, bytes_up_total, bytes_down_total, bytes_transfer_total, files_up_total, files_down_total, files_transfer_total FROM ftpquotatotal WHERE name = &#039;%{0}&#039; AND quota_type = &#039;%{1}&#039;&amp;quot;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery update-quota-tally UPDATE &amp;quot;bytes_up_total = bytes_up_total + %{0}, bytes_down_total = bytes_down_total + %{1}, bytes_transfer_total = bytes_transfer_total + %{2}, files_up_total = files_up_total + %{3}, files_down_total = files_down_total + %{4}, files_transfer_total = files_transfer_total + %{5} WHERE name = &#039;%{6}&#039; AND quota_type = &#039;%{7}&#039;&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; SQLNamedQuery insert-quota-tally INSERT &amp;quot;%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}&amp;quot; ftpquotatotal&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; QuotaLimitTable sql:/get-quota-limit&amp;lt;br /&amp;gt; QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; RootLogin off&amp;lt;br /&amp;gt; RequireValidShell off&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Gestion des logs&amp;lt;br /&amp;gt; # ================&amp;lt;br /&amp;gt; # Enregistre les requêtes SQL dans /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; SQLLogFile /var/log/proftpd/mysql.log&amp;lt;br /&amp;gt; # Enregistre les authentifications&amp;lt;br /&amp;gt; LogFormat auth &amp;quot;%v [%P] %h %t \&amp;quot;%r\&amp;quot; %s&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/auth.log AUTH auth&amp;lt;br /&amp;gt; # Enregistre les accès aux fichiers&amp;lt;br /&amp;gt; LogFormat write &amp;quot;%h %l %u %t \&amp;quot;%r\&amp;quot; %s %b&amp;quot;&amp;lt;br /&amp;gt; ExtendedLog /var/log/proftpd/access.log WRITE,READ write&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; # Recupère le nom à partir de l&#039;ip de la machine de l&#039;utilisateur ( resolution DNS )&amp;lt;br /&amp;gt; IdentLookups on&amp;lt;br /&amp;gt; &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Démarrage de proftpd ===&lt;br /&gt;
&lt;br /&gt;
Il faut désormais créer le script qui va lancer proftpd. Copiez ces lignes dans /etc/init.d/proftpd (sur une Debian par exemple)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;!/bin/sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Start the proftpd FTP daemon.&lt;br /&gt;
&lt;br /&gt;
PATH=/bin:/usr/bin:/sbin:/usr/sbin&amp;lt;br /&amp;gt;&lt;br /&gt;
DAEMON=/usr/sbin/proftpd&amp;lt;br /&amp;gt;&lt;br /&gt;
NAME=proftpd&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Defaults&amp;lt;br /&amp;gt;&lt;br /&gt;
RUN=&amp;amp;quot;no&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
OPTIONS=&amp;amp;quot;&amp;amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PIDFILE=`grep -i &#039;pidfile&#039; /etc/proftpd.conf | sed -e &#039;s/pidfile[\t ]\+//i&#039;`&amp;lt;br /&amp;gt;&lt;br /&gt;
if [ &amp;amp;quot;x$PIDFILE&amp;amp;quot; = &amp;amp;quot;x&amp;amp;quot; ];&amp;lt;br /&amp;gt;&lt;br /&gt;
then&amp;lt;br /&amp;gt;&lt;br /&gt;
PIDFILE=/var/run/proftpd.pid&amp;lt;br /&amp;gt;&lt;br /&gt;
fi&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Read config (will override defaults)&amp;lt;br /&amp;gt;&lt;br /&gt;
[ -r /etc/default/proftpd ] &amp;amp;amp;&amp;amp;amp; . /etc/default/proftpd&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trap &amp;amp;quot;&amp;amp;quot; 1 &amp;lt;br /&amp;gt;&lt;br /&gt;
trap &amp;amp;quot;&amp;amp;quot; 15 &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
test -f $DAEMON || exit 0 &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; Servertype could be inetd|standalone|none. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; In all cases check against inetd and xinetd support. &amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
if ! egrep -qi &amp;amp;quot;^&amp;lt;nowiki&amp;gt;[[:space:]] &amp;lt;/nowiki&amp;gt;*ServerType.*standalone&amp;amp;quot; /etc/proftpd.conf &amp;lt;br /&amp;gt;&lt;br /&gt;
then &amp;lt;br /&amp;gt;&lt;br /&gt;
  if [ $(dpkg-divert --list xinetd|wc -l) -eq 1 ]  &lt;br /&gt;
  then &lt;br /&gt;
  if egrep -qi &amp;amp;quot;server&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*=&amp;lt;nowiki&amp;gt; [[:space:]]&amp;lt;/nowiki&amp;gt;*/usr/sbin/proftpd&amp;amp;quot; /etc/xinetd.conf -o \ &lt;br /&gt;
  egrep -qi &amp;amp;quot;server&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*=&amp;lt;nowiki&amp;gt;[[:space:]] &amp;lt;/nowiki&amp;gt;*/usr/sbin/proftpd&amp;amp;quot; /etc/xinetd.d/* 2&amp;amp;gt;/dev/null &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  if ! egrep -qi &amp;amp;quot;^&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*ServerType.*inetd&amp;amp;quot; /etc/proftpd.conf &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
  else &lt;br /&gt;
  if egrep -qi &amp;amp;quot;^ftp.*/usr/sbin/proftpd&amp;amp;quot; /etc/inetd.conf 2&amp;amp;gt;/dev/null &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  if ! egrep -qi &amp;amp;quot;^&amp;lt;nowiki&amp;gt;[[:space:]]&amp;lt;/nowiki&amp;gt;*ServerType.*inetd&amp;amp;quot; /etc/proftpd.conf &lt;br /&gt;
  then &lt;br /&gt;
  RUN=&amp;amp;quot;yes&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  else &lt;br /&gt;
  RUN=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  INETD=&amp;amp;quot;no&amp;amp;quot; &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
  fi &lt;br /&gt;
&lt;br /&gt;
start()&lt;br /&gt;
{&lt;br /&gt;
    if start-stop-daemon --start --quiet --pidfile &amp;quot;$PIDFILE&amp;quot; \&lt;br /&gt;
        --exec $DAEMON -- $OPTIONS ; then&lt;br /&gt;
        echo &amp;quot;$NAME.&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        echo &amp;quot;.&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
signal()&lt;br /&gt;
  {&lt;br /&gt;
  if [ &amp;amp;quot;$1&amp;amp;quot; = &amp;amp;quot;stop&amp;amp;quot; ]; then&lt;br /&gt;
  SIGNAL=&amp;amp;quot;TERM&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;$1&amp;amp;quot; = &amp;amp;quot;reload&amp;amp;quot; ]; then&lt;br /&gt;
  SIGNAL=&amp;amp;quot;HUP&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  echo &amp;amp;quot;ERR: wrong parameter given to signal()&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  if start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile &amp;amp;quot;$PIDFILE&amp;amp;quot;; then&lt;br /&gt;
  echo &amp;amp;quot;$NAME.&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  SIGNAL=&amp;amp;quot;KILL&amp;amp;quot;&lt;br /&gt;
  if start-stop-daemon --stop --signal $SIGNAL --quiet --pidfile &amp;amp;quot;$PIDFILE&amp;amp;quot;; then&lt;br /&gt;
  echo &amp;amp;quot;$NAME.&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  echo &amp;amp;quot;.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  if [ &amp;amp;quot;$SIGNAL&amp;amp;quot; = &amp;amp;quot;KILL&amp;amp;quot; ]; then&lt;br /&gt;
  rm -f &amp;amp;quot;$PIDFILE&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case &amp;amp;quot;$1&amp;amp;quot; in&lt;br /&gt;
start)&lt;br /&gt;
  if [ &amp;amp;quot;x$RUN&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo -n &amp;amp;quot;Starting ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  start&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;ProFTPd is started from inetd/xinetd.&amp;amp;quot;&lt;br /&gt;
  else &lt;br /&gt;
  echo &amp;amp;quot;ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
force-start)&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;Warning: ProFTPd is started from inetd/xinetd (trying to start anyway).&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  echo -n &amp;amp;quot;Starting ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  start&lt;br /&gt;
  ;; &lt;br /&gt;
  &lt;br /&gt;
stop)&lt;br /&gt;
  if [ &amp;amp;quot;x$RUN&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo -n &amp;amp;quot;Stopping ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  signal stop&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;ProFTPd is started from inetd/xinetd.&amp;amp;quot;&lt;br /&gt;
  else &lt;br /&gt;
  echo &amp;amp;quot;ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
force-stop)&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;Warning: ProFTPd is started from inetd/xinetd (trying to kill anyway).&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  echo -n &amp;amp;quot;Stopping ProFTPD ftp daemon: &amp;amp;quot;&lt;br /&gt;
  signal stop&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
reload)&lt;br /&gt;
  echo -n &amp;amp;quot;Reloading $NAME configuration...&amp;amp;quot;&lt;br /&gt;
  signal reload&lt;br /&gt;
  echo &amp;amp;quot; done.&amp;amp;quot;&lt;br /&gt;
  ;;&lt;br /&gt;
&lt;br /&gt;
force-reload|restart)&lt;br /&gt;
  if [ &amp;amp;quot;x$RUN&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo -n &amp;amp;quot;Restarting ProFTPD ftp daemon.&amp;amp;quot;&lt;br /&gt;
  signal stop&lt;br /&gt;
  echo -n &amp;amp;quot;.&amp;amp;quot;&lt;br /&gt;
  sleep 2&lt;br /&gt;
  echo -n &amp;amp;quot;.&amp;amp;quot;&lt;br /&gt;
  start&lt;br /&gt;
  echo &amp;amp;quot; done.&amp;amp;quot;&lt;br /&gt;
  else&lt;br /&gt;
  if [ &amp;amp;quot;x$INETD&amp;amp;quot; = &amp;amp;quot;xyes&amp;amp;quot; ] ; then&lt;br /&gt;
  echo &amp;amp;quot;ProFTPd is started from inetd.&amp;amp;quot;&lt;br /&gt;
  else &lt;br /&gt;
  echo &amp;amp;quot;ProFTPd warning: cannot start neither in standalone nor in inetd/xinetd mode. Check your configuration.&amp;amp;quot;&lt;br /&gt;
  fi&lt;br /&gt;
  fi&lt;br /&gt;
  ;;&lt;br /&gt;
 *)&lt;br /&gt;
  echo &amp;amp;quot;Usage: /etc/init.d/$NAME {start|force-start|stop|force-stop|reload|restart|force-reload}&amp;amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
  ;;&lt;br /&gt;
  esac&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maintenant vous pouvez redémarrer le serveur ProFTPd pour appliquer la configuration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;/etc/init.d/proftpd restart&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
Maintenant que la configuration est faite, nous allons voir comment gérer les utilisateurs à travers la base de données.&lt;br /&gt;
&lt;br /&gt;
Je vous conseille d&#039;utiliser PHPMyAdmin pour ceux qui ne connaissent pas le langage SQL.&lt;br /&gt;
&lt;br /&gt;
=== Gestion des utilisateurs ===&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur &#039;test&#039; avec un mot de passe &#039;pwd&#039;. Cet utilisateur a accès au repertoire &#039;/home/ftp/test&#039; avec les droits de l&#039;utilisateur (UID) 5500, et de groupe (GID) 5500, sans shell (&#039;/bin/false&#039;).&lt;br /&gt;
&lt;br /&gt;
La valeur &#039;LoginAllowed&#039; est mise à &#039;true&#039; pour autoriser la connection de cet utilisateur, à &#039;false&#039; pour l&#039;interdire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;INSERT INTO `ftpuser` ( `id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed` , `modified`, `LoginAllowed` ) VALUES (&#039;&#039;, &#039;test&#039;, ENCRYPT(&#039;pwd&#039;), &#039;5500&#039;, &#039;5500&#039;, &#039;/home/ftp/test&#039;, &#039;/bin/false&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;true&#039; ); &amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;count&#039; représente le nombre d&#039;authentifications effectuées par cet utilisateur,&amp;lt;br /&amp;gt; &#039;accessed&#039; la date du dernier accès et&amp;lt;br /&amp;gt; &#039;modified&#039; la date de la dernière écriture.&lt;br /&gt;
&lt;br /&gt;
==== Suppression d&#039;un utilisateur ====&lt;br /&gt;
&lt;br /&gt;
Suppression de l&#039;utilisateur &#039;test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpuser` WHERE `userid`=&#039;test&#039;;&amp;lt;br /&amp;gt; DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des groupes ===&lt;br /&gt;
&lt;br /&gt;
==== Affecter un utilisateur à un groupe ====&lt;br /&gt;
&lt;br /&gt;
Affecte l&#039;utilisateur &#039;test&#039; au groupe &#039;group_test&#039; avec les droits de groupe (GID) du groupe 5500&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpgroup` ( `groupname` , `gid` , `members` ) VALUES (&#039;group_test&#039;, &#039;5500&#039;, &#039;test&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Enlever un utilisateur d&#039;un groupe ====&lt;br /&gt;
&lt;br /&gt;
Enlève l&#039;utilisateur &#039;test&#039; du groupe &#039;group_test&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpgroup` WHERE `members`=&#039;test&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gestion des quotas ===&lt;br /&gt;
&lt;br /&gt;
La table &#039;ftpquotalimits&#039; contient la description des quotas.&amp;lt;br /&amp;gt; La table &#039;ftpquotatotal&#039; contient les statistiques d&#039;utilisation correspondant aux règles des quotas défini dans la table &#039;ftpquotalimits&#039;. Cette table permet à ProFTPd de gérer les quotas.&lt;br /&gt;
&lt;br /&gt;
==== Ajouter une règles de quotas ====&lt;br /&gt;
&lt;br /&gt;
Exécuter la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;INSERT INTO `ftpquotalimits` ( `name`, `quota_type`, `par_session`, `limit_type`, `bytes_up_limit`, `bytes_down_limit`, `bytes_transfer_limit`, `files_up_limit`, `files_down_limit`, `files_transfer_limit` )&amp;lt;br /&amp;gt; VALUES ( &#039;NOM&#039; , &#039;TYPE&#039;, &#039;SESSION&#039;, &#039;LIMIT_TYPE&#039;, &#039;B_UP&#039;, &#039;B_DOWN&#039;, &#039;B_TRANS&#039;, &#039;F_UP&#039;, &#039;F_DOWN&#039;, &#039;F_TRANS&#039;);&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
où&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;name&#039;&#039;&#039; : nom de l&#039;utilisateur, du groupe ou de la règle selon la valeur de &#039;&#039;&#039;quota_type&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;quota_type&#039;&#039;&#039; : &#039;user&#039; si le quota s&#039;applique à un utilisateur, &#039;group&#039; à un groupe, &#039;class&#039; à une classe (ici inutile), &#039;all&#039; à tous les utilisateurs.&lt;br /&gt;
* &#039;&#039;&#039;par_session&#039;&#039;&#039; : &#039;true&#039; si les quotas doivent être remis à zéro à chaque nouvelle session, &#039;false&#039; sinon. (&#039;false&#039; est conseillé).&lt;br /&gt;
* &#039;&#039;&#039;limit_type&#039;&#039;&#039; : &#039;soft&#039; pour une mesure logicielle de la taille, &#039;hard&#039; pour une mesure hardware.&lt;br /&gt;
* &#039;&#039;&#039;bytes_up_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à être uploadé sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;bytes_down_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* &#039;&#039;&#039;bytes_transfer_limit&#039;&#039;&#039; : taille (en Mbytes) autorisé à transféré à sur et à partir du serveur (upload+download).&lt;br /&gt;
* &#039;&#039;&#039;files_up_limit&#039;&#039;&#039; : nombre de fichiers autorisé à être uploadé sur le serveur.&lt;br /&gt;
* &#039;&#039;&#039;files_down_limit&#039;&#039;&#039; : nombre de fichiers autorisé à être downloadé à partir du serveur.&lt;br /&gt;
* &#039;&#039;&#039;files_transfer_limit&#039;&#039;&#039; : nombre de fichiers autorisé à transféré sur et à partir du serveur (upload+download).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;Pour définir un quota illimité à l&#039;un des champs, mettez une valeur négative ou nulle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;alert&amp;quot;&amp;gt;Attention : Les quotas de type &#039;all&#039;, &#039;class&#039; ou &#039;group&#039; ne définissent pas un quota pour chaque utilisateur mais un quota partagé par tous les utlisateurs concernés par cette règle.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Réinitialiser les quotas ====&lt;br /&gt;
&lt;br /&gt;
Il suffit de supprimer l&#039;entrée (ligne) correspondant à la règle devant être réinitialisé. Par exemple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;DELETE FROM `ftpquotatotal` WHERE `name`=&#039;test&#039; AND `quota_type`=&#039;user&#039;;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez réinitialiser tous les quotas, par exemple tous les mois, faîtes une tâche cron se connectant sur le serveur et exécutant la requête suivante :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;code&amp;quot;&amp;gt;TRUNCATE TABLE `ftpquotatotal`;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Et voilà, c&#039;est terminé... Vous n&#039;avez plus qu&#039;à tester ;-)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par space2d le 24/04/2005.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 24/04/2005, space2d&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=10632</id>
		<title>Discussion utilisateur:Space2d</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_utilisateur:Space2d&amp;diff=10632"/>
		<updated>2005-11-13T17:12:02Z</updated>

		<summary type="html">&lt;p&gt;Space2d : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.espace.fr.to www.espace.fr.to]&lt;/div&gt;</summary>
		<author><name>Space2d</name></author>
	</entry>
</feed>