Réseau - Web - GNU/Linux

2012 15 février

Création de la base de données et des tables - Debian 6.0 Squeeze

Rédigé par Marc GUILLAUME | Aucun commentaire
Article précédent Mail façon FAI - Debian 6.0 Squeeze Article suivant

Préparer la base de données utilisée par le serveur de mail pour enregistrer et connaître les domaines et les utilisateurs du serveur.

Préparation de la base de données

Une option : utiliser PhpMyAdmin

Il est maintenant temps de préparer la base MySQL qui va contenir les informations servant à contrôler votre serveur de courrier. Au cours de cette préparation vous devrez lancer des requêtes SQL. Vous pouvez les saisir sur la ligne de commande de l'utilitaire « mysql ». Mais si vous vous n'avez que peu d'expérience de MySQL je vous suggère d'y aller en douceur avec PhpMyAdmin en faisant pointer votre navigateur sur l'URL : http://YOUR-MAIL-SERVER/phpmyadmin. Vous devriez voir une image ressemblant à ça :

Écran de connexion de PphMyAdmin

Connectez-vous à MySQL en tant que « root » avec votre mot de passe administrateur. Vous vous retrouverez ainsi sur l'écran principal :

Écran principal de PphMyAdmin

Cet outil vous aidera à gérer la base de données. Mais tout au long de ce guide je ne documenterai que l'utilisation de MySQL en console avec la ligne de commande.

Créez la base de données

La première chose à faire est de créer une nouvelle base de données dans MySQL. Nous allons la nommer "mailserver". Dans une console en tant qu'administrateur (root) entrez cette commande :

$> mysqladmin -p create mailserver

Pour exécuter la commande mysql va vous demander un mot de passe. Il s'agit du mot de passe root de MySQL que vous avez saisi lors de l'installation du paquet MySQL.

NOTE DU TRADUCTEUR : l'équivalent avec PhpMyAdmin est obtenu en entrant « mailserver » dans le champ « Create new database » (Créez une nouvelle base de données) et en cliquant sur « Create ».

Créez un utilisateur MySQL avec des droits limités

Pour des raisons de sécurité vous devriez créer un autre utilisateur MySQL avec moins de droits. Postfix n'a besoin que de lire les données de la table et n'a donc pas besoin d'un accès en écriture.

Connectez-vous à la base :

$> mysql -p mailserver

Lorsque vous voyez le prompt de MySQL : mysql> entrez l'ordre SQL suivant (votre saisie est figurée en gras) pour créer l'utilisateur avec les droits appropriés, mais au lieu du mot de passe stupide 'mailuser2011' veuillez choisir un mot de passe plus sécurisé. Des utilitaires comme pwgen ou apg peuvent générer pour vous des mots de passe aléatoires si vous ne vous sentez pas créatif. Dans la suite du guide je conserverai par facilité ce mot de passe 'mailuser2011' (ne pas oublier les « ; » en fin de ligne qui indiquent à MySQL la fin d'un ordre SQL complet) :

mysql> GRANT SELECT ON mailserver.*
    TO 'mailuser'@'127.0.0.1'
     IDENTIFIED BY 'mailuser2009';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

NOTE DU TRADUCTEUR : on peut également faire ça avec PhpMyAdmin en suivant les étapes suivantes : Cliquez sur « Privileges », Choisissez « Add a new User » (ajoutez un nouvel utilisateur) et en nom d'utilisateur saisissez « mailuser ». Comme « Host » choisissez "local". Entrez "mailuser2011" comme mot de passe, ainsi que dans la répétition de contrôle. Cliquez sur « Go ». Ensuite cliquez sur « Database-specific privileges ». Choisissez "mailserver" comme base de données. Sur la page suivante cochez la case « SELECT » et cliquez sur « Go ».

Vous allez ainsi créer un utilisateur appelé « mailuser » qui n'a que le droit de sélectionner des données et les lire dans la base de données, mais pas de modifier ces données. Si vous devez ajouter ou modifier des données dans la base de données, soit utilisez le compte « root » soit créez un autre compte destiné spécialement à cet usage.

Créez les tables de la base de données

Dans la base nouvellement créée vous devez créer les tables nécessaires à l'enregistrement des informations de domaine, de redirection et des boîtes au lettre d'utilisateurs. Commencez par créer la table pour la liste des domaines virtuels que vous voudrez héberger :

CREATE TABLE `virtual_domains`
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
   PRIMARY KEY  (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

La table suivante contient des informations sur les comptes d'utilisateurs en service. Chaque utilisateur a un nom d'utilisateur et un mot de passe. Ils sont utilisés pour accéder à la boîte avec POP3 ou IMAP, pour se connecter au webmail ou pour envoyer des courriers ("relay") si ils ne sont pas dans votre réseau local. Comme les utilisateurs ont tendance à oublier ce genre de choses, l'adresse email de l'utilisateur est utilisée comme nom d'utilisateur de connexion. Créons la table des utilisateurs :

CREATE TABLE `virtual_users` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

La colonne email contient la valeur « adresse mail/nom d'utilisateur ». Et la colonne password contient le hash MD5 du mot de passe utilisateur. L'unicité posée sur la clé email empêche de créer accidentellement deux utilisateurs semblables sur un domaine.

Et pour finir il faut une table pour gérer les alias (la redirection des mails vers un autre compte) :

CREATE TABLE IF NOT EXISTS `virtual_aliases` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `source` varchar(100) NOT NULL,
  `destination` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ici la colonne source contient l'adresse email de l'utilisateur qui veut rediriger son mail. Dans le cas d'une adresse ramasse miettes (catchall) la source ressemble à cela : « @domain ». La colonne de destination contient l'adresse email cible. Comme décrit dans la section concernant les domaines virtuels les alias peuvent être multiples et il peut exister plusieurs lignes pour une adresse source indiquant chacun des destinataires qui recevront copie des courriers.

Vous vous demandez à quoi servent les « foreign keys » ? Elles indiquent que des entrées dans les tables des virtual_aliases et virutal_users sont liées à des entrées dans la table virtual_domains. Cela permet de maintenir la cohérence des données en empêchant de créer un alias virtuel ou un utilisateur virtuel qui ne soit relié à aucun domaine virtuel. La mention ON DELETE CASCADE indique que si vous supprimez une ligne de la table de référence, les lignes correspondantes seront automatiquement supprimées de la table courante. Il ne pourra donc pas rester par accident des entrées orphelines. Imaginons que vous n'ayez plus à héberger un certain domaine. Vous pouvez supprimer ce domaine de la table virtual_domains et tous les entrées qui en dépendent (qui font référence à ce domaine) seront également supprimées des autres tables. (Notez cependant que cela ne supprimera pas automatiquement le répertoire physique contenant les mails sur le disque dur.)

Possibilité intermédiaire avec AdminPostfix

L'utilisation des champs d'activation dans le schéma modifé pour AdminPostfix permettent de suspendre un domaine de façon provisoire sans avoir à l'effacer et ainsi effacer tous les enregistrements qui lui sont liés dans la base de données, méthode qui peut-être parfois un peu radicale.

Un exemple de données dans les tables :

virtual_domains
id name
1 example.com
2 example.org
virtual_users
id domain_id email password
1 1 john@example.com 14cbfb845af1f030e372b1cb9275e6dd
2 1 steve@example.com a57d8c77e922bf756ed80141fc77a658
3 2 kerstin@example.net 5d6423c4ccddcbbdf0fcfaf9234a72d0

Créons quelques alias :

virtual_aliases
id domain_id source destination
1 1 steve@example.com devnull@workaround.org
2 2 kerstin@example.net kerstin42@yahoo.com
3 2 kerstin@example.net kerstin@mycompany.com

Cette configuration aura pour résultat que les courriers pour steve@example.com seront redirigés sur devnull@workaround.org. Et les courriers pour kerstin@example.net seront redirigés à la fois sur kerstin42@yahoo.com et kerstin@mycompany.com. Ni Steve ni Kerstin ne recevront de copie du mail.

Jeu de test

Saisissons dans les tables un domaine « example.org », un compte mail pour « john@example.org » et une adresse de redirection (alias) pour « jack@example.org » sur « john@example.org ». Dans un shell MySQL saisissez les commandes suivantes :

INSERT INTO `mailserver`.`virtual_domains` (
  `id` ,
  `name`
)
VALUES (
  '1', 'example.org'
);
INSERT INTO `mailserver`.`virtual_users`
  `id` ,
  `domain_id` ,
  `password` ,
  `email`
)
VALUES (
  '1', '1', MD5( 'summersun' ) , 'john@example.org'
);
INSERT INTO `mailserver`.`virtual_aliases` (
  `id`,
  `domain_id`,
  `source`,
  `destination`
)
VALUES (
  '1', '1', 'jack@example.org', 'john@example.org'
);

Écrire un commentaire

Quelle est la troisième lettre du mot wczh ?

Fil RSS des commentaires de cet article

À propos

Yakati.info - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.072s  - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.info
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml