
# Ajout des comptes émail virtuels

Nous allons ajouter maintenant des utilisateurs virtuels, comptes qui ne sont pas des utilisateurs, **users** de la machine. Ces utilisateurs n'ont pas de compte Unix sur la machine, pas de shell, pas de répertoire personnel: ils n'existent que pour les composants du serveur de messagerie.

Ces comptes émail avec leurs caractéristiques peuvent être stockés de différentes manières.

Il est possible d'utiliser des fichiers **plats** ou différentes bases de données comme **mysql**, **postgresql**, **sqlite** ou plus simplement encore **dbm**. Ceci se configure dans les fichier **/etc/postfix/main.cf**.

Pour les systèmes de bases de données **sql**, il faudra fournir les données d'accès à la base de données dans des fichiers séparés.

Les adresses émail ainsi que les mots de passe seront stockés dans un fichier plat ou une base de données.

![Notre base de données avec les utilisateurs virtuels](../../Images/tutostretch/dessin8.svg)

Il est certainement possible d'ajouter la configuration des comptes mail virtuels à notre configuration actuelle. Après mûre réflexion, j'ai chois de procéder différemment: nous allons tester les différentes solutions de stockage à partir d'une installation propre de postfix/dovecot. Les solutions testées seront: *dbm*, *sqlite* et *postgresql* que nous avons déjà installée pour *gogs*. Les solutions à base de mysql sont très souvent déployées et sont donc documentées. Nous pourrons toujours rajouter cette dernière si le temps (et l'envie) le permet(tent).

## Mise à blanc de nos configurations

Nous avons mis plusieurs serviecs en route pour configurer notre serveur de mails; voici la liste des services à arrêter:

* postfix
* dovecot
* dkim
* dmarc
* spf

    root@atom:/home/ericadmin# service postfix stop
    root@atom:/home/ericadmin# service dovecot stop
    root@atom:/home/ericadmin# service opendkim stop
    root@atom:/home/ericadmin# service opendmarc stop
    root@atom:/home/ericadmin# service openspf stop
    Failed to stop openspf.service: Unit openspf.service not loaded.
    root@atom:/home/ericadmin#

Vérification des ports:

    root@atom:/home/ericadmin# netstat -tlpn
    Connexions Internet actives (seulement serveurs)
    Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      388/apache2
    tcp        0      0 192.168.111.160:53      0.0.0.0:*               LISTEN      460/named
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      460/named
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      523/sshd
    tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      544/postgres
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      460/named
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      388/apache2
    tcp6       0      0 :::53                   :::*                    LISTEN      460/named
    tcp6       0      0 :::22                   :::*                    LISTEN      523/sshd
    tcp6       0      0 :::3000                 :::*                    LISTEN      15740/gogs
    tcp6       0      0 ::1:5432                :::*                    LISTEN      544/postgres
    tcp6       0      0 ::1:953                 :::*                    LISTEN      460/named
    root@atom:/home/ericadmin#

Voilà, notre serveur de messagerie est arrêté ainsi que tous les services accessoires.

### Sauvegarde de l'ancienne configuration

Nous allons maintenant sauvegarder les répertoires contenant notre configuration actuelle. Nous laisserons les répertoires *opendmarc*, *opendkim*, *openspf* tels qu'ils sont; nous configurerons notre serveur d'email sans les utiliser. Il vous sera toujours possible de vous réferer à leur installation/configuration dans la partie du tutoriel correspondante.

    root@atom:/home/ericadmin# cd /etc
    root@atom:/etc# mv postfix postfix.user
    root@atom:/etc# mv dovecot/ dovecot.user
    root@atom:/etc# cd /var/lib
    root@atom:/var/lib# mv dovecot dovecot.user

### Suppression des paquets postfix et dovecot

Nous allons maintenant procéder à la suppression des paquets dovecot et postfix:

Installation du paquet exim4 qui de facto va supprimer tout postfix. On va lister les paquets dovecot et les supprimer manuellement.

root@atom:/etc# apt install exim4-daemon-light
etc ....

    root@atom:/etc# dpkg -l | grep dovecot
    ii  dovecot-core                 1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - core files
    ii  dovecot-imapd                1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - IMAP daemon
    ii  dovecot-sqlite               1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - SQLite support
    root@atom:/etc# dpkg --purge dovecot-core dovecot-imapd dovecot-sqlite
    (Lecture de la base de données... 40268 fichiers et répertoires déjà installés.)
    Suppression de dovecot-imapd (1:2.2.27-3+deb9u3) ...
    Suppression de dovecot-sqlite (1:2.2.27-3+deb9u3) ...
    Suppression de dovecot-core (1:2.2.27-3+deb9u3) ...
    Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
    root@atom:/etc#

Voilà, les paquets sont supprimés (on a aussi purgé les fichiers de configuration, ce qui permet l'installation de nouveaux fichiers; on va les réinstaller et avoir une copie propre des fichiers de configuration.

Relancez votre serveur (éteindre puis rallumer ....)

    root@atom:/etc# apt install postfix postfix-pgsql postfix-sqlite

    root@atom:/etc# dpkg -l | grep postfix
    ii  postfix                      3.1.9-0+deb9u2                 i386         High-performance mail transport agent
    ii  postfix-pgsql                3.1.9-0+deb9u2                 i386         PostgreSQL map support for Postfix
    rc  postfix-policyd-spf-python   2.0.1-1                        all          Postfix policy server for SPF checking
    ri  postfix-sqlite               3.1.9-0+deb9u2                 i386         SQLite map support for Postfix
    root@atom:/etc#

Nous avons donc postfix d'installé avec les modules postgresql et sqlite.

    root@atom:/etc# apt install dovecot-core dovecot-sqlite dovecot-pgsql dovecot-imapd
    etc ...
    Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /lib/systemd/system/dovecot.service.
    Paramétrage de dovecot-pgsql (1:2.2.27-3+deb9u3) ...
    Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u9) ...
    Paramétrage de dovecot-imapd (1:2.2.27-3+deb9u3) ...
    etc ...
    Creating config file /etc/dovecot/conf.d/20-imap.conf with new version
    Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
    Paramétrage de dovecot-sqlite (1:2.2.27-3+deb9u3) ...
    Traitement des actions différées (« triggers ») pour dovecot-core (1:2.2.27-3+deb9u3) ...

    root@atom:/etc# dpkg -l | grep dovecot
    ii  dovecot-core                 1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - core files
    ii  dovecot-imapd                1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - IMAP daemon
    ii  dovecot-pgsql                1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - PostgreSQL support
    ii  dovecot-sqlite               1:2.2.27-3+deb9u3              i386         secure POP3/IMAP server - SQLite support
    root@atom:/etc#

Voilà, dovecot est ré-installé avec le support de sqlite et postgresql.

### Premières configurations

Vous pouvez reprendre les étapes de configuration de postfix comme décrites dans la partie correspondante du tutoriel (Installation d'un serveur de courrier basique). Reprenez les tests pour pour assurer de son bon fonctionnement.

* Test d'envoi d'un compte utilisateur à un autre
  * root -> ericadmin
  * ericadmin -> root
* Test d'envoi de messages à partir de ce serveur sur mon serveur principal
* Test d'envoi de messages à partir d'un poste extérieur
* Test de l'envoi à root pour vérifier la redirection

Une fois ces tests effectués et réussis, nous pouvons passer à l'étape suivante.

### Utilisation du format *Maildir* pour nos courriels

Je reproduis ici ce que nous avions déjà fait auparavant:

C'est ici que l'on configure si on veut un fichier unique qui contient tous les messages (type inbox) ou un fichier par émail (type Maildir). Ce réglage ne concerne que la délivrance *locale* des courriers.

Cela se passe dans le fichier /etc/postfix/main.cf

On rajoute les lignes suivantes:

    home_mailbox = Maildir/
    mailbox_command =

Si ces lignes existaient avant, il faut les commenter (ajout d'un # en début de ligne.) On recharge le fichier de conf

    service postfix reload

## Considérations générales et architecture

Dans la première partie du tutoriel, nous avons configuré postfix pour des comptes mails d'utilisateurs (users) du serveur:

nous avions *root* et *ericadmin*; nous avons aussi configuré un fichier *etc/aliases* pour rediriger certaines destinations vers le compte *ericadmin*. Ainsi, *root*, *postmaster*, *webmaster*, *abuse* ont été redirigés vers *ericadmin*.

Les adresses mail *postmaster*, *webmaster*, *abuse* nécessaires au fonctionnement d'un serveur mail et web n'ont pas de comptes utilisateur associé. Ce sont *déjà* des adresses virtuelles. Les mails pour ces destinations sont redirigés vers *ericadmin*.

Nous allons maintenant configurer postfix pour qu'il accepte de gérer des domaines différents, par exemple, *yojik.net*, *yojik.org*, *yojik.fr*. Nous pourrons  créer autant d'adresses émail que nous voulons, associées à ces domaines et elles seront délivrées séparèment dans des boîtes à lettres distinctes.

Les différents domaines gérés seront stockés soit dans un fichier plat, soit dans une base de données suivant notre configuration.

Les adresses émail également.

Il y aura aussi un fichier alias (en base de données ou non) qui permet les redirections. Il aura la même fonction que */etc/alias* mais avec une portée plus grande puisqu'il peut gérer des domaines différents.

Postfix ne gère pas l'authentification qui est déportée à *dovecot*. Nous verrons ensuite comment configurer cette partie. Le chiffrage est également configuré dans la partie *dovecot*.

Il est possible de configurer *postfix* pour qu'il gère **et** l'acheminement *local* **et** l'acheminement *virtuel* ou bien, que toutes les adresses mail, locales ou non soient gérées virtuellement. C'est le choix que j'ai fait.

## Utilisation des fichiers *dbm*
