## Installation de dovecot et de l'authentification

Pour l'instant, pour récupérer ses émails, il faut d'abord avoir un compte sur le serveur et se loguer. Ensuite, avec la commande mailx, on peut voir ses messages.

Exemple:

    ericadmin@aijan:~$ mailx
    "/var/mail/ericadmin": 2 messages 2 non lus
    >U   1 Eric Streit        dim. mai 20 08:4  20/742   essai d envoi à root
     U   2 Eric Streit        dim. mai 20 08:5  19/736   un autre essai
    ?

Nous allons installer dovecot qui est un serveur pop/imap et d'authentification SASL. Nous pourrons ensuite nous connecter sur le serveur avec un client mail comme thunderbird, et récupérer et envoyer nos messages avec celui-ci.

### Installation des programmes

Nous n'installerons que les programmes nécessaires à la gestion du protocole imap des courriers. Nous n'utilisons pas le protocole pop3.

Tout d'abord, faites une copie de /etc/postfix/main.conf et /etc/postfix/master.conf:

    # cp master.cf master.cf.orig
    # cp main.cf main.cf.orig

Nous allons maintenant configurer nos boites émail; 2 systèmes sont courants: fichier unique qui contient tous vos messages (type mbox) ou répertoire avec un fichier par émail (type maildir). Par défaut, le type est mbox. Nous allons changer cela (question de goût ...) Pour cela, nous aurons besoins des programmes utilitaires installés avec dovecot.

### Choix de la base de données

Nous utiliserons la base de données sqlite. Il est bien sûr préférable d'utiliser une base de données plus traditionnelle comme mysql ou postgresql si le nombre d'utilisateurs est important. Mon serveur de mails n'aura que moins de 10 adresses émail, donc, sqlite suffira.

    root@adara:/home/www# apt install dovecot-common dovecot-imapd dovecot-sqlite
    Lecture des listes de paquets... Fait
    Construction de l arbre des dépendances
    Lecture des informations d état... Fait
    Note : sélection de « dovecot-core » au lieu de « dovecot-common »
    The following additional packages will be installed:
      libexttextcat-2.0-0 libexttextcat-data libstemmer0d
    Paquets suggérés :
      dovecot-gssapi dovecot-sieve dovecot-pgsql dovecot-mysql dovecot-ldap dovecot-pop3d dovecot-lmtpd dovecot-managesieved dovecot-solr dovecot-lucene ufw
    Les NOUVEAUX paquets suivants seront installés :
      dovecot-core dovecot-imapd dovecot-sqlite libexttextcat-2.0-0 libexttextcat-data libstemmer0d
    0 mis à jour, 6 nouvellement installés, 0 à enlever et 0 non mis à jour.
    Il est nécessaire de prendre 5 062 ko dans les archives.
    Après cette opération, 12,2 Mo d espace disque supplémentaires seront utilisés.
    Souhaitez-vous continuer ? [O/n] o
    Réception de:1 http://debian.mirrors.ovh.net/debian stretch/main amd64 libexttextcat-data all 3.4.4-2 [167 kB]
    Réception de:2 http://debian.mirrors.ovh.net/debian stretch/main amd64 libexttextcat-2.0-0 amd64 3.4.4-2+b1 [16,2 kB]
    Réception de:3 http://debian.mirrors.ovh.net/debian stretch/main amd64 libstemmer0d amd64 0+svn585-1+b2 [63,3 kB]
    Réception de:4 http://debian.mirrors.ovh.net/debian stretch/main amd64 dovecot-core amd64 1:2.2.27-3+deb9u2 [3 324 kB]
    Réception de:5 http://debian.mirrors.ovh.net/debian stretch/main amd64 dovecot-imapd amd64 1:2.2.27-3+deb9u2 [814 kB]
    Réception de:6 http://debian.mirrors.ovh.net/debian stretch/main amd64 dovecot-sqlite amd64 1:2.2.27-3+deb9u2 [677 kB]
    5 062 ko réceptionnés en 0s (6 873 ko/s)
    Sélection du paquet libexttextcat-data précédemment désélectionné.
    (Lecture de la base de données... 26792 fichiers et répertoires déjà installés.)
    Préparation du dépaquetage de .../0-libexttextcat-data_3.4.4-2_all.deb ...
    Dépaquetage de libexttextcat-data (3.4.4-2) ...
    Sélection du paquet libexttextcat-2.0-0:amd64 précédemment désélectionné.
    Préparation du dépaquetage de .../1-libexttextcat-2.0-0_3.4.4-2+b1_amd64.deb ...
    Dépaquetage de libexttextcat-2.0-0:amd64 (3.4.4-2+b1) ...
    Sélection du paquet libstemmer0d:amd64 précédemment désélectionné.
    Préparation du dépaquetage de .../2-libstemmer0d_0+svn585-1+b2_amd64.deb ...
    Dépaquetage de libstemmer0d:amd64 (0+svn585-1+b2) ...
    Sélection du paquet dovecot-core précédemment désélectionné.
    Préparation du dépaquetage de .../3-dovecot-core_1%3a2.2.27-3+deb9u2_amd64.deb ...
    Dépaquetage de dovecot-core (1:2.2.27-3+deb9u2) ...
    Sélection du paquet dovecot-imapd précédemment désélectionné.
    Préparation du dépaquetage de .../4-dovecot-imapd_1%3a2.2.27-3+deb9u2_amd64.deb ...
    Dépaquetage de dovecot-imapd (1:2.2.27-3+deb9u2) ...
    Sélection du paquet dovecot-sqlite précédemment désélectionné.
    Préparation du dépaquetage de .../5-dovecot-sqlite_1%3a2.2.27-3+deb9u2_amd64.deb ...
    Dépaquetage de dovecot-sqlite (1:2.2.27-3+deb9u2) ...
    Paramétrage de libstemmer0d:amd64 (0+svn585-1+b2) ...
    Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ...
    Paramétrage de libexttextcat-data (3.4.4-2) ...
    Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u3) ...
    Traitement des actions différées (« triggers ») pour man-db (2.7.6.1-2) ...
    Paramétrage de libexttextcat-2.0-0:amd64 (3.4.4-2+b1) ...
    Paramétrage de dovecot-core (1:2.2.27-3+deb9u2) ...

    Creating config file /etc/dovecot/dovecot.conf with new version

    Creating config file /etc/dovecot/dovecot-dict-auth.conf.ext with new version

    Creating config file /etc/dovecot/dovecot-dict-sql.conf.ext with new version

    Creating config file /etc/dovecot/dovecot-sql.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/10-auth.conf with new version

    Creating config file /etc/dovecot/conf.d/10-director.conf with new version

    Creating config file /etc/dovecot/conf.d/10-logging.conf with new version

    Creating config file /etc/dovecot/conf.d/10-mail.conf with new version

    Creating config file /etc/dovecot/conf.d/10-master.conf with new version

    Creating config file /etc/dovecot/conf.d/10-tcpwrapper.conf with new version

    Creating config file /etc/dovecot/conf.d/15-lda.conf with new version

    Creating config file /etc/dovecot/conf.d/15-mailboxes.conf with new version

    Creating config file /etc/dovecot/conf.d/90-acl.conf with new version

    Creating config file /etc/dovecot/conf.d/90-plugin.conf with new version

    Creating config file /etc/dovecot/conf.d/90-quota.conf with new version

    Creating config file /etc/dovecot/conf.d/auth-checkpassword.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-deny.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-dict.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-master.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-passwdfile.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-sql.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-static.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-system.conf.ext with new version

    Creating config file /etc/dovecot/conf.d/auth-vpopmail.conf.ext with new version
    Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /lib/systemd/system/dovecot.service.
    Paramétrage de dovecot-imapd (1:2.2.27-3+deb9u2) ...

    Creating config file /etc/dovecot/conf.d/20-imap.conf with new version
    Paramétrage de dovecot-sqlite (1:2.2.27-3+deb9u2) ...
    Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ...
    Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u3) ...
    Traitement des actions différées (« triggers ») pour dovecot-core (1:2.2.27-3+deb9u2) ...
    root@adara:/home/www#

### Configuration du type de boîte aux lettres

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

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

Et on teste:

    eric@aldebaran:~/Devs/Travail/Installation serveur/Tutorial$ mail ericadmin@aijan.yojik.net
    Cc:
    Subject: Re-essai
    re-essai de aldebaran
    .
    eric@aldebaran:~/Devs/Travail/Installation serveur/Tutorial$

J'envoie un courrier à partir de mon desktop. Vérification sur le serveur:

    ericadmin@aijan:~$ ls
    bin  index.html  Maildir  mbox
    ericadmin@aijan:~$

Le répertoire Maildir a bien été créé. Vérification de la réception des messages:

    ricadmin@aijan:~$ cd Maildir/
    ericadmin@aijan:~/Maildir$ ls
    cur  new  tmp
    ericadmin@aijan:~/Maildir$ cd new/
    ericadmin@aijan:~/Maildir/new$ ls
    1526897441.V801Icc005dM227044.aijan  1526897501.V801Icc0060M464181.aijan  1526897576.V801Icc0061M979030.aijan
    ericadmin@aijan:~/Maildir/new$

    ericadmin@aijan:~/Maildir/new$ cat 1526897576.V801Icc0061M979030.aijan
    Return-Path: <eric@aldebaran.yojik.net>
    X-Original-To: ericadmin@aijan.yojik.net
    Delivered-To: ericadmin@aijan.yojik.net
    Received: from aldebaran.yojik.net (unknown [IPv6:2a01:e0a:54:c220:6423:417b:6ef:ee21])
        by aijan.yojik.net (Postfix) with ESMTP id EC11BD00903
        for <ericadmin@aijan.yojik.net>; Mon, 21 May 2018 12:12:56 +0200 (CEST)
    Received: by aldebaran.yojik.net (Postfix, from userid 1000)
        id 8B42920620A; Mon, 21 May 2018 12:12:56 +0200 (CEST)
    To: <ericadmin@aijan.yojik.net>
    Subject: Re-essai
    X-Mailer: mail (GNU Mailutils 3.1.1)
    Message-Id: <20180521101256.8B42920620A@aldebaran.yojik.net>
    Date: Mon, 21 May 2018 12:12:56 +0200 (CEST)
    From: eric@aldebaran.yojik.net (Eric Streit)

    re-essai de aldebaran
    .
    ericadmin@aijan:~/Maildir/new$

Les messages sont bien reçus. Par contre, mailx ne fonctionne plus (uniquement avec des fichiers mbox.) Pour lire nos messages, il nous faut installer le lecteur de courriers mutt.

    root@aijan:/etc/postfix# apt install mutt
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances
    Lecture des informations d'état... Fait
    The following additional packages will be installed:
      libgmime-2.6-0 libgpgme11 libnotmuch4 libtalloc2 libtokyocabinet9
    Paquets suggérés :
      gpgsm urlview mixmaster
    Les NOUVEAUX paquets suivants seront installés :
      libgmime-2.6-0 libgpgme11 libnotmuch4 libtalloc2 libtokyocabinet9 mutt
    0 mis à jour, 6 nouvellement installés, 0 à enlever et 12 non mis à jour.
    Il est nécessaire de prendre 2 433 ko dans les archives.
    Après cette opération, 8 665 ko d'espace disque supplémentaires seront utilisés.
    Souhaitez-vous continuer ? [O/n] o
    Réception de:1 http://deb.debian.org/debian stretch/main amd64 libtokyocabinet9 amd64 1.4.48-11+b1 [367 kB]
    Réception de:2 http://deb.debian.org/debian stretch/main amd64 libgpgme11 amd64 1.8.0-3+b2 [160 kB]
    Réception de:3 http://deb.debian.org/debian stretch/main amd64 libgmime-2.6-0 amd64 2.6.22+dfsg2-1 [232 kB]
    Réception de:4 http://deb.debian.org/debian stretch/main amd64 libtalloc2 amd64 2.1.8-1 [36,3 kB]
    ....

On teste; on le lance avec la commande suivante:

    ericadmin@aijan:~$ mutt -f ./Maildir/
    GPGME : protocole CMS non disponible
    3 gardé(s), 0 effacé(s).
    ericadmin@aijan:~$

Résultat: (extrait de l'écran)

    q:Quitter  d:Effacer  u:Récup  s:Sauver  m:Message  r:Répondre  g:Groupe  ?:Aide
       1 O + mai 21 root            (0,1K) Essai
       2 O F mai 21 To root@localho (0,1K) essai d'envoi à root
       3 O + mai 21 Eric Streit     (0,1K) Re-essai

    NeoMutt: ./Maildir/ [Msgs:3 Old:3 1,6K](threads/date)-

Nos émails sont bien là :) Nous pourrons supprimer mutt plus tard si nous voulons gagner un peu de place.

## Architecture

Avant de continuer à configurer notre serveur mail, il serait utile d'avoir une vue d'ensemble du système que nous allons configurer. Pour l'instant, nous n'avons apporté que peu de modifications aux fichiers de configuration (nous avons seulement changé le type de format de nos boîtes aux lettres :

    mbox -> Maildir

Si nous regardons quels ports sont écoutés; nous voyons que nous avons pour l'instant:

    le port 22 (SSH)
    le port 25 (Postfix)
    le port 80 (Apache)
    le port 443 (Apache)
    le port 53 et 953 (Bind)

et le port 143 (imap) de dovecot, mais dovecot n'est pas encore intégré à notre serveur mail et est non-configuré.

    root@aijan:/home/ericadmin# netstat -tlnp
    Connexions Internet actives (seulement serveurs)
    Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
    tcp        0      0 192.168.111.240:53      0.0.0.0:*               LISTEN      536/named
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      536/named
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      603/sshd
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      850/master
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      536/named
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      676/apache2
    tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      607/dovecot
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      676/apache2
    tcp6       0      0 :::53                   :::*                    LISTEN      536/named
    tcp6       0      0 :::22                   :::*                    LISTEN      603/sshd
    tcp6       0      0 :::25                   :::*                    LISTEN      850/master
    tcp6       0      0 ::1:953                 :::*                    LISTEN      536/named
    tcp6       0      0 :::143                  :::*                    LISTEN      607/dovecot
    root@aijan:/home/ericadmin#

Notez la commande netstat -tlnp pour voir les ports ouverts ainsi que les programmes qui les gèrent.

Nous n'utiliserons pas le protocole Pop3 (ni sa variante pop3s). Le protocole Imap offre bien plus de possibilités. (parties rouges entourées de noir)

## Schéma d'ensemble

Les parties implémentées sont en rouge sur le dessin suivant:

## Explication:

### Les ports servis par Postfix

1. Le port 25 est utilisé pour la communication entre serveurs smtp; il permet une connexion "en clair" ou chiffrée. Il peut être aussi utilisé pour l'envoi des mails à partir d'un client. Nous l'avons d'ailleurs fait avec la commande mail et telnet.
2. Le port 587 est le port "submission", port utilisé par défaut par les clients mail pour envoyer du courrier sur le serveur (thunderbird, etc ...) qui le dispatche ensuite, soit dans les boîtes de courrier locales, soit à un destinataire extérieur.
3. Le port 465 est un port qui a été réservé pour les communications chiffrées (SMTP over SSL): il était utilisé avant que STARTTLS ne soit utilisé; il a été enlevé des ports standards de mail.

Le premier port (25) est un port d'entrée-sortie réservé à la communication entre serveurs ("mais permet aussi la submission de messages avec authentification".) Souvenez-vous que le port 25 est bloqué par de nombreux FAI. La communication peut être chiffrée ou non, suivant les possibilités du serveur et du client, et donc, les mots de passe peuvent passer en clair. La communication commence en mode "clair" et après négociation, passe en mode "chiffrée" si celle-ci est disponible: (STARTTLS)

Les 2 derniers ports (465 et 587) sont des ports d'entrée de vos messages envoyés par des clients, après authentification, en mode chiffré ou non.

## Les ports servis par Dovecot

1. Les ports 143 et 993 sont des ports réservés au protocole IMAP(s).
2. Les port 110 et 995 sont des ports réservés au protocole POP3(s), mais nous ne l'utiliserons pas.

Ces ports sont servis par Dovecot. Il permettent de gérer notre boîte mail, récupérer, effacer nos messages, créer des dossiers dans lesquels nous pouvons trier nos messages.

## Ce que nous allons implémenter

Nous implémenterons une politique particulière, comme celle décrite ici: RasperryPi Email server Part 2 Cet auteur sépare les communications entre serveurs (port 25) et client-serveur (ports 587 et 465). Il empêche les communications non-chifrées entre client et serveur, et utilise le port 465 pour les communications chiffrées (déprécié par le standard.) Jusqu'à maintenant, nous n'avons utilisé ni dovecot, ni base de données; l'authentification se faisant directement sur le serveur en accédant à notre compte sur le serveur (login par identifiant/mot de passe ou clef SSH). Nous allons implémenter l'accès par Imap et Imaps de nos courriers à partir de n'importe quelle machine et avec authentification (toujours pas de comptes virtuels.) L'authentification se faisait avant en se connectant sur nos comptes en SSH. Nous avons déjà généré auparavant nos clefs de chiffrage avec certbot. (voir le chapitre suivant ...) Elles sont situées dans /etc/letsencrypt/live/atom.yojik.net. Dovecot est un serveur Imap et pop3. Il assure en plus l'authentification.

## Configuration de Dovecot

- Indiquer à Dovecot d'écouter sur toutes les interfaces, en IPV4 et IPV6. Le fichier à configurer (après copie) est /etc/dovecot/dovecot.conf; changer la ligne qui contient:

  > listen = en listen = *, ::

- Il faut lui indiquer où sont stockés nos mails et sous quel format. Cela se configure dans le fichier:

  /etc/dovecot/conf.d/10-mail.conf Voici un extrait du contenu original:

      ## Mailbox locations and namespaces
      ##
      mail_location = mbox:~/mail:INBOX=/var/mail/%u

  Le format par défaut est mbox situé dans /var/mail/user Nous allons changer cela en:

      mail_location = maildir:~/Maildir

  Dovecot utilisera notre boîte aux lettres située dans le home de chaque user, et dans le répertoire Maildir.

  Souvenez-vous que nous avions configuré Postfix afin qu'il utilise le format Maidir.

- Indiquer à Postfix d'utiliser dovecot pour l'accès aux mails ainsi que pour l'authentification.

  Nous allons modifier le fichier /etc/postfix/main.cf et ajouter les lignes suivantes:

      smtpd_sasl_type = dovecot
      smtpd_sasl_path = private/auth
      smtpd_sasl_auth_enable = yes

  Nous allons indiquer à Dovecot de répondre aux demandes d'authentification de postfix: Après avoir fait une sauvegarde du fichier original /etc/dovecot/conf.d/10-master.conf (toujours sauvegarder les fichiers avant modifications!), nous allons modifier le mécanisme d'authentification de docvecot. Pour cela nous allons remplacer la partie intitulée service auth par ce qui suit:

      service auth {
       unix_listener /var/spool/postfix/private/auth {
           mode = 0660
           user = postfix
           group = postfix
           }

- Autorisons maintenant le plain login; nous allons modifier le fichier /etc/dovecot/conf.d/10-auth.conf en ajoutant ou modifiant les lignes suivantes:

      disable_plaintext_auth = no
      auth_mechanisms = plain login

  On relance postfix et dovecot pour prendre en compte les modifications.

      root@atom:/etc/postfix# systemctl restart postfix
      root@atom:/etc/postfix# systemctl restart dovecot

  On vérifie que tout s'est bien passé avec la commande:

      root@atom:/etc/postfix# tail -f /var/log/daemon.log
      Nov 26 12:47:22 atom systemd[1]: Stopped Postfix Mail Transport Agent (instance -).
      Nov 26 12:47:22 atom systemd[1]: Starting Postfix Mail Transport Agent (instance -)...
      Nov 26 12:47:23 atom systemd[1]: Started Postfix Mail Transport Agent (instance -).
      Nov 26 12:47:23 atom systemd[1]: Starting Postfix Mail Transport Agent...
      Nov 26 12:47:23 atom systemd[1]: Started Postfix Mail Transport Agent.
      Nov 26 12:47:28 atom systemd[1]: Stopping Dovecot IMAP/POP3 email server...
      Nov 26 12:47:29 atom systemd[1]: Stopped Dovecot IMAP/POP3 email server.
      Nov 26 12:47:29 atom systemd[1]: Starting Dovecot IMAP/POP3 email server...
      Nov 26 12:47:29 atom systemd[1]: dovecot.service: PID file /var/run/dovecot/master.pid not readable (yet?) after start: No such file or directory
      Nov 26 12:47:29 atom systemd[1]: Started Dovecot IMAP/POP3 email server.

  On quitte avec Ctrl C.

  C'est bon.

- Test 1

  Nous allons nous connecter avec telnet; voici la capture de la session:

  Tout d'abord, création d'un nouvel utilisateur de nom testmail et mot de passe testmail (oui, rien de bien original). A partir du compte root, nous allons envoyer un message à cet utilisateur (voir au-dessus pour comment faire avec la commande mail.)

  Testons si le message est bien arrivé:

    root@atom:/etc/postfix# adduser testmail
    Ajout de l'utilisateur « testmail25 » ...
    Ajout du nouveau groupe « testmail25 » (1001) ...
    Ajout du nouvel utilisateur « testmail25 » (1001) avec le groupe « testmail25 » ...
    Création du répertoire personnel « /home/testmail25 »...
    Copie des fichiers depuis « /etc/skel »...
       Entrez le nouveau mot de passe UNIX :
       Retapez le nouveau mot de passe UNIX :
       passwd: password updated successfully
       Changing the user information for testmail
       Enter the new value, or press ENTER for the default
           Full Name []:
           Room Number []:
           Work Phone []:
           Home Phone []:
           Other []:
    Cette information est-elle correcte ? [O/n]o
    root@atom:/etc/postfix# mail testmail
    Cc:
    Subject: Essai 7
    Essai 7
    .
    root@atom:/etc/postfix# su - testmail
    testmail25@atom:~$ mutt -f ./Maildir/
    GPGME : protocole CMS non disponible
    1 gardé(s), 0 effacé(s).

Le message est bien arrivé. Essayons avec les commandes Imap; il nous faut installer telnet avant:

        apt install telnet

Nous pouvons donc nous connecter aux ports suivants: 143 et 993.

    root@aijan:/home/ericadmin# telnet localhost 143
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
    x1 LOGIN testmail testmail
    x1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in
    x2 SELECT Inbox
    * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
    * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
    * 1 EXISTS
    * 1 RECENT
    * OK [UNSEEN 1] First unseen.
    * OK [UIDVALIDITY 1527165527] UIDs valid
    * OK [UIDNEXT 2] Predicted next UID
    x2 OK [READ-WRITE] Select completed (0.000 + 0.000 secs).
    x4 LOGOUT
    * BYE Logging out
    x4 OK Logout completed (0.000 + 0.000 secs).
    Connection closed by foreign host.
    root@aijan:/home/ericadmin#

Ça marche: OK [UNSEEN 1] First unseen.

Nous nous sommes connectés avec le mot de passe en clait (testmail pour l'utilisateur testmail.)

- Test 2: envoi de mail

  Connexion sur le port 25 (postfix) en utilisant l'authentification gérée par dovecot. Nous avons chiffré le mot de passe avec la commande suivante:

        printf '\0%s\0%s' 'testmail' 'testmail' | openssl base64
        AHRlc3RtYWlsAHRlc3RtYWls

    root@aijan:/home/ericadmin# telnet localhost 25
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    220 aijan.yojik.net ESMTP Postfix (Debian/GNU)
    ehlo localhost
    250-aijan.yojik.net
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250 SMTPUTF8
    AUTH PLAIN AHRlc3RtYWlsAHRlc3RtYWls
    235 2.7.0 Authentication successful
    mail from: testmail
    250 2.1.0 Ok
    data
    554 5.5.1 Error: no valid recipients
    rcpt to: ericounet26200@gmail.com
    250 2.1.5 Ok
    data
    354 End data with <CR><LF>.<CR><LF>
    Subject: mon, premier mail avec sasl
    mon premier mail avec sasl
    .
    250 2.0.0 Ok: queued as A664BD004A1
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.
    root@aijan:/home/ericadmin#

Vérification de la bonne réception du message: le message est bien reçu.

## Configuration des certificats

Jusqu'à présent, nous avons utilisé les certificats fournis par Debian à l'installation. Nous allons utiliser les certificats que nous avons créés auparavant avec letsencrypt. Il y a 2 lignes à modifier dans /etc/postfix/main.cf:

> smtpd_tls_cert_file = /etc/letsencrypt/live/toto.yojik.net/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/toto.yojik.net/privkey.pem

Bien entendu, modifiez la partie toto.yojik.net par le nom de votre serveur mail et pour lequel vous avez généré les certificats. Il y a 3 lignes à ajouter/modifier dans /etc/dovecot/conf.d/10-ssl.conf

> ssl = required ssl_cert = </etc/letsencrypt/live/toto.yojik.net/fullchain.pem ssl_key = </etc/letsencrypt/live/toto.yojik.net/privkey.pem

Comme avant, personnalisez avec votre nom de serveur mail. Relancez vos serveurs avec les commandes suivantes:

    root@aijan:/home/ericadmin# systemctl restart postfix
    root@aijan:/home/ericadmin# systemctl restart dovecot

Bien vérifier dans les logs (/var/log/daemon.log) que tout s'est bien passé (pas d'erreur de frappe par exemple ...)

### Test

Nous allons refaire les tests déjà réalisés précédemment pour vérifier que "rien n'est cassé" suite à la modification de nos certificats.

    root@aijan:/home/ericadmin# telnet localhost 25
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    220 aijan.yojik.net ESMTP Postfix (Debian/GNU)
    ehlo aijan.yojik.net
    250-aijan.yojik.net
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250 SMTPUTF8
    AUTH PLAIN AHRlc3RtYWlsAHRlc3RtYWls
    235 2.7.0 Authentication successful
    mail from: testmail
    250 2.1.0 Ok
    rcpt to: ericounet26200@gmail.com
    250 2.1.5 Ok
    data
    354 End data with <CR><LF>.<CR><LF>
    subject: essai
    un essai
    .
    250 2.0.0 Ok: queued as 9EEF6D0002E
    quit
    502 5.5.2 Error: command not recognized
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.
    root@aijan:/home/ericadmin#

Ça fonctionne. L'authentification avec les nouveaux certificats est assurée.

### Test de la connexion sur le port 993 à partir d'un ordinateur extérieur

    eric@aldebaran:~$ openssl s_client -connect yojik.net:993
    CONNECTED(00000003)
    depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
    verify return:1
    depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
    verify return:1
    depth=0 CN = atom.yojik.net
    verify return:1
    ---
    Certificate chain
     0 s:/CN=atom.yojik.net
       i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
     1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
       i:/O=Digital Signature Trust Co./CN=DST Root CA X3
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    MIIFVTCCBD2gAwIBAgISA2ymxMSWOd9z4d5MhK1RarzkMA0GCSqGSIb3DQEBCwUA
    MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
    ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xODExMTExNTI2NDhaFw0x
    OTAyMDkxNTI2NDhaMBkxFzAVBgNVBAMTDmF0b20ueW9qaWsubmV0MIIBIjANBgkq
    hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr+SwsS/VwilSnazx4Y9Xj9OIzYPx2s5W
    kxocZT7BMdO0oKNKolbe6AJMGrNKf5TjQu9EN+yal6rNZUOrrR7dS2gKvRjyH2mW
    5JniCW/osYVkHglgjvNbihQP4IBY9brvvtIW9reKyA9adq5zHHRW2RNaBG18oXFa
    mQb+uFGiCkpyjGK7XYmPkVA7DM6TtciFBGeTmY15vF4aniPQtu1TuksEc+WDvWfR
    K9ebYXghqBJd1OigtgVhOpDiSAnxjtx9wcjHuic/9wU8iI2VdkOB0xoMxlRNjQSZ
    DWgRCiZr/LwtoX6bSWzJex1kW7Q/zQnvA1eaKqD6mCIp5uO7KiK5AQIDAQABo4IC
    ZDCCAmAwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
    BQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQyxrlKdL9RV+v8Y7YwH4mV0iq4
    EDAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBvBggrBgEFBQcBAQRj
    MGEwLgYIKwYBBQUHMAGGImh0dHA6Ly9vY3NwLmludC14My5sZXRzZW5jcnlwdC5v
    cmcwLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v
    cmcvMBkGA1UdEQQSMBCCDmF0b20ueW9qaWsubmV0MEwGA1UdIARFMEMwCAYGZ4EM
    AQIBMDcGCysGAQQBgt8TAQEBMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMubGV0
    c2VuY3J5cHQub3JnMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcA4mlLribo6UAJ
    6IYbtjuD1D7n/nSI+6SPKJMBnd3x2/4AAAFnA5jZtQAABAMASDBGAiEAshqJHr2M
    l6n+9Dd31jkskn3lxh5iC7FTfPZoKxZGT6ECIQDDby9vNMmzh8eYysYr5UuTE4R9
    VOko3rzQZgj51O/nEQB2AGPy283oO8wszwtyhCdXazOkjWF3j711pjixx2hUS9iN
    AAABZwOY2bgAAAQDAEcwRQIhAPTO+Wry4Fl2+HddFMsWpfYJQ7dkXtW93N1+z77y
    ofgMAiB76ad1N7+AVOh4YvrRboK31F5cs3YJnKmKxINWkrI70TANBgkqhkiG9w0B
    AQsFAAOCAQEAJ1BYUTWpCIIYD0FKB9vuCEfYrg1NNHhYYr0jUKR49EPLO8DS1aRp
    KK1tr9EZti2lOYaEOKNo4dQkLLKgsF1kovHreosvXPF2oXRbN6UdVu+67fhIokD5
    FIS9pphaxIHEC4A9h7JK0LHJHMG9ySRDBbtz9Y0b7z5jGIxX0yzaqBcPJVG26SJm
    uyiys2bklC+N3mYAVYb/c3VWdCWzusHks+HCTx2y+YkqVkvCepdQYFoUKpk6ScSc
    Fz6r0DWBXGmhJLg0K+KxfXGUtTtwDjnBZCocX3FrQsQNrbYtvLyK2QhDv1Mr6V96
    P11a4LV3qq2eTfoIiNd9m2iqCJ7/pSWIjw==
    -----END CERTIFICATE-----
    subject=/CN=atom.yojik.net
    issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
    ---
    No client certificate CA names sent
    Peer signing digest: SHA512
    Server Temp Key: ECDH, P-384, 384 bits
    ---
    SSL handshake has read 3236 bytes and written 334 bytes
    Verification: OK
    ---
    New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    SSL-Session:
        Protocol  : TLSv1.2
        Cipher    : ECDHE-RSA-AES256-GCM-SHA384
        Session-ID: D488F9943CD771D5DF400C676729BDF315F5CBD01128E922D7DBCC0D80B467F3
        Session-ID-ctx:
        Master-Key: 45BF00E99AA29FB83E1395741E3A506800473105882554C46B50639665B600000E1F3048F051EF5E12D6C0804A0698D8
        PSK identity: None
        PSK identity hint: None
        SRP username: None
        TLS session ticket lifetime hint: 7200 (seconds)
        TLS session ticket:
        0000 - 59 1e 77 bc e8 c1 0e f8-c9 f2 38 f8 f9 f0 e9 4f   Y.w.......8....O
        0010 - 4b 91 2a 39 73 cc a6 85-f2 22 96 ae 4a a3 84 b8   K.*9s...."..J...
        0020 - e8 de 9b 34 74 1a d9 e7-88 f5 d1 bb 4c 2d 59 f2   ...4t.......L-Y.
        0030 - 0e 99 1e bd b7 82 ef 32-ab 0c 1a 33 c0 dd 31 6a   .......2...3..1j
        0040 - 5b 38 fc c5 27 29 d7 a3-ae f0 a5 bb 66 a0 b4 eb   [8..')......f...
        0050 - 7c 95 f2 16 cb 92 5c f3-7f c0 30 33 ec 77 f0 a8   |.....\...03.w..
        0060 - 8f 5e 9c f7 de c9 4f 95-1a 0e 09 27 7a 45 b0 db   .^....O....'zE..
        0070 - 84 ba 72 37 f1 a2 f5 95-43 0c e2 eb a3 18 94 a8   ..r7....C.......
        0080 - b3 d4 d7 15 4c 81 08 a2-17 3f 7b 15 fe 81 d8 5c   ....L....?{....\
        0090 - 74 60 ac 5e 2a 5a 22 07-6f ba 03 4f d5 46 5a 04   t`.^*Z".o..O.FZ.

        Start Time: 1543235404
        Timeout   : 7200 (sec)
        Verify return code: 0 (ok)
        Extended master secret: yes
    ---
    * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
    1 Login testmail testmail
    1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in
    QUIT
    DONE
    eric@aldebaran:~$

Le OK [CAPABILITY ... indique que la connexion s'est faite normalement; les caractéristiques du certificat sont affichées au-dessus. Le Logged: in indique que l'authentification a marché.

Nous avons donc testé les ports 25, 143 et 993 avec succès.

## Configuration d'un port qui n'accepte que les communications chiffrées.

Pour l'instant, postfix n'écoute que le port 25 (vous pouvez le vérifier avec la commande netstat -tlpn. Dans le fichier /etc/postfix/master.cf, seul la ligne suivante est active (décommentée):

    smtp      inet  n       -       y       -       -       smtpd

Nous allons mettre postfix en écoute du port 465: Dans le fichier /etc/postfix/master.cf, la ligne à décommenter est la suivante:

    # smtps     inet  n       -       -       -       -       smtpd

pour obtenir:

    smtps     inet  n       -       -       -       -       smtpd

### Test

On relance postfix et on regarde les ports servis:

    root@aijan:/home/ericadmin# service postfix restart
    root@aijan:/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 192.168.111.240:53      0.0.0.0:*               LISTEN      552/named
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      552/named
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      580/sshd
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2159/master
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      552/named
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      649/apache2
    tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      1792/dovecot
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      649/apache2
    tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      2159/master
    tcp6       0      0 :::53                   :::*                    LISTEN      552/named
    tcp6       0      0 :::22                   :::*                    LISTEN      580/sshd
    tcp6       0      0 :::25                   :::*                    LISTEN      2159/master
    tcp6       0      0 ::1:953                 :::*                    LISTEN      552/named
    tcp6       0      0 :::143                  :::*                    LISTEN      1792/dovecot
    tcp6       0      0 :::465                  :::*                    LISTEN      2159/master
    root@aijan:/home/ericadmin#

Le port 465 est ouvert et servi par postfix.

### test de connexion sur le port 465

    root@aijan:/home/ericadmin# telnet localhost 465
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    220 aijan.yojik.net ESMTP Postfix (Debian/GNU)
    ehlo aijan.yojik.net
    250-aijan.yojik.net
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250 SMTPUTF8
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.
    root@aijan:/home/ericadmin#

La connexion se fait normalement. Nous allons maintenant bloquer les communications non-chiffrées; les paramètres à modifier sont dans /etc/postfix/master.conf (2 premiers paramètres de la ligne smtps à décommenter.)

    smtps     inet  n       -       -       -       -       smtpd
      -o syslog_name=postfix/smtps
      -o smtpd_tls_wrappermode=yes

### Test

1. Essai avec communication non-chifrée:

    root@aijan:/home/ericadmin# telnet localhost 465
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    Connection closed by foreign host.
    root@aijan:/home/ericadmin#

La communication est refusée.

1. Essai avec communication chiffrée (nous utilisons openssl pour cela):

    root@adara:/etc# openssl s_client -connect localhost:465 -quiet
    depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
    verify return:1
    depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
    verify return:1
    depth=0 CN = adara.yojik.eu
    verify return:1
    220 adara.yojik.eu ESMTP Postfix (Debian/GNU)
    ehlo me
    250-adara.yojik.eu
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-AUTH PLAIN LOGIN
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250 SMTPUTF8
    quit
    221 2.0.0 Bye
    root@adara:/etc#

La communication est acceptée et fonctionne. Nous voyons aussi que notre certificat Letsencrypt a été vérifié.

Il reste une modification à faire pour n'autoriser que les communications chiffrées: Dans /etc/postfix/main.cf ajouter ou modifier la ligne suivante:

    smtpd_tls_auth_only = yes

Et rechargez Postfix.

### Test

    root@aijan:/home/ericadmin# telnet localhost 25
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    220 aijan.yojik.net ESMTP Postfix (Debian/GNU)
    ehlo aijan.yojik.net
    250-aijan.yojik.net
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-ENHANCEDSTATUSCODES
    250-8BITMIME
    250-DSN
    250 SMTPUTF8
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.
    root@aijan:/home/ericadmin#

On voit que la ligne "250-AUTH PLAIN LOGIN" est absente, ce qui confirme que Postfix a bien pris en compte notre dernière modification.

## Interdiction de communications non-chiffrées sur le port 465

Nous allons rajouter/modifier une "restriction" à la ligne gérant le port 465 dans /etc/postfix/master.cf

    smtps     inet  n       -       -       -       -       smtpd
      -o syslog_name=postfix/smtps
      -o smtpd_tls_wrappermode=yes
      -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

La dernière ligne est rajoutée, dé-commentée, modifiée (suivant le cas). On recharge postfix et on teste.

### Test

    root@aijan:/etc/postfix# telnet localhost 465
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    quit
    Connection closed by foreign host.
    root@aijan:/etc/postfix#

Ça fonctionne.

## Ajout de la gestion du port 587

Dans le fichier /etc/postfix/master.cf, dé-commentez les lignes suivantes et modifiez les comme indiqué. Ce sont les mêmes modifications que celles effectuées pour le port 465.

    submission inet n       -       y       -       -       smtpd
      -o syslog_name=postfix/submission
      -o smtpd_tls_security_level=encrypt
      -o smtpd_sasl_auth_enable=yes

    Ainsi que

     -o smtpd_recipient_restrictions=

### Test

    root@aijan:/etc/bind# netstat -tlnp
    Connexions Internet actives (seulement serveurs)
    Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
    tcp        0      0 192.168.111.240:53      0.0.0.0:*               LISTEN      3410/named
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      3410/named
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      580/sshd
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      4080/master
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      3410/named
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      649/apache2
    tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      2668/dovecot
    tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      4080/master
    tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      2668/dovecot
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      649/apache2
    tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      4080/master
    tcp6       0      0 :::53                   :::*                    LISTEN      3410/named
    tcp6       0      0 :::22                   :::*                    LISTEN      580/sshd
    tcp6       0      0 :::25                   :::*                    LISTEN      4080/master
    tcp6       0      0 ::1:953                 :::*                    LISTEN      3410/named
    tcp6       0      0 :::993                  :::*                    LISTEN      2668/dovecot
    tcp6       0      0 :::587                  :::*                    LISTEN      4080/master
    tcp6       0      0 :::143                  :::*                    LISTEN      2668/dovecot
    tcp6       0      0 :::465                  :::*                    LISTEN      4080/master
    root@aijan:/etc/bind#

Le port 587 est géré.

## Ajout de la gesion du port 993 (imap avec SSL/TLS)

Nous allons modifier la configuration de dovecot pour la prise en charge de ce port.

Il n'est pas encore "servi" comme nous l'avons vu avec la commande netstat -tlpn (vu auparavant.)

Le fichier à modifier est: /etc/dovecot/conf.d/10-master.conf La partie du fichier à modifier est la suivante:

    service imap-login {
       inet_listener imap {
         #port = 143
       }
       inet_listener imaps {
         #port = 993
         #ssl = yes
       }

pour donner ceci:

    service imap-login {
       inet_listener imap {
         port = 143
       }
       inet_listener imaps {
         port = 993
         ssl = yes
       }

Dans le fichier /etc/dovecot/conf.d/10-ssl.conf:

     ssl = yes
     ssl_protocols = !SSLv3

### Test

    root@aijan:/etc/dovecot# netstat -tlpn
    Connexions Internet actives (seulement serveurs)
    Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
    tcp        0      0 192.168.111.240:53      0.0.0.0:*               LISTEN      552/named
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      552/named
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      580/sshd
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2376/master
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      552/named
    tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      649/apache2
    tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      2668/dovecot
    tcp        0      0 0.0.0.0:143             0.0.0.0:*               LISTEN      2668/dovecot
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      649/apache2
    tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      2376/master
    tcp6       0      0 :::53                   :::*                    LISTEN      552/named
    tcp6       0      0 :::22                   :::*                    LISTEN      580/sshd
    tcp6       0      0 :::25                   :::*                    LISTEN      2376/master
    tcp6       0      0 ::1:953                 :::*                    LISTEN      552/named
    tcp6       0      0 :::993                  :::*                    LISTEN      2668/dovecot
    tcp6       0      0 :::143                  :::*                    LISTEN      2668/dovecot
    tcp6       0      0 :::465                  :::*                    LISTEN      2376/master
    root@aijan:/etc/dovecot#

Le port 993 est actif.

## Mise en route

Pour l'instant, notre Firewall n'autorise aucune conenxion sur les port 143, 993, 465, 587. Nous allons ouvrir les ports. Avant cela, il nous faut supprimer l'utilisateur testmail ...

    userdel testmail

Pensez à supprimer le répertoire home de cet utlisateur:

    rm -Rf /home/testmail

Ceci fait, ouvrons nos ports. Voici les lignes à ajouter à notre programme firewall.sh. Il suffira de le lancer et de sauver la configuration (comme déjà vu précédemment)

       #mail!!

        # Mail SMTP:25
        $IPT -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
        $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

        $IP6T -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
        $IP6T -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

        # Mail SMTP:587
        $IPT -t filter -A INPUT -p tcp --dport 587 -j ACCEPT
        $IPT -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

        $IP6T -t filter -A INPUT -p tcp --dport 597 -j ACCEPT
        $IP6T -t filter -A OUTPUT -p tcp --dport 587 -j ACCEPT

         # Mail IMAP:143
         $IPT -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
         $IPT -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

         $IP6T -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
         $IP6T -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT

        # Mail IMAPS:993
        $IPT -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
        $IPT -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT

        $IP6T -t filter -A INPUT -p tcp --dport 993 -j ACCEPT
        $IP6T -t filter -A OUTPUT -p tcp --dport 993 -j ACCEPT

        # Mail 465
        $IPT -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
        $IPT -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT

        $IP6T -t filter -A INPUT -p tcp --dport 465 -j ACCEPT
        $IP6T -t filter -A OUTPUT -p tcp --dport 465 -j ACCEPT

### Test

    root@aijan:/home/ericadmin/bin# ./firewall.sh restart
    firewall stopped [OK]
    firewall started [OK]
    root@aijan:/home/ericadmin/bin# iptables -L
    Chain INPUT (policy DROP)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
    ACCEPT     tcp  --  192.168.111.150      anywhere
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd

    Chain FORWARD (policy DROP)
    target     prot opt source               destination

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    ACCEPT     all  --  anywhere             anywhere
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
    ACCEPT     udp  --  anywhere             anywhere             udp dpt:ntp
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:submission
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:urd
    root@aijan:/home/ericadmin/bin#

Les ports sont bien ouverts. Et on sauvegarde:

    service netfilter-persistent save

    root@aijan:/home/ericadmin/bin# service netfilter-persistent save
    [....] Saving netfilter rules...run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
    run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save
    done.
    root@aijan:/home/ericadmin/bin#

Les règles IPV4 et IPV6 sont sauvegardées.

## Mise en place du fichier "auto-configuration" Mozilla

A voir ....

## Test en situation ...

### Lecture des messages

A partir de ma machine de bureau, test de connexion en IMAP, liste des messages, et lecture du contenu (port 993):

    eric@aldebaran:~$ openssl s_client -connect atom.yojik.net:993 -quiet
    depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
    verify return:1
    depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
    verify return:1
    depth=0 CN = aijan.yojik.net
    verify return:1
    * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
    a login ericadmin eBnIDQ+FZZI=
    a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in
    b select inbox
    * FLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk)
    * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk \*)] Flags permitted.
    * 3 EXISTS
    * 0 RECENT
    * OK [UIDVALIDITY 1527410684] UIDs valid
    * OK [UIDNEXT 4] Predicted next UID
    b OK [READ-WRITE] Select completed (0.000 + 0.000 secs).
    c FETCH 1:* FLAGS
    * 1 FETCH (FLAGS (\Seen NonJunk))
    * 2 FETCH (FLAGS (\Seen NonJunk))
    * 3 FETCH (FLAGS (\Seen))
    c OK Fetch completed (0.001 + 0.000 secs).
    d Fetch BODY[TEXT]
    d BAD Error in IMAP command FETCH: Invalid arguments (0.000 + 0.000 secs).
    d fetch body
    d BAD Error in IMAP command FETCH: Invalid arguments (0.000 + 0.000 secs).
    d FETCH 1 body
    * 1 FETCH (BODY ("text" "plain" ("charset" "us-ascii") NIL NIL "7bit" 10 2))
    d OK Fetch completed (0.002 + 0.000 + 0.001 secs).
    e fetch 2 body
    * 2 FETCH (BODY ("text" "plain" ("charset" "us-ascii") NIL NIL "7bit" 3 1))
    e OK Fetch completed (0.001 + 0.000 secs).
    f fetch 2 body[]
    * 2 FETCH (BODY[] {466}
    Return-Path: <ericadmin@aijan.yojik.net>
    X-Original-To: root@localhost
    Delivered-To: root@localhost
    Received: by aijan.yojik.net (Postfix, from userid 1000)
        id 6D42CD00904; Mon, 21 May 2018 12:11:41 +0200 (CEST)
    To: <root@localhost>
    Subject: essai d'envoi à root
    X-Mailer: mail (GNU Mailutils 3.1.1)
    Message-Id: <20180521101141.6D42CD00904@aijan.yojik.net>
    Date: Mon, 21 May 2018 12:11:41 +0200 (CEST)
    From: ericadmin@aijan.yojik.net (Eric Streit)

    .
    )
    f OK Fetch completed (0.001 + 0.000 secs).
    g fetch 3 body[]
    * 3 FETCH (BODY[] {735}
    Return-Path: <eric@aldebaran.yojik.net>
    X-Original-To: ericadmin@aijan.yojik.net
    Delivered-To: ericadmin@aijan.yojik.net
    Received: from aldebaran.yojik.net (unknown [IPv6:2a01:e0a:54:c220:6423:417b:6ef:ee21])
        by aijan.yojik.net (Postfix) with ESMTP id EC11BD00903
        for <ericadmin@aijan.yojik.net>; Mon, 21 May 2018 12:12:56 +0200 (CEST)
    Received: by aldebaran.yojik.net (Postfix, from userid 1000)
        id 8B42920620A; Mon, 21 May 2018 12:12:56 +0200 (CEST)
    To: <ericadmin@aijan.yojik.net>
    Subject: Re-essai
    X-Mailer: mail (GNU Mailutils 3.1.1)
    Message-Id: <20180521101256.8B42920620A@aldebaran.yojik.net>
    Date: Mon, 21 May 2018 12:12:56 +0200 (CEST)
    From: eric@aldebaran.yojik.net (Eric Streit)

    re-essai de aldebaran
    .
    )
    g OK Fetch completed (0.001 + 0.000 secs).
    h logout
    * BYE Logging out
    h OK Logout completed (0.000 + 0.000 secs).
    eric@aldebaran:~$

A partir de ma machine de bureau, test de connexion en IMAP, liste des messages, et lecture du contenu (port 143):

    eric@aldebaran:~$ telnet aijan.yojik.net 143
    Trying 192.168.111.240...
    Connected to aijan.yojik.net.
    Escape character is '^]'.
    * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot ready.
    ehlo aldebaran.yojik.eu
    ehlo BAD Error in IMAP command received by server.
    a login ericadmin eBnIDQ+FZZI=
    a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in
    b select inbox
    * FLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk)
    * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft NonJunk \*)] Flags permitted.
    * 3 EXISTS
    * 0 RECENT
    * OK [UIDVALIDITY 1527410684] UIDs valid
    * OK [UIDNEXT 4] Predicted next UID
    b OK [READ-WRITE] Select completed (0.000 + 0.000 secs).
    c logout
    * BYE Logging out
    c OK Logout completed (0.000 + 0.000 secs).
    Connection closed by foreign host.
    eric@aldebaran:~$

La récupération des messages s'est bien passée.

### Envoi de messages

Image de la configuration à faire sur thunderbird:

L'envoi de messages à partir de Thunderbird fonctionne. Il faut bien configurer le port smtp à 465 ...

Image de la configuration à faire.

L'envoi sur mon serveur personnel a échoué: l'adresse IPV4 fournie par FREE était sur une liste de blocage (anti-spams). J'ai demandé à être enlevé de cette liste, ce qui va prendre 48H environ.

Ré-essai ensuite ...

1. Envoi d'un message sur le compte du serveur à partir de la machine de bureau (thunderbird): OK.
2. Réception des messages sur la machine de bureau (thunderbird): OK.
3. Envoi d'un message à partir du compte du serveur (thunderbird): ça OK.

## Installation d'un analyseur des logs mail

### Installation

    apt-get install pflogsumm

### Utilisation

    pflogsumm -d today /var/log/mail.log

Vous obtiendrez une analyse approfondie des logs de la partie mail.

    root@adara:/home/ericadmin# pflogsumm -d today /var/log/mail.log
    Postfix log summaries for Jul  1

    Grand Totals

    messages

         24   received
         23   delivered
          0   forwarded
          0   deferred
          0   bounced
         29   rejected (55%)
          0   reject warnings
          0   held
          0   discarded (0%)

       2248k  bytes received
       2248k  bytes delivered
         17   senders
         13   sending hosts/domains
          3   recipients
          2   recipient hosts/domains

    Per-Hour Traffic Summary

        time          received  delivered   deferred    bounced     rejected
        --
        0000-0100           0          0          0          0          0
        0100-0200           0          0          0          0          0
        0200-0300           0          0          0          0          0
        0300-0400           0          0          0          0          3
        0400-0500           0          0          0          0          7
        0500-0600           0          0          0          0          1
        0600-0700           1          1          0          0          1
        0700-0800           2          2          0          0          1
        0800-0900           4          4          0          0          7
        0900-1000           4          4          0          0          2
        1000-1100          10          9          0          0          2
        1100-1200           2          2          0          0          1
        1200-1300           0          0          0          0          2
        1300-1400           0          0          0          0          0
        1400-1500           0          0          0          0          0
        1500-1600           1          1          0          0          2
        1600-1700           0          0          0          0          0
        1700-1800           0          0          0          0          0
        1800-1900           0          0          0          0          0
        1900-2000           0          0          0          0          0
        2000-2100           0          0          0          0          0
        2100-2200           0          0          0          0          0
        2200-2300           0          0          0          0          0
        2300-2400           0          0          0          0          0

    Host/Domain Summary: Message Delivery
    --
     sent cnt  bytes   defers   avg dly max dly host/domain
     -- -  -  - - --
         21     2241k       0     4,6 s   47,0 s  yojik.eu
          2     7008        0     0,8 s    1,0 s  picapo.net

    Host/Domain Summary: Messages Received

     msg cnt   bytes   host/domain
     -- -  --
          7     1918k  yojik.eu
          4    12773   lists.oasis-open.org
          2    29818   nongnu.org
          1    61932   sg.booking.com
          1    53567   bounces.amazon.fr
          1    46492   bounce.newsletter.delamaison.fr
          1    36499   mail.bitwarden.com
          1    36232   infos.materiel.net
          1    25976   newsdesmarq.ccemails.com
          1    20320   tradepubs.nl00.net
          1     6892   5v7mfyjapqzjtpqc.fncpq.3-xsveaq.na6.bnc.salesforce.com
          1     4987   hussein.org
          1     2021   inhrr.gob.ve

    Senders by message count

          6   goulya@yojik.eu
          2   m17n-list-bounces+eric=yojik.eu@nongnu.org
          1   bounces+3318447-412f-eric=yojik.eu@mail.bitwarden.com
          1   bounces+4713178-1151-eric=yojik.eu@sg.booking.com
          1   email@newsdesmarq.ccemails.com
          1   do_not_reply=netgear.com__413ah3rz7vwihm9c.ly8u7ddmyngfvref@5v7mfyjapqzjtpqc.fncpq.3-xsveaq.na6.bnc.salesforce.com
          1   eric@yojik.eu
          1   20180701072218f38c0af2e0e840cf938ae502e570p0eu@bounces.amazon.fr
          1   bounce-419_HTML-28507929-182305-7304800-452@bounce.newsletter.delamaison.fr
          1   p-m8bl38j2p7vg88u3n3hrzdpp4rcbq9n7x8cvc2fn23u5pwpnseghvzq-BHP30@infos.materiel.net
          1   Offers@tradepubs.nl00.net
          1   info@hussein.org
          1   docbook-apps-return-14782-eric=yojik.eu@lists.oasis-open.org
          1   docbook-apps-return-14783-eric=yojik.eu@lists.oasis-open.org
          1   docbook-apps-return-14784-eric=yojik.eu@lists.oasis-open.org
          1   docbook-return-3958-eric=yojik.eu@lists.oasis-open.org
          1   maria.rueda@inhrr.gob.ve

    Recipients by message count

         15   eric@yojik.eu
          6   goulya@yojik.eu
          2   nico@picapo.net

    Senders by message size
    --
       1917k  goulya@yojik.eu
      61932   bounces+4713178-1151-eric=yojik.eu@sg.booking.com
      53567   20180701072218f38c0af2e0e840cf938ae502e570p0eu@bounces.amazon.fr
      46492   bounce-419_HTML-28507929-182305-7304800-452@bounce.newsletter.delamaison.fr
      36499   bounces+3318447-412f-eric=yojik.eu@mail.bitwarden.com
      36232   p-m8bl38j2p7vg88u3n3hrzdpp4rcbq9n7x8cvc2fn23u5pwpnseghvzq-BHP30@infos.materiel.net
      29818   m17n-list-bounces+eric=yojik.eu@nongnu.org
      25976   email@newsdesmarq.ccemails.com
      20320   Offers@tradepubs.nl00.net
       6892   do_not_reply=netgear.com__413ah3rz7vwihm9c.ly8u7ddmyngfvref@5v7mfyjapqzjtpqc.fncpq.3-xsveaq.na6.bnc.salesforce.com
       4987   info@hussein.org
       4275   docbook-apps-return-14782-eric=yojik.eu@lists.oasis-open.org
       3589   docbook-return-3958-eric=yojik.eu@lists.oasis-open.org
       2564   docbook-apps-return-14784-eric=yojik.eu@lists.oasis-open.org
       2345   docbook-apps-return-14783-eric=yojik.eu@lists.oasis-open.org
       2021   maria.rueda@inhrr.gob.ve
       1124   eric@yojik.eu

    Recipients by message size
    --
       1916k  goulya@yojik.eu
     333462   eric@yojik.eu
       7008   nico@picapo.net

    message deferral detail: none

    message bounce detail (by relay): none

    message reject detail

      RCPT
        blocked using zen.spamhaus.org (total: 2)
               1   amazonaws.com
               1   b941c024.business.dg-w.de
        cannot find your hostname (total: 25)
               9   183.159.95.6
               3   210.239.8.55
               3   114.228.155.122
               2   2406:fc00:1:7:214:22ff:fe08:eb34
               2   117.63.127.41
               2   159.89.236.50
               1   140.127.1.29
               1   37.49.227.169
               1   80.211.61.89
               1   222.95.187.160
        Client host rejected: Access denied (total: 2)
               2   80.211.61.89

    message reject warning detail: none

    message hold detail: none

    message discard detail: none

    smtp delivery failures: none

    Warnings
    --
      smtpd (total: 16)
             6   hostname host89-61-211-80.serverdedicati.aruba.it does not reso...
             3   hostname host-210.239.8.55.n-cube.ne.jp does not resolve to add...
             2   mm-115-58-214-37.mogilev.dynamic.pppoe.byfly.by[37.214.58.115]:...
             2   hostname 41.127.63.117.broad.cz.js.dynamic.163data.com.cn does ...
             1   hostname hn.kd.ny.adsl does not resolve to address 115.57.125.2...
             1   hostname mails.npust.edu.tw does not resolve to address 140.127...
             1   hostname 82-64-48-5.subs.proxad.net does not resolve to address...

    Fatal Errors: none

    Panics: none

    Master daemon messages: none
    root@adara:/home/ericadmin#

Bien: la configuration est quasi terminée: il nous reste à ajouter SPF, DKIM, Dane et DNSSEC. et les comptes virtuels ...

« Previous Next »