Documentation de VHFFS

Équipe VHFFS

Sébastien Le Ray

Création du document

Table des matières

I. Pour l'administrateur
1. Services VHFFS
Introduction
2. Applications tierces
Introduction
Exim (serveur mail)
Serveur mail primaire (mx1)
Serveur mail secondaire (mx2)
myDNS (serveur DNS)
Introduction
Configuration
3. Scripts de réplication
Name Service Switch (NSS)
Introduction
Configuration
myDNS
Introduction
Configuration
exim
Introduction
Serveur mail primaire
Serveur mail secondaire
II. Pour le développeur
4. Concepts généraux

Liste des exemples

2.1. Configuration du mx2 (utilisation de la base VHFFS)
2.2. Configuration du mx2 (réplication)
3.1. Schéma de base de données du serveur mail secondaire

Partie I. Pour l'administrateur

Chapitre 1. Services VHFFS

Table des matières

Introduction

Introduction

Ce chapitre présente les différents services de VHFFS et leur façon de fonctionner.

Chapitre 2. Applications tierces

Introduction

Ce chapitre présente la configuration des applications tierces.

Exim (serveur mail)

Cette section présente la configuration du serveur de mail utilisé généralement avec VHFFS : Exim.

Si vous voulez offrir un service de qualité, il est nécessaire de disposer d'au moins deux serveurs mail, le serveur mail primaire et le (ou les) serveur(s) mail secondaire(s). Leur configuration diffère, nous les présentons dans cette section.

Serveur mail primaire (mx1)

Ce serveur est appelé mx1 dans les documents relatifs à VHFFS (du fait qu'il s'appelle généralement mx1.domaine.tld). Sa configuration est plus complexe que pour le serveur mail secondaire. En effet, il va devoir déterminer si les adresses sont des boîtes mail, des redirections ou des listes de diffusion et agir en conséquence.

Il est possible de faire en sorte que le mx1 utilise directement la base de VHFFS ou bien de répliquer celle-ci afin de réduire les coûts d'interrogation (pour plus d'information sur la réplication, consultez la section intitulée « Serveur mail primaire »).

La configuration à adapter se trouve dans le répertoire vhffs-doc/config/exim4-mx1/ à la racine des sources.

Paramètres de connexion

Les paramètres de connexion sont le premier élément à être définis par la biais de la variable pgsql_servers. Elle doit être précédée du mot clé hide pour éviter que des utilisateurs "ordinaires" puissent y accéder. Vous devez spécifier, dans l'ordre, l'adresse du serveur PostgreSQL (sous la forme hôte::port, il y a deux fois deux-points, ce n'est pas une erreur typographique, si vous utilisez le port par défaut vour pouvez l'omettre), le nom de la base de données, le nom d'utilisateur ayant accès aux données nécessaires et enfin son mot de passe.

Configuration des requêtes

Serveur mail secondaire (mx2)

Le serveur mail secondaire peut être configuré de deux façons différentes (en tout cas, nous n'en présentons que deux). La configuration à utiliser dépend de la façon dont vous souhaitez organiser votre architecture. Vous avez le choix entre faire en sorte que le serveur mail utilise directement la base de données VHFFS ou bien répliquer celle-ci à intervalles réguliers sur le mx2 (pour plus d'information, consultez la section intitulée « Serveur mail secondaire »).

La seule tâche du mx2 consiste à vérifier que les adresses qu'on lui soumet existent afin de relayer les mails correspondants au mx1, les adresses inexistantes seront ignorées.

Nous ne rentrons pas ici dans les détails de la configuration, nous présentons simplement l'interfaçage avec VHFFS, c'est-à-dire principalement les requêtes nécessaires à l'exploitation des adresses VHFFS par Exim.

Utilisation directe de la base VHFFS

Paramètres de connexion

Les paramètres de connexion se définissent de la même façon que pour le serveur mail primaire.

Configuration des requêtes

Seule la requête PGSQL_RELAY_CHECKLOCALPART est à configurer, elle permet de déterminer si une adresse est valide et doit être relayée vers le mx1. Si vous utilisez directement la base de données VHFFS, elle doit contenir la requête suivante :

Exemple 2.1. Configuration du mx2 (utilisation de la base VHFFS)

PGSQL_RELAY_CHECKLOCALPART = ${lookup pgsql{SELECT d.domain 
    FROM vhffs_mxdomain d 
    WHERE d.domain = '$domain' AND (d.catchall != '' OR
    EXISTS (SELECT domain FROM vhffs_boxes WHERE domain = '$domain' AND local_part = '$local_part') OR
    EXISTS (SELECT domain FROM vhffs_forward WHERE domain = '$domain' AND local_part = '$local_part') OR
    EXISTS (SELECT domain FROM vhffs_ml WHERE domain = '$domain' 
        AND (local_part = '$local_part' OR local_part || '-request' = '$local_part')))}}

En cas d'utilisation de la réplication, la requête est beaucoup plus simple, évite de surcharger le serveur de base de données principal et devrait offrir de meilleures performances.

Exemple 2.2. Configuration du mx2 (réplication)

PGSQL_RELAY_CHECKLOCALPART = ${lookup pgsql{SELECT d.domain
    FROM vhffs_mxdomain WHERE d.domain = '$domain' AND (d.catchall != '' OR
    EXISTS (SELECT domain FROM vhffs_addresses WHERE domain = '$domain' AND local_part = '$local_part'))}}

Le reste de la configuration relève d'une configuration classique d'Exim. Vous trouverez plus d'informations à ce sujet sur http://www.exim.org.



myDNS (serveur DNS)

Introduction

La configuration de myDNS est relativement simple. Deux cas peuvent se présenter, soit vous utilisez directgement la vue vhffs_dns_soa et la table vhffs_dns_rr, soit vous les dupliquez sur un serveur secondaire. Dans les deux cas, la configuration est la même.

Configuration

Configuration commune

Comme nous l'avons vu, l'utilisation directe repose sur l'exploitation de la vue vhffs_dns_soa et de la table vhffs_dns_rr. La première est une vue regroupant tous les domaines, il est nécessaire que myDNS ne prenne en compte que ceux étant activés. Vous trouverez ci-dessous les options les plus significatives, laissez les autres à leurs valeurs par défaut :

Réplication

Schéma de la base de données

Chapitre 3. Scripts de réplication

Dans le cadre d'une architecture distribuée, il peut être souhaitable de répartir les services sur différentes machines. Le problème des performances dues à l'accès à la base de données distantes (celle directement alimentée par VHFFS) peut alors se poser. Pour palier à cela il est possible de répliquer certaines parties de la base principale sur les autres machines. Cela permet d'alléger la charge du serveur de base de données principal et d'améliorer les performances (puisque les requêtes sont locales). La contrepartie est un certain décalage possible entre les données du serveur principal et celles de la base de données esclave (les scripts étant exécutés à intervalle régulier).

Name Service Switch (NSS)

Introduction

Il s'agit du service bénéficiant du plus gros gain de performances. le NSS est utilisé pour l'identification des utilisateurs en SSH (utilisé notamment pour Subversion et CVS) ainsi qu'en FTP. Les différentes requêtes permettent d'afficher le propriétaire ou le groupe d'un fichier ainsi que de savoir si un utilisateur peut accéder à tel ou tel fichier (en obtenant ses UID/GID et en les comparant à ceux du fichier et aux permissions).

Historiquement, il s'agissait de fichiers qui étaient utilisés, aussi, les requêtes ne sont pas spécialement adaptées à une base de données. Le coût d'établissement d'une connexion peut être important dans le cas d'une base de données distante.

La solution proposée par VHFFS est d'utiliser une bibliothèque NSS basée sur SQLite (libnss-sqlite). La partie de la base de données PostgreSQL concernant les utilisateurs est dupliquée pour être utilisée par libnss-sqlite.

Configuration

La configuration s'effectue de la même façon que n'importe quelle bibliothèque NSS :

  1. récupérez la dernière version de libnss-sqlite sur http://libnss-sqlite.tuxfamily.org ;

  2. si vous la compilez à partir des sources, utilisez les classiques ./configure, make et make install (seule la dernière commande doit être effectuée en root). Lancez ./configure --help pour une liste des options disponibles. Vous aurez besoin des bibliothèques de développement de sqlite ;

  3. modifiez le fichier /etc/nsswitch.conf pour que les lignes passwd, shadow et groups finissent par sqlite ;

  4. créez la base de données esclave, dans laquelle les données seront répliquées. Par défaut, il s'agit de /var/db/auth.sqlite (créez le répertoire /var/db/ s'il n'existe pas). Pour cela, lancez la commande suivante depuis le répertoire des sources de libnss-sqlite : sqlite3 -init conf/passwd.sql /var/db/passwd.sqlite; sqlite3 -init conf/shadow.sql /var/db/shadow.sqlite (le premierfichier devrait appartenir à root et être en mode 644, le second en mode 640 au moins) ;

Le système est désormais prêt pour l'utilisation de la base SQLite comme source de données d'authentification. Vous pouvez insérer un utilisateur dans la table shadow de la base de données SQLite et vérifier qu'il est bien reconnu en utilisant la commande id nouvel_utilisateur.

Il est maintenant nécessaire de configurer le script de réplication. Celui-ci doit s'exécuter sur le serveur esclave (celui disposant de la base de données SQLite) par le biais de cron (ou un outil similaire).

Il se trouve dans le répertoire %BACKEND_DIR%/mirror/nss-mirror.pl. Copiez ce fichier sur le serveur esclave et éditez-le pour définir les variables $PG_DB_HOST, $PG_DB_PORT, $PG_DB_NAME, $PG_DB_USER et $PG_DB_PASS pour les adapter à votre configuration (n'oubliez pas de configurer le serveur PostgreSQL maître pour qu'il accepte les connexions de la part de l'esclave[1]). Si besoin, modifiez les variables $ST_PW_DB et $ST_SP_DB pour qu'elles correspondent aux fichiers de base de données SQLite précédemment créé.

Ajoutez une entrée dans la crontab pour lancer le script de manière régulière (toutes les 5, 10 ou 15 minutes, ou n'importe quelle valeur acceptable pour votre système). Il est conseillé de lancer une première fois le script à la main pour vérifier qu'il n'émet aucun message d'erreur, il est possible que vous deviez installer le paquetage perl DBD::SQLite.

Les utilisateurs enregistrés et actifs sur la plateforme VHFFS peuvent désormais accéder au serveur esclave en utilisant leur identifiants VHFFS.

myDNS

Introduction

Tout comme le NSS, myDNS peut profiter d'une réplication partielle de la base pour éviter les interrogations trop fréquentes vers le serveur principal. Contrairement au NSS cette fois, la base esclave est également une base PostgreSQL. Les données à répliquer sont présentes dans la vue vhffs_dns_soa et la table vhffs_dns_rr.

Configuration

Seule la mise en place du script de réplication est décrite ici, la configuration de myDNS est décrite dans le la section intitulée « myDNS (serveur DNS) » (myDNS (serveur DNS)).

Le script est disponible après l'installation sous le répertoire %BACKEND_DIR%/mirror/mydns-mirror.pl. Il est possible de placer le script de réplication sur le serveur maître ou sur le serveur esclave. Les serveurs PostgreSQL devront être configurés selon les choix effectués. La configuration se résume au positionnement des variables $MASTER_DB_HOST, $MASTER_DB_PORT, $MASTER_DB_NAME, $MASTER_DB_USER et $MASTER_DB_USER (ainsi que leurs homologues préfixées par $SLAVE_). Les variables préfixées par $MASTER_ définissent les paramètres de connexion au serveur maître (contenant la base de données VHFFS) tandis que celles préfixées par $SLAVE_ définissent les paramètres de connexion au serveur esclave.

Au niveau du serveur maître, le script a besoin d'accéder à la vue vhffs_dns_soa et à la table vhffs_dns_rr. La base de données esclave doit contenir au minimum deux tables, vhffs_dns_soa et vhffs_dns_rr qui ont le même schéma que la vue et la table sources des données.

exim

Introduction

Le troisième service à disposer de scripts de réplication livrés avec VHFFS est le serveur mail Exim. Deux scripts sont fournis, le premier permet une réplication sur le serveur mail primaire (appelé mx1 dans la suite du document), le second une réplication sur le serveur mail secondaire. La principale différence entre les deux tient en la quantité de données répliquée. Dans le cas du mx1, il est nécessaire d'assurer le bon fonctionnement de listengine, aussi beaucoup de données propres à vhffs sont répliquées ; dans le cas du mx2, seules les données permettant de vérifier qu'une adresse existe bien sont répliquées.

Les configurations des serveurs mail sont fournies dans les répertoires %DOC_DIR%/config/exim4-mx1/ et %DOC_DIR%/config/exim4-mx2/ à la racine des sources. Vous trouverez plus d'informations dans la section intitulée « Exim (serveur mail) ».

Serveur mail primaire

Configuration

La configuration de la réplication pour le serveur mail primaire consiste à positionner les différentes variables $MASTER_DB_HOST, $MASTER_DB_PORT, $MASTER_DB_NAME, $MASTER_DB_USER et $MASTER_DB_USER (ainsi que leurs homologues préfixées par $SLAVE_) dans le script %BACKEND_DIR%/mirror/mx1-mirror.pl.

Serveur mail secondaire

Configuration

La configuration du script est analogue à celle du script concernant le serveur mail primaire. Il suffit de positionner les différentes variables du script aux valeurs adéquates pour que la connexion aux deux bases de données se fasse convenablement. Enfin, le script doit être lancé par cron.

Schéma de la base de données

Le serveur mail secondaire, lorsqu'il est utilisé avec la configuration présentée dans ce manuel, se contente de vérifier que les adresses email sont connues du système. Aussi, il a besoin de très peu d'informations : les domaines mail, les boîtes, les redirections et les listes de diffusion existants.

Le schéma de la base de données est disponible dans le répertoire %BACKEND_DIR%/mirror/mx2-mirror.sql. La base esclave utilisée peut contenir des champs supplémentaires, cependant, ceux-ci devront avoir des valeurs par défaut pour éviter toute interruption du script.

Exemple 3.1. Schéma de base de données du serveur mail secondaire

CREATE TABLE vhffs_mxdomain(
    domain VARCHAR,
    catchall VARCHAR
);

CREATE TABLE vhffs_addresses(
    local_part VARCHAR,
    domain VARCHAR
);

CREATE UNIQUE INDEX vhffs_mxdomain_unique_domain ON vhffs_mxdomain(domain);

CREATE UNIQUE INDEX vhffs_addresses_unique_couple ON vhffs_addresses(local_part, domain);

Avertissement

Si vous migrez depuis VHFFS 4.0, il est possible que les tables vhffs_boxes, vhffs_forward et vhffs_ml de la base de données maître contienne des doublons entre elles. Cela vient du fait qu'il n'y avait pas assez de vérifications et qu'il était possible de créer une liste de diffusion ayant le même nom qu'une boîte mail ou qu'un forward et vice versa. Vérifiez donc bien qu'il n'y a pas de doublons avant de mettre en place la réplication, sinon cette dernière ne fonctionnera pas (vous pouvez également tenter de lancer la réplication à la main, elle vous indiquera si des erreurs surviennent).



[1] L'utilisateur défini dans le script n'a besoin que d'accéder aux tables vhffs_users, vhffs_user_group et vhffs_groups en lecture, il ne devrait pas disposer de plus de privilèges que nécessaire.

Partie II. Pour le développeur

Table des matières

4. Concepts généraux

Chapitre 4. Concepts généraux