[ Présentation de la configuration | Configuration de fetchmail   ( Méthode automatique   ,  Méthode manuelle ) |  Limiter la taille des mails récupérés et supprimer des mails directement sur le serveur POP du FAI    | Configuration de procmailInstallation d'un serveur pop ]

Dernière modification 6 janvier 2017

Recevoir du courrier et configurer un serveur pop

Configuration Internet


( ce document est disponible au format pdf dans la rubrique téléchargement)

Présentation de la configuration

Cette page a pour objet de vous présenter comment récupérer les mails des utilisateurs de votre réseau et les mettre à leur disposition.  Le rôle des différents outils présentés dans cette page est le suivant:
- fetchmail permet de récupérer les mails des utilisateurs de votre réseau sur plusieurs serveurs POP
- procmail permet de faire le tri des mails et de dispatcher suivant le destinataire
- le serveur POP pemet de rendre accessible aux lecteurs de mails de votre réseau les mails qui sont arrivés, que vos clients soient sous windows ou sous unix.
Complémentaire à cette page, consultez également les pages:
- filtrage anti spam et anti virus
- sendmail pour envoyer le courrier

Niveau architecture, le serveur pop et les services de récupération de mail fetchmail/procmail tournent sur un serveur de votre réseau domestique, c'est sur même machine qu'on concentrera la récupération des mails des utilisateurs du réseau issus des différents serveurs de mail qu'on peut trouver sur le net accessibles via IMAP ou POP (version sécurisée ou non). Sur les postes clients il n'y a rien à installer de particulier, mise à part un client de messagerie classique comme thunderbird dans lequel on configurera le serveur pop local pour récupérer les mails et le serveur sendmail local pour l'émission.
[Retour haut de la page ]

Configuration de fetchmail

Méthode automatique

Pour une version multi utilisateurs, vous avez la possibilité de lui indiquer d'aller récupérer toutes les heures en rajoutant le script recupmail dans le répertoire /etc/cron.hourly/ voilà son contenu

/usr/bin/fetchmail -a -f /root/.fetchmailrc -L /var/log/fetchmail.log
echo "" >> /var/log/fetchmail.log

ATTENTION les commandes lancés dans ce fichier doivent être indiquées avec leur chemin complet. Le fichier /var/log/fetchmail.log doit d'abord être créé avec un touch.

Maintenant root doit créer un fichier .fetchmailrc qui doit se trouver dans sa home directory avec les droits 600 (chmod 600 ~/.fetchmailrc ). Ce fichier contient les lignes suivantes:

set logfile /var/log/fetchmail.log

poll pop.fai.fr protocol pop3
 user login-fai there with password password-fai is olivier here

poll pop.fnac.net protocol pop3
 user login-fnac there with password password-fnac is olivier here

poll pop.free.fr protocol pop3
 user login-free there with password password-free is olivier here

poll pop.ifrance.com protocol pop3
 user login-ifrance there with password password-ifrance is olivier here

poll pop.fnac.net protocol pop3
 user login2-fnac there with password password2-fnac is veronique here

poll pop.ifrance.com protocol pop3
 user login2-ifrance there with password password2-ifrance is veronique here

poll pop.libertysurf.fr protocol pop3
 user login-liberty there with password password-liberty is olivier here

Le fichier fetchmail sous /var/log est le fichier de log, pop.fai.fr est le nom du serveur pop de votre provider. login-fai est le nom de votre login chez votre provider, password-fai est le mot de passe chez le provider, olivier est le login de l'utilisateur local correspondant. Vous rajoutez autant de ligne poll et user que vous avez de compte pop à droite et à gauche, vous noterez qu'on peut en profiter pour relever les emails d'autres utilisateurs de votre réseau (dans l'exemple utilisateur du réseau privé veronique).

ATTENTION: les mots de passe sont marqués en clair (d'où les droits du fichier...).

Par défaut fetchmail se repose ensuite sur le serveur smtp qui tourne sur la machine sur le port 25 pour délivrer les mails sous /var/spool/mail. Dans le cas où vous utilisez un serveur SMTP avec une connexion chiffrée TLS/SSL sur le port 465 fetchmail ne saura pas délivrer les mails. Dans ce cas il faudra se servir de procmail comme MDA (mail delivery agent) et faire la modification suivante dans le fichier .fetchmailrc

poll pop.libertysurf.fr protocol pop3
 user login-liberty there with password password-liberty is olivier here
 mda "mda "/usr/bin/procmail -d %T"

maintenant si votre FAI a mis en place un serveur pop avec connexion sécurisée avec TLS/SSL on va rajouter l'option qui va bien comme ceci

poll pop.libertysurf.fr protocol pop3
 user login-liberty there with password password-liberty is olivier here
 option ssl;
 mda "mda "/usr/bin/procmail -d %T"

il faudra rajouter ensuite l'option --sslcertck à la commande fetchmail comme ceci

/usr/bin/fetchmail --sslcertck -a -f /root/.fetchmailrc -L /var/log/fetchmail.log

[Retour haut de la page ]

Méthode manuelle

Vous avez aussi la possibilité en tant que simple utilisateur de créer votre propre fichier .fetchmailrc (syntaxe idem plus haut si ce n'est le chemin du fichier de log où vous devez avoir les droits d'écriture) que vous placerez dans votre homedirectory  et de lancer fetchmail d'un shell.  Vous pouvez très bien récupérer également les mails des autres utilisateurs de votre réseau.

[Retour haut de la page ]

Limiter la taille des mails récupérés et supprimer les mails sur le serveur

NOTE Si vous voulez limiter la taille des fichiers récupérés à 100Ko par exemple, vous avez l'option:

fetchmail -l 100000

Ca va laisser tous les fichiers dont la taille est supérieure à 100Ko sur le serveur pop du fai, pour visualiser l'header et les supprimer.

telnet pop.fai.fr 110
Trying 195.154.205.225...
Connected to pop.fai.fr
Escape character is '^]'.
+OK POP3 mailhub.fai.fr v7.64 server ready
user login-pop
+OK User name accepted, password please
pass password-pop
+OK Mailbox open, 4 messages
list
+OK Mailbox scan listing follows
1 2199201
2 132664
3 388987
4 310757

Vous pouvez voir que vous avez 4 messages ainsi que leur taille. Pour visualiser l'header du message 1:

top 1   0

Vous pouvez visualiser le corps du message mais je ne le vous conseille pas, si c'est une image de 1Mo, ça va bloquer votre shell un certain temps. Je vous donne quand même la commande pour le message 1:

retr 1

Pour supprimer le message 1:

dele 1

Et enfin pour quitter:

quit

[Retour haut de la page ]

Configuration de procmail

Dans le cas où vous avez un compte pop unique avec plusieurs emails rattachés, fetchmail va tout mettre dans la boîte aux lettres de celui qui va lancer la commande fetchmail, pour effectuer un tri à la réception, vous devez penser à procmail.

Procmail permet de trier le courrier reçu par fetchmail. pour cela tout utilisateur avec son .fetchmailrc doit avoir un .procmailrc également dans sa home directory. Si je prends mon exemple, je disposais d'un compte pop unique chez mon provider fnac.net, mon adresse email était olivier.hoarau@fnac.net, mon compte local est olivier, celle de ma tendre et chère veronique.hoarau@fnac.net et compte local veronique. Si je veux expédier à Véronique tous les courriers dont les champs Destinataire (To) ou Copie (Cc) contiennent le champ veronique ou Véronique ou encore Veronique, voici la tête de mon .procmailrc

 #olivier
:0 c
*^(To|Cc|Bcc):*(veronique|Veronique)
!veronique

Celui de ma femme aura cette tête là:
 
#veronique
:0 c
*^(To|Cc|Bcc):*(olivier|Olivier|funboard|Funboard)
!olivier

Je suis abonné à une liste funboard, c'est le nom de la liste qui apparaît dans la liste du destinataire ou du destinataire en copie, et non pas mon nom, d'où le critère de tri.

Le ! réexpédie localement le courrier vers le bon destinataire. Vous pouvez très bien aussi faire un fichier unique pour chaque utilisateur qui aura cette tête là:

#redirection vers veronique
:0 c
*^(To|Cc|Bcc):*(veronique|Veronique)
!veronique

#redirection vers olivier
:0 c
*^(To|Cc|Bcc):*(olivier|Olivier|funboard|Funboard)
!olivier

# les autres mails au destinataire non identifié vont vers olivier, vous pouvez très bien mettre /dev/null (poubelle) à la place de !olivier
:0
*.*
!olivier

A noter que le petit c permet de pouvoir gérer les copies, en son absence si un mail arrive avec pour destinataire (To) Véronique et Olivier en copie (Cc), ce n'est que le premier dans la liste qui recevra le mail (en l'occurence Véronique dans mon exemple de fichier),c permet qu'olivier reçoive aussi le courrier.
Le courrier échoue sous /var/spool/mail dans un fichier qui a pour nom le login de l'utilisateur.

Si vous disposez d'un email unique avec un seul email rattaché et que vous comptez vous en servir pour plusieurs personnes. Vous pouvez demander à vos interlocuteurs de préciser dans le sujet du mail le destinataire et faire un tri similaire à celui vu précédemment en filtrant sur le champ Subject du mail (*^(Subject):*(veronique|Veronique)).

Voilà un filtre intéressant trouvé à l'adresse suivante http://www.linuxfocus.org/Francais/January2003/article279.shtml. Il permet d'avertir automatiquement l'expéditeur qui vous a envoyé un fichier word.

# Promail script to
# reject word documents. Reject the mail, but do not reply to
# error messages "From MAILER-DAEMON"
# If you use ":0 Bc" instead of ":0 B" then you will still get the mail
:0 H
* !^From.*DAEMON
{
# The mime messages with word documents look like this in the body
# of the message:
#------=_NextPart_000_000C_01C291BE.83569AE0
#Content-Type: application/msword;
# name="some file.doc"
#Content-Transfer-Encoding: base64
#Content-Disposition: attachment;
# filename="real file.doc"
:0 B
* ^Content-Type:.*msword
| (formail -r ; cat /home/olivier/reject-text-msword ) | $SENDMAIL -t
}

# par défaut les autres mails sont envoyés à olivier
:0:
!olivier


Le fichier /home/olivier/reject-text-msword contient un texte décrivant les raisons pour lesquelles vous ne voulez pas recevoir de fichier word et préférez d'autres formats. A noter que ce script est adaptable pour des réponses automatiques en fonction de certains critères.
[Retour haut de la page ]

Configuration du serveur POP

Vous devez installer le package dovecot, voilà le résultat

Generating a 2048 bit RSA private key
...................+++
..........................................+++
writing new private key to '/etc/pki/tls/private/dovecot.pem'
-----

le message précédent correspond à la création des clés pour les connexions SSL. Le package dovecot contient le serveur imap et pop3, pour ma part j'utilise ce dernier. Voilà mon fichier /etc/dovecot/dovecot.conf en configurant un serveur pop3

## Dovecot configuration file

# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration

# "doveconf -n" command gives a clean output of the changed settings. Use it
# instead of copy&pasting files when posting to the Dovecot mailing list.

# '#' character and everything after it is treated as comments. Extra spaces
# and tabs are ignored. If you want to use either of these explicitly, put the
# value inside quotes, eg.: key = "# char and trailing whitespace  "

# Most (but not all) settings can be overridden by different protocols and/or
# source/destination IPs by placing the settings inside sections, for example:
# protocol imap { }, local 127.0.0.1 { }, remote 10.0.0.0/8 { }

# Default values are shown for each setting, it's not required to uncomment
# those. These are exceptions to this though: No sections (e.g. namespace {})
# or plugin settings are added by default, they're listed only as examples.
# Paths are also just examples with the real defaults being based on configure
# options. The paths listed here are for configure --prefix=/usr
# --sysconfdir=/etc --localstatedir=/var

# Protocols we want to be serving.
#protocols = imap pop3 lmtp
protocols = pop3

# A comma separated list of IPs or hosts where to listen in for connections.
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
#listen = *, ::
listen = *

# Base directory where to store runtime data.
#base_dir = /var/run/dovecot/

# Name of this instance. In multi-instance setup doveadm and other commands
# can use -i <instance_name> to select which instance is used (an alternative
# to -c <config_path>). The instance name is also added to Dovecot processes
# in ps output.
#instance_name = dovecot

# Greeting message for clients.
#login_greeting = Dovecot ready.

# Space separated list of trusted network ranges. Connections from these
# IPs are allowed to override their IP addresses and ports (for logging and
# for authentication checks). disable_plaintext_auth is also ignored for
# these networks. Typically you'd specify your IMAP proxy servers here.
#login_trusted_networks =

# Space separated list of login access check sockets (e.g. tcpwrap)
#login_access_sockets =

# With proxy_maybe=yes if proxy destination matches any of these IPs, don't do
# proxying. This isn't necessary normally, but may be useful if the destination
# IP is e.g. a load balancer's IP.
#auth_proxy_self =

# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
#verbose_proctitle = no

# Should all processes be killed when Dovecot master process shuts down.
# Setting this to "no" means that Dovecot can be upgraded without
# forcing existing client connections to close (although that could also be
# a problem if the upgrade is e.g. because of a security fix).
#shutdown_clients = yes

# If non-zero, run mail commands via this many connections to doveadm server,
# instead of running them directly in the same process.
#doveadm_worker_count = 0
# UNIX socket or host:port used for connecting to doveadm server
#doveadm_socket_path = doveadm-server

# Space separated list of environment variables that are preserved on Dovecot
# startup and passed down to all of its child processes. You can also give
# key=value pairs to always set specific settings.
#import_environment = TZ

##
## Dictionary server settings
##

# Dictionary can be used to store key=value lists. This is used by several
# plugins. The dictionary can be accessed either directly or though a
# dictionary server. The following dict block maps dictionary names to URIs
# when the server is used. These can then be referenced using URIs in format
# "proxy::<name>".

dict {
  #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
}

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

}

Maintenant dans le répertoire /etc/dovecot/conf.d il y a deux, trois bricoles à modifier

Dans le fichier 10-ssl.conf on spécifie qu'on utilise une connexion chiffrée par SSL entre le serveur et le client en mettant

ssl = required

ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem

dans le fichier 10-auth.conf on va mettre

disable_plaintext_auth = yes
auth_mechanisms = plain

en effet comme on utilise SSL on peut utiliser un mécanisme d'authentification en clair.

maintenant dans le fichier auth-system.conf.ext on indique qu'on passe par PAM

passdb {
  driver = pam
  # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
  # [cache_key=<key>] [<service name>]
  #args = dovecot
}
userdb {
  # <doc/wiki/AuthDatabase.Passwd.txt>
  driver = passwd
  # [blocking=no]
  #args =

  # Override fields from passwd
  #override_fields = home=/home/virtual/%u
}

dans le fichier 10-mail.conf on indique que les mailbox se trouvent sous /var/mail et portent le nom de chaque utilisateur du système

mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group = mail

maintenant on relance dovecot

systemctl restart dovecot

si vous avez l'erreur suivante

oct. 10 10:49:26 mana.kervao.fr dovecot[19551]: pop3(olivier): Error: chown(/home/olivier/mail/.imap, group=12(mail)) failed: Operation not permitted (egid=5000(hoarau), group based on /var/mail/olivier - see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
oct. 10 10:49:26 mana.kervao.fr dovecot[19551]: pop3(olivier): Error: Couldn't open INBOX: Permission denied

il faudra modifier les droits des boites aux lettres comme ceci /var/mail

chmod 0600 /var/mail/*

Du coté poste client, configurer votre logiciel de mail favori pour que votre serveur Linux soit le serveur POP (il suffit de rajouter le nom du poste en question dans le champ qui va bien), au niveau de la sécurité de connexion on indique SSL/TLS. Exemple ici avec thunderbird


à la première connexion il faudra sans doute confirmer l'exception de sécurité pour votre serveur de mail



et puis c'est tout, les courriers seront récupérés dans /var/spool/mail du serveur.

Si jamais un jour ou l'autre votre client de messagerie préféré vous sort que le certificat du serveur est expiré et plus valide, il faudra le renouveler. Pour cela on va commencer par sauvegarder la clé privée et le certificat de dovecot en tapant:

cp /etc/ssl/private/dovecot.pem /etc/ssl/private/dovecot.pem.old
cp /etc/ssl/certs/dovecot.pem /etc/ssl/certs/dovecot.pem.old


on crée une nouvelle clé privée

openssl genrsa -out /etc/ssl/private/dovecot.pem 1024

voilà le résutat

Generating RSA private key, 1024 bit long modulus
..................++++++
.........++++++
e is 65537 (0x010001)

on crée le nouveau certificat d'une durée de validité de 2ans. Il est bien évident que ce certificat est perso et n'a aucune validité sur internet, il sera utile pour un usage strictement privé.

openssl req -new -x509 -key /etc/ssl/private/dovecot.pem -out /etc/ssl/certs/dovecot.pem -days 730

voilà le résultat

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Bzh
Locality Name (eg, city) []:Brest
Organization Name (eg, company) [Internet Widgits Pty Ltd]:none
Organizational Unit Name (eg, section) []:none
Common Name (e.g. server FQDN or YOUR name) []:mana
Email Address []:olivier.hoarau@funix.org

on relance dovecot

systemctl stop dovecot.service
systemctl start dovecot.service

il faudra sans doute à nouveau accepter le nouveau certificat dans le client de messagerie

Si dans les logs vous avez ce type de message

janv. 04 17:59:36 mana.kervao.fr dovecot[29061]: master: Warning: /power is no longer mounted. See http://wiki2.dovecot.org/Mountpoints

c'est un point de message qui a disparu, il suffit de l'indiquer à dovecot en tapant

doveadm mount remove /power

 
[Retour page d'accueil FUNIX]