Réseau - Web - GNU/Linux

2011 12 mai

Préparation de la base de données - Debian 5.0 Lenny

Rédigé par Marc GUILLAUME | Aucun commentaire
Article précédent Mail façon FAI - Debian 5.0 Lenny 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.

Création de la base de données et des tables

Votre serveur Debian devrait maintenant être installé. Il est donc 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 pointant votre navigateur sur l'URL : http://YOUR-MAIL-SERVER/phpmyadmin. Vous devriez voir une image ressemblant à ça :

Écran de PphMyAdmin

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

Le mot de passe root de MySQL que vous avez saisi lors de l'installation du paquet du serveur MySQL va vous être demandé.

(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

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 :

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

(On peut également faire ça avec PhpMyAdmin en suivant les étapes suivantes : Cliquez sur "Privileges", Choisissez "Add a new User" (choisissez un nouvel utilisateur) et en nom d'utilisateur saisissez "mailuser". Comme "Host" choisissez "local". Entrez "mailuser2009" 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. Le mot de passe "mailuser2009" est simplement un exemple. Veillez à le remplacer par un mot de passe plus correct. Si vous manquez d'inspiration utilisez "pwgen" ou "apg" pour créer de bons mots de passe.

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. Il est plus simple ici de créer les tables en utilisant des ordres SQL plutôt qu'en utilisant le "clickodrome" de PhpMyAdmin.

Connectez-vous au serveur MySQL et choisissez la base de données 'mailserver' :

$> mysql -p mailserver

Vous allez de nouveau voir le prompt mysql>. Commencez par créer une table pour la liste des domaines virtuels que vous voulez héberger :

mysql>
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 :

mysql>
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.

mysql>
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 il peut exister plusieurs lignes pour une adresse source indiquant chacune des destinataires multiples 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. Ça permet de de maintenir la cohérence des données car vous ne pouvez 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.)

Un exemple de données dans les tables :

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

Créons quelques alias :

virtual_aliases
id domain_id source destination
1 1 steve@example.com devnull@workaround.org
2 2 kerstin@foobar.org kerstin42@yahoo.com
3 2 kerstin@foobar.org 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@foobar.org seront redirigés à la fois sur kerstin42@yahoo.com et kerstin@mycompany.com. Ni Steve ni Kerstin ne recevront de copie du mail.

Écrire un commentaire

Quelle est la quatrième lettre du mot bfadqy ?

Fil RSS des commentaires de cet article

À propos

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

Généré par PluXml en 0.042s  - 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