Préparation de la base de données - Debian 8.0 Jessie
Rédigé par Marc GUILLAUME | Aucun commentaireTraduction de la page https://workaround.org/ispmail/jessie/preparing-database
Il est maintenant temps de préparer la base MySQL qui contiendra les informations de contrôle de votre serveur de mail. Pendant l'installation vous aurez à saisir des requêtes SQL, le langage utilisé par les serveurs de bases de données relationnelles. Vous pouvez saisir ces requêtes sur l'interface en ligne de commande de mysql
. Mais si vous avez moins d'expérience avec MySQL vous pourriez préférer utiliser une application web appelée « PHPMyAdmin » pour gérer vos bases de données.
Configuration de PHPMyAdmin
Installation du paquet PHPMyAdmin :
apt-get install phpmyadmin
Quand on vous demande quel serveur web vous désirez utiliser choisissez « apache2 » :
PHPMyAdmin crée une petite base de données sur votre serveur pour stocker ses propres données. On vous demandera donc si vous désirez que le programme d'installation se charge de créer cette base de données MySQL :
Répondez « yes ». Pour autoriser le programme d'installation à créer la base de données on vous demande le mots de passe de l'utilisateur root de MySQL :
Le programme d'installation va également créer un autre utilisateur MySQL pour permettre à PHPMyAdmin d'accéder à sa propre base de données. Ce mot de passe n'a pas beaucoup d'importance pour vous. Appuyez juste sur Entrée pour obtenir un mot de passe créé de manière aléatoire :
Le programme d'installation a préparé un fichier /etc/phpmyadmin/apache.conf
qui doit être inclus dans le fichier de configuration HTTPS de votre hôte virtuel pour pouvoir y accéder avec votre navigateur. Éditez le fichier /etc/apache2/sites-available/default-ssl.conf
et placez cette ligne quelque part entre les balises <VirtualHost> et </VirtualHost> mais avant toute autre ligne commençant par « Include » :
Include /etc/phpmyadmin/apache.conf
Relancez le processus apache :
service apache2 reload
Ouvrez votre navigateur et pointez sur https://YOURSERVER/phpmyadmin
. Vous voyez s'afficher le formulaire d'identification de PHPMyAdmin :
Connectez vous en tant que « root » avec le mot de passe d'administrateur que vous avez utilisé jusque là pour les installations de paquets. Vous vous retrouverez alors sur l'écran principal :
Ceci vous aidera à gérer votre base de données. Vous pouvez soit entrer directement des ordres SQL soit vous débrouiller en cliquant sur les boutons de l'interface web.
La création du schéma de la base de données
…devrait être facile si vous l'effectuez avec PHPMyAdmin. Nous allons smplement fournir au serveur MySQL les commandes appropriées por créer la base de données et ses tables. Une table en terme de bases de données ressemble beaucoup à une feuille de calcul de tableur. Vous avez des lignes et des colonnes. Les colonnes sont également appellées champs. Les instructions SQL peuvent être entrées dans le shell « mysql » que vous obtenez quand vous lancez la commande mysql
en tant que root (le root de MySQL et non le root d'administration du système) sur votre serveur. Ou alors vous pouvez utiliser PHPMyAdmin et cliquer sur l'entrée SQL en haut et saisir votre requête dans la zone prévue pour écrire les ordres SQL.
On commence par créer la base :
CREATE DATABASE mailserver;
Nous avons également besoin de créer un utilisateur appelé « mailuser » qui aura accès à la base de données. Créez un autre mot de passe aléatoire en utilisant pwgen -s 25
et lancez cette requête :
GRANT SELECT,INSERT,UPDATE,DELETE ON mailserver.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'ChangezMoi';
Remplacez bien sûr ChangezMoi par le mot de passe que vous venez de créer.
Pour ce que nous voulons faire nous avons besoin de trois tables :
virtual_domains
Cette table contient juste la liste des domaines que vous allez utiliser en tant que virtual_mailbox_domains
dans Postfix.
Champ | Utilité |
id | Un chiffre, unique, qui va identifier chaque ligne. Il est automatiquement ajouté par la base de données. |
Nom | Le nom du domaine pour lequel vous voulez recevoir des emails. |
Cet ordre SQL permet de créer la table :
USE mailserver;
CREATE TABLE IF NOT EXISTS `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
virtual_users
La table suivante contient les informations concernant les utilisateurs. Chaque compte mail occupe une ligne.
Champ | Utilité |
id | Un chiffre, unique, qui va identifier chaque ligne. Il est automatiquement ajouté par la base de données. |
domain_id | Contient le nombre du champ id dans la table virtual_domains . L'ordre delete cascade sert à s'assurer que si un domaine est supprimé tous les utilisateurs de ce domaine seront également supprimés pour éviter des lignes orphelines. C'est ce qu'on appelle l'intégrité référentielle. |
Il s'agit de l'adresse mail correspondant au compte. | |
password | Le hachage du mot de passe du compte. Il est fourni par l'algorithme de hachage. Par défaut il est chiffré avec {SHA256-CRYPT}. Mais il peut exister des utilisateurs des anciennes installation de ce guide qui utilisent {PLAIN-MD5}. Ajouter l'algorithme permet d'avoir différentes sortes de hachage suivant les lignes. |
Voici la requête SQL de création de cette table :
USE mailserver;
CREATE TABLE IF NOT EXISTS `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(150) 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;
virtual_aliases
La dernière table contient les alias de transfert d'une adresse mail à une autre.
Champ | Utilité |
id | Un chiffre, unique, qui va identifier chaque ligne. Il est automatiquement ajouté par la base de données. |
domain_id | Contient le nombre du champ id dans la table virtual_domains . L'ordre delete cascade sert à s'assurer que si un domaine est supprimé toutes les redirections de ce domaine seront également supprimées pour éviter des lignes orphelines. C'est ce qu'on appelle l'intégrité référentielle. |
source | L'adresse mail à laquelle a été envoyé le mail. Dans le cas d'une adresse attrape-tout (catch-all, qui accepte n'importe quelle adresse dans ce domaine) la source est de la forme « @example.org ». |
destination | L'adresse mail à laquelle le mail doit être transféré. |
Voici la requête SQL nécessaire pour créer cette table :
USE mailserver;
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;
Comme indiqué dans la section sur les types de domaines il peut y avoir plusieurs cibles pour une même adresse source. Il suffira de créer autant de ligne avec la même adresse source pour différentes adresses de transfert devant recevoir une copie du mail.
Jeu de données d'essai
Remplissons la base avec les utilisateurs du domaine example.org, un compte john@example.org et un transfert de jack@example.org vers john@example.org. Lancez ces requêtes sql :
REPLACE INTO `mailserver`.`virtual_domains` ( `id` , `name` ) VALUES ( '1', 'example.org' );
REPLACE INTO `mailserver`.`virtual_users` ( `id` , `domain_id` , `password` , `email` ) VALUES ( '1', '1', '{SHA256-CRYPT}$5$M/GWzmtjsLroRWIf$0qDt7IgXCoCQyvQZO7v.NC46rXzFVBSkZcilijlwgL7' , 'john@example.org' );
REPLACE INTO `mailserver`.`virtual_aliases` ( `id`, `domain_id`, `source`, `destination` ) VALUES ( '1', '1', 'jack@example.org', 'john@example.org' );
Vous demandez-vous comment j'ai obtenu ce long mot de passe cryptique ?J'ai lancé la commande dovecot pw -s SHA256-CRYPT
pour créer un hachage sécurisé du simple mot de passe « summersun ».
Avant d'utiliser en production votre serveur de mail à la fin du guide vous devriez supprimer ces données en utilisant cette requête SQL :
DELETE FROM `mailserver`.`virtual_domains` where name='example.org'