Réseau - Web - GNU/Linux

2013 22 août

Préparation de la base de données - Debian 7.0 Wheezy

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

Maintenant il est temps de préparer la base MySQL qui va contenir les informations de contrôle de votre serveur de courrier. Dans ce processus vous devrez saisir des requêtes SQL. Vous pouvez les entrer en utilisant l'utilitaires mysql en ligne de commande. Mais si vous êtes moins expérimenté avec MySQL je vous suggère de commencer facilement avec PhpMyAdmin en faisant pointer votre navigateur à cette URL : https://YOUR-MAIL-SERVER/phpmyadmin. Vous devriez voir une page web de ce genre :

phpMyAdmin écran de connexion

Connectez-vous en tant que « root » avec le mot de passe d'administration que vous avez défini à l'installation. Vous allez alors vous retrouver sur l'écran principal :

phpMyAdmin écran principal

Ceci va vous aider à gérer vos bases de données. Vous pouvez soit lancer des instructions SQL directement soit utiliser le click de votre souris au travers de l'interface web de PhpMyAdmin. J'expliquerai les deux manières de faire. Si vous choisissez d'utiliser les instructions SQL en ligne de commande il vous faudra tout d'abord entrer la commande :

mysql -u root -p

et saisir le mot de passe de l'administrateur de MySQL.

Créez la base de données

Note du traducteur : J'ai conservé les noms anglais des tables et des champs des tables pour éviter des erreurs de transcriptions dans le document et conserver la cohérence avec le document original.

Votre premier travail est de créer une nouvelle base de données dans MySQL où vous allez enregistrer les informations de contrôle de votre serveur mail.

phpMyAdmin commande SQL

Clickez sur « Database » (ou « Bases de données » sur l'interface françisée) puis « Create new database » (« Créer une nouvelle base de données » dans l'interface françisée). Choisissez le nom « mailserver » comme nom de la nouvelle base de données et cliquez sur « Create » (« Créer » dans l'interface françisée) :

phpmyadmin création de la base

CREATE DATABASE 'mailserver';

Ajoutez un utilisateur MySQL possédant des privilèges réduits

Pour des questions de sécurité vous devriez créer un autre compte d'utilisateur MySQL avec peu de privilèges. Postfix n'a besoin que de lire des informations dans la base de données, il n'a donc pas besoin d'accès en écriture. L'utilisateur root serait un mauvais choix.

pMyAdmin Commande SQL

Choisissez la base « mailserver » dans la colonne de gauche. Cliquez alors sur « Privileges » dans le menu d'onglets. Cliquez alors sur « Create a new user » (« Créer un nouvel utilisateur »). Remplissez les champs du formulaire :

phpmyadmin création d'un utilisateur

Choisissez comme « User Name » (« Nom d'utilisateur ») « mailuser ». Comme « Host » (« Nom d'hôte ») sélectionnez « local » pour que le champ texte devienne « localhost ». Cliquez sur « Generate » (« Générer ») pour créer un mot de passe aléatoire. N'oubliez pas de noter ce mot de passe quelque part.

Allez en bas de page et cliquer sur le bouton d'enregistrement « Go » (« Enregistrer »).

pour des raisons de sécurité vous devriez retirer tous les privilèges à cet utilisateur à l'exception du droit SELECT. Pour ce faire dans la section « Database-specific privileges » (« Privilèges sécifiques à la base de données ») cliquez sur « Uncheck All » (« Tout désélectionner ») et ne cochez que la case à cocher « SELECT ». Enregistrez de nouveau.

GRANT SELECT ON
mailserver.* TO
'mailuser'@'127.0.0.1'
IDENTIFIED BY
'fLxsWdf5ABLqwhZr';

(Bien sûr il faut que vous créiiez votre propre mot de passe en utilisant par exemple apg ou pwgen au lieu d'utiliser celui-ci.)

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

Dans la base qui vient d'être créée vous devrez créer les tables destinées à contenir les information concernant les domaines, les alias de redirection et les boîtes mail d'utilisateurs. Commencez par créer la table destinée à enregistrer les domaines virtuels que vous voulez héberger :

PhpMyAdmin Commande SQL

Cliquez sur « Create table » (« Créer une table ») sur le menu de gauche. Appellez-la virtual_domains. Elle contiendra, comme son nom l'indique, les domaines virtuels. Créez une colonne id avec le type integer avec la propriété auto-incrément et un index unique. Créez également une colonne name avec le type VARCHAR et une taille de 50. Le formulaire devrait ressembler à ceci :

phpmyadmin création de la table virtual_domains

Cliquez sur enregistrer.

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 contientdra les informations sur les compte utilisateurs existants. Chaque utilisateur a un nom d'utilisateur (« username ») et un mot de passe (« password »). Il sera utilisé pour accéder à la boîte mail via POP3 ou IMAP, pour se connecter au service de webmail ou pour envoyer des courriers (fonction de relais, relay) si les utilisateurs ne se trouvent pas dans votre réseau local. Comme les utilisateurs ont tendance à oublier les choses, l'adresse email de l'utilisateur servira également de nom d'utilisateur (username). Créons la table des utilisateurs :

phpMyAdmin Commande SQL

De nouveau cliquez sur « Create table ». Appellez la nouvelle table virtual_users. Créez les colonne comme ceci :

  • id - integer avec auto-increment - primary key ;
  • domain_id - integer - et créez une référence de clé étrangère sur la table virtual_domains via la colonne id avec la contrainte SQL DELETE CASCADE de façon à ce que les utilisateurs liés à un domaine soient supprimés automatiquement si ce domaine est supprimé, afin de conserver l'intégrité référentielle de la base ;
  • password - VARCHAR avec une taille de 32 (Ceci sert à stocker le hachage MD5 du mot de passe)
  • email - VARCHAR avec une taille de 100 (pour contenir les adresses email des utilisateurs) - en mettant une contrainte unique.
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;

Le champ email contiendra l'adresse mail d'un utilisateur. Et le champ password contiendra un hachage MD5 du mot de passe de l'utilisateur. La clé unique unique key placée sur le champ email permettra de s'assurer qu'on ne pourra créer par accident deux utilisateurs de même nom sur le domaine.

Pour finir nous avons besoin d'une table pour enregistrer les alias de redirection aliases (pour le transfert de données d'un compte à un autre) :

phpMyAdmin SQL statement

De nouveau cliquez sur « Create table ». Appellez la nouvelle table virtual_aliases. Créez les colonnes suivant ce schéma :

  • id - integer avec auto-increment - primary key ;
  • domain_id - integer - créez une référence de clé étrangère sur la table virtual_domains avec le champ id avec la contrainte SQL DELETE CASCADE de façon à ce que les alias de redirection soient supprimés automatiquement en cas de suppression du domaine auquel ils sont liés de manière à conserver l'intégrité référentielle de la bases ;
  • source - VARCHAR d'une taille de 100 (ce champ contiendra les adresses email du destinataire original) ;
  • destination - VARCHAR d'une taille de 100 (qui contiendra les adresses vers lesquelles rediriger le courrier)
CREATE TABLE `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 ses mails. En cas de « catchall » les adresses du champ source ressembleront à « @domain ». La colonne destination contient l'adresse cible vers laquelle rediriger le mails. Comme décrit dans la section sur les domaines virtuels il peut y avoir plusieurs lignes pour une même adresse source, destinées à contenir de multiples destinations devant recevoir copie d'un courrier.

Vous vous demandez à quoi servent les foreign keys ? Elles expriment le fait que les tables virtual_aliases et virtual_users sont liées à la table virtual_domains. Ceci conservera l'intégrité référentielle de votre base, car vous ne pourrez créer un alias virtuel de redirection ou un utilisateur virtuel qui ne soient connectés à un domaine existant. Le suffixe ON DELETE CASCADE signifie que si vous effacez un ligne de la table référencée l'effacement se fera également dans la table courante automatiquement. Vous ne pourrez ainsi laisser des entrées orphelines accidentellement. Imaginez que vous n'hébergiez plus un certain domaine. Vous pouvez supprimer ce domaine de la table virtual_domains et toutes les entrées référençant ce domaine dans les autres tables seront également supprimées (notez cependant que cela ne supprimera pas les répertoires physiques sur le disque correspondant à ce domaine automatiquement).

Un exemple de données dans ces tables

virtual_domains

id name
1 example.org
2 example.net

virtual_users

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

Ajoutons un simple alias

virtual_aliases

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

Ceci aura pour résultat qu'un email pour steve@example.org sera redirigé vers devnull@workaround.org. Et le mail pour kerstin@example.net sera redirigé à la fois vers kerstin42@yahoo.com et kerstin@mycompany.com. Ni Steve ni Kerstin ne recevront de copie du mail.

Jeu de test

Remplissons la base de données avec le domaine example.org, une adresse mail d'exemple john@example.org et un alias de redirection de jack@exemple.org vers john@example.org. Ouvrez un shell MySQL (ou cliquez sur l'onglet SQL dans PhpMyAdmin) et saisissez ces requêtes SQL :

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`,
)
VALUES (
	'1',
	'1',
	'jack@example.org',
	'john@example.org'
);
INSERT INTO `mailserver`.`virtual_aliases` (
	`id`,
	`domain_id`,
	`source`,
)
VALUES (
	'1',
	'1',
	'jack@example.org',
	'john@example.org'
);

Écrire un commentaire

Quelle est la troisième lettre du mot jdgsov ?

Fil RSS des commentaires de cet article

À propos

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

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