Installer un serveur de courier (Postfix - IMAP)

Installer et configurer un serveur de courier
dernière mise-à-jour du tuto : 19/05/2006 (droits du fichier .procmailrc)
Logiciels principaux : Postfix - procmail - courier-imap
Logiciels secondaires : clamav (antivirus) - spamassassin (anti-spam) - trashscan (scanner de pourriel).

Ce mémo est en fait la procédure que j’ai réalisé pour installer un serveur de courier, sur linux Debian, qui permet d’envoyer et de recevoir du courier sur son propre serveur, à sa propre adresse du type monNom@monDomaine.com. Pour le protocol choisi, j’utilise IMAP,plus recommandé que POP3 pour la réception, et SMTP pour l’envoie et le transfert.

Durant tout le tuto, nous supposerons que votre nom sera monNom, votre serveur monServeur, votre domaine monDomaine, votre fournisseur d’accès monFAI, et votre adresse monNom@monDomaine.com. On suppose que votre adresse IP est monIP.

Ce tuto est certainement améliorable, et peut être modifié à tout moment (sous licence GPL :slightly_smiling: ).

1. Principe de fonctionnement

Courier-imap fournit le protocole IMAP et sera utilisé pour la reception du courier. Les messages reçus par courier-imap seront déposés tel quel sur le serveur.
Postfix va regarder ces messages et va les transferer dans le répertoir de courier IMAP de l’utilisateur.
Il va aussi faire appel à Procmail, pour vérifier le message avant de le distribuer.
Procmail va scanner le message pour voir s’il n’y a pas de virus ou s’il ne s’agit pas de messages SPAM.
Si le message est correcte, il sera acheminé par Postfix, donc, dans le répertoir local de nouveaux couriers de l’utilisateur ; sinon il sera acheminé vers un autre répertoir, suivant le type de message.
Le programme Mail vérifie les messages et alerte l’utilisateur lors d’un nouveau message.
Un logiciel comme Thunderbird ou Evolution permet de les lire et de les écrire.
Postfix assure aussi l’envoie des messages, à travers le service SMTP du fournisseur d’accès internet.
Il n’est pas nécessaire de configurer Fetchmail pour la distribution du courier, celle-ci étant assurée par Postfix.

2. Préalable

2.0 disposer d’une IP fixe
Pour éviter les soucis, le mieux c’est d’avoir une IP fixe, qui ne changera jamais, de façon à ce que le nom de domaine, et donc le serveur de courier du domaine, soit toujours retrouvable et accéssible. Vérifiez auprès de votre fournisseur d’accès, c’est eux seul qui peuvent vous délivrer une véritable adresse IP fixe. Si ce n’est pas le cas, j’en connais un, FAI, qui délivre d’office une IP fixe à ses abonnés adsl… en France… et pas cher en plus. En plus leurs modem, la freebox, fonctionne trés bien sous Linux. Mais je peux pas dire qui c’est, vous comprenez…

2.1 vérifier le DNS

Il faut avant tout s’assurer que notre DNS fonctionne, en particulier qu’il supporte le service de courier.
Pour se faire, executer la commande :

host -t MX monDomaine.com

Elle doit renvoyer une ligne :
monDomaine.com mail is handled by 1 monServeur.monDomaine.com.

Si ce n’est pas le cas, il faut configurer votre serveur de domaine.

2.2 vérifier le fichier hosts

Ensuite, il faut s’assurer que votre domaine est bien renseigné sur votre serveur, ainsi que le nom du serveur, avec les commandes hostname et dnsdomainname.
hostname doit retourner monServeur (ou monServeur.monDomaine.com)
dnsdomainname doit retourner monDomaine.com

Si ce n’est pas le cas, vous devez modifier le fichier /etc/hosts en ajoutant (ou modifiant) les deux premières lignes :

127.0.0.1 localhost.monDomain.com localhost
monServeur.monDomain.com monServeur

2.3 désinstaller Sendmail et Exim

Postfix est un Mail Transport Agent (MTA), tout comme Sendmail. Il sert à transferer les couriers d’un compte vers un autre.
Postfix possède son propre programme sendmail, homonyme du logiciel Sendmail, et vous devez donc vous assurer que le package Sendmail n’est pas installé. Auquel cas il faille le désinstaller avant d’installer Postfix (par contre, le programme sendmail de postfix doit exister après l’installation de celui-ci).
Désinstallez aussi Exim, qui est un autre MTA.

3. Installation

3.1 Programmes principaux
A l’aide de synaptic ou d’apt-get, on installe les packages suivants : courier-imap postfix procmail clamav spamassassin
Deplus on télécharge le programme TrashScan depuis cette adresse : trashware.mirrorz.com/

3.2 Programmes secondaires
Pour ceux qui utilisent webmin, on peut installer en plus webmin-postfix, webmin-procmail, webmin-spamassassin.
On peut aussi installer clamcour (antivirus spécial courier).

4. Configuration

4.1 Courier-imap

Il n’y a rien à configurer pour Courier-imap, juste s’assurer qu’il est lancé, par la commande /etc/init.d/courier-imap start.
Par contre, il faut créer les dossiers de courier IMAP de l’utilisateur.
Pour se faire, dans le répertoir de celui-ci on execute les commandes :

maildirmake Maildir
maildirmake -f Sent Maildir
maildirmake -f Queue Maildir
maildirmake -f junkmail Maildir
maildirmake -f virus Maildir
maildirmake -f Drafts Maildir
maildirmake -f Trash Maildir

cela créer un répertoir spécial de courrier, formaté pour le courier, nommé Maildir, dans lequel doit se trouver les repertoirs cachés .Sent .Queue .junkmail .virus .Drafts et .Trash.

4.2 Postfix

Tout d’abord, on copie le fichier /etc/hosts dans le répertoir /var/spool/postfix/etc/ afin de s’assurer qu’il prenne bien en compte les noms locaux.

Ensuite, on édite le fichier de configuration de postfix /etc/postfix/main.cf
Tout les paramètres ne sont pas obligés, la liste des paramètres possibles étant assez longue, et Postfix disposant par défaut d’une bonne configuration.
En revanche, on doit le configurer un minimum.
Mon main.cf ressemble à celui-ci :

append_dot_mydomain = no
biff = no
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
queue_directory = /var/spool/postfix

myhostname = monServeur.monDomaine.com
mydomain = monDomaine.com
masquerade_domains = monDomaine.com
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
inet_interfaces = all
mynetworks = monIpReseau/24, 127.0.0.0/8
myorigin = /etc/mailname
relayhost = smtp.monFAI.fr
home_mailbox = Maildir/
mailbox_command = /usr/bin/procmail -Y -a $DOMAIN
relay_domain = monDomain.com
smtpd_recipient_restrictions = permit_mynetworks,check_relay_domains

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases 
setgid_group = postdrop
mail_owner = postfix
mailbox_size_limit = 0
mail_spool_directory = /var/spool/mail
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
delay_warning_time = 4h
recipient_delimiter = +

L’important est dans le second paragraphe.
myhostname est le nom d’hote du serveur, il doit être complet, avec le nom de domaine.
mydomaine est le nom de domaine, qui doit correspondre au nom complet du serveur sans son nom abrégé.
mydestination correspond aux adresses qui seront gérées par postfix. Pour éviter les boucles (adresses renvoyées à elles-même sans arrets), on doit ajouter les paramètres $mydomain, localhost.$mydomain, localhost.
mynetworks est la plage d’adresse du reseau, ou plus exactement, l’adresse du réseau. Celle-ci n’est pas l’adresse IP du serveur, mais l’adresse IP du réseau. Par exemple, si l’adresse IP du serveur est de 192.168.0.100, et que son masque est de 255.255.255.0 (24 bits), son adresse réseau (monIpReseau) est 192.168.0.0. On ajoute aussi l’adresse réseau du localhost et son masque de 8 bits.
myorigine renseigne sur le nom de domaine d’origine. Dans le fichier /etc/mailname doit se trouver votre nom de domaine.
relayhost est la passerelle qui va relayer les messages sortant, les couriers envoyés. Si vous avez un fournisseur internet, celle-ci peut-être smtp.
home_mailbox est le repertoir de message de l’utilisateur. Comme on utilise courier-imap, celui-ci doit être Maildir suivit de /
mailbox_command est la commande que postfix doit effectuer pour l’acheminement des messages. Ici on fait appel à procmail, qui va scanner les messages avant de les délivrer.
smtpd_recipient_restrictions = permit_mynetworks,check_relay_domains empèche que l’on utilise votre serveur postfix à votre insu (trés important, ça m’est déjà arrivé, sans ça, ça spamait depuis mon serveur).

On sauvegarde et l’on recharge postfix avec la nouvelle configuration par la commande : postfix reload
On peut retrouver ces paramètres par la commande : postconf -n
Pour démarrer postfix : postfix start
Pour l’arréter en cas de problèmes : postfix stop
Pour forcer postfix à poster les messages en attente : postfix flush

(note, on peut aussi supprimer les messages en attente, si l’on est encore en phase de test et si par exemple on a fait un mail forwarding loop local et que l’on se retrouve avec plus de 1000 messages warning en attente, en vidant le repertoir /var/spool/postfix/active/)

4.3 Procmail

Procmail va être lancé par postfix à chaque nouveaux messages. Son fichier de configuration doit se trouver dans le répertoire de l’utilisateur et est nommé .procmailrc, en mode user, droits 644.
Le fichier /home/monNom/.procmailrc doit être édité de la façon suivante :

# Preliminaires
SHELL=/bin/bash
MAILDIR=$HOME/Maildir/
DEFAULT=$MAILDIR
ORGMAIL=$MAILDIR
LOCKFILE=$HOME/lockfile.lock
ASSASSINLOCK=$HOME/assassin.lock
DEFAULT=$HOME/Maildir/
JUNKMAIL=$HOME/Maildir/.junkmail/
TRASH=$HOME/Maildir/.Trash
NEWBIE=$HOME/Maildir/.LinuxNewbie/
EXPERT=$HOME/Maildir/.LinuxExpert/
VIRUS=$HOME/Maildir/.virus/
BITBUCKET=/dev/null
LOGFILE=/var/log/procmailrc.log
VERBOSE=yes
LOGABSTRACT=all

# Filtres de courrier : 
# on verifie d'abord si le message est du spam, avec spamassassin

:0
* ^To:.*spam@monDomaine.com
* < 256000

{
:0c: spamassassin.spamlock
| sa-learn --spam

:0
$JUNKMAIL
}

#On revérifie au cas où spamassassin aurait fait une erreur

:0
* ^To:.*postmaster@monDomaine.com
* < 256000

{
:0c: spamassassin.hamlock
| sa-learn --ham

:0
$TRASH
}

#On execute TrashScan, qui va scanner le fichier à l'aide de l'anti-virus clamav

:0
* multipart
* !^X-Virus-Scan:
| /usr/local/bin/trashscan

#Apposition du label suspect sur les mails scannés positifs aux virus

:0
* ^X-Virus-Scan: Suspicious
$VIRUS

#Filtres de news

:0 :
* ^Sender: newbie-owner
$NEWBIE

:0 :
* ^Sender: expert-owner
$EXPERT

#Redirection de couriers indésirables

:0
* ^From: Sms Message
$BITBUCKET

#Execution du démon SpamAssassin

:0 fw : $ASSASSINLOCK
| spamc

:0
* ^X-Spam-Flag: YES
$JUNKMAIL

Une fois cela effectué, on a pas à redemarrer procmail, puisque celui-ci est lancé à chaques nouveaux messages par postfix.
TrashScan doit cependant être installé, ce qui est simple à faire.

4.4 TrashScan
TrashScan est un petit scripts bien utile qui va permet de scanner les fichiers mail à l’aide de l’antivirus clamav et d’autres utilitaires.
Une fois le fichier telechargé, on le décompresse avec la commande tar -zxvf trashscan-.tar.gz
Ensuite, dans le repertoir trashscan-, on edite l’entête du fichier trashscan selon ses préférences, puis on copier le fichier dans le répertoir /usr/local/bin/.
Pour plus de renseignements, lisez le fichier README présent dans le repertoir de TrashScan.

5. Lancement du serveur de courier
On est fin près pour lancer le serveur de courier.

Déjà, on peut vérifier si les messages fonctionnent en local :
commande : mail monNom -s test
ceci est un test local
. (le point indique la fin du message)
cc: (pas de cc)
Dans le logiciel de courier, un simple rafraichissement des couriers devrait faire apparaitre le message test.

Ensuite, on vérifie si l’envoie et la réception se fait vers une adresse distante.

En cas de problème, on peut examiner les logs suivants :
log de postfix : /var/log/mail.err
log de procmail : /var/log/procmailrc.log

Si tout est correct, on peut modifier le fichier .procmailrc pour éviter la surcharge de log :
VERBOSE=no
#LOGABSTRACT=all

Astuces et recommandations
Pour vérifier les messages, avec Gkrellm, et l’applet de mail, utilisez simplement le programme mail.
N’utilisez pas fetchmail si ce n’est pas nécessaire.

Le mail forwarding loop est en fait un message qui est envoyé à une adresse A, puis réenvoyé à une adresse B, qui réenvoie à l’adresse A, et ainsi de suite.
Cela peut arriver par exemple avec les aliases d’adresses mal renseignées comme par exemple monNom@monDomaine.com.
Dans ce cas:
_renommez les fichiers .forward, si présents dans le repertoir de l’utilisateur, en .forward_ancien,
_vérifiez les fichier d’hosts.
_ajoutez un alias monNom: monNom@monDomain.com dans le fichier /etc/aliases.
_Ne pas utiliser fetchmail si c’est encore le cas
Le mail forwarding loop peut engendrer des milliers de messages warning, si l’on ne fait pas attention. Première chose urgente à effectuer : stopper postfix! (postfix stop). Une fois le problème résolu, il faut aussi vider le cache des messages en attentes.

Liens :
x.guimard.free.fr/postfix/
jennings.homelinux.net/mails … onfig.html
linux-france.org/article/mai … aco/#N2994

Damsss.

clap clap

Merci Ed. Je suis bien content, Postfix marche du tonnerre. Aucun soucis.
C’est appréciable. :smiley:

pas toujours.
Quoi que depuis, j’ai imaginé de mettre un deuxiême serveur pour le mail sortant, j’ai toujours ce problême .

sinon, pour vider la file d’attente, c’est: postsuper -d ALL

Matt, t’es pas arrivé à résoudre ton probléme avec un transport_maps ? ça permet justement de router des mails sur différents serveurs selon le domaine qui apparaît dans le mail.

Et bravo pour ton article Damsss :wink:

hééééé oui c’est encore moi :slightly_smiling:

Voila j’ai une petite question, je vois que dans le main.cf de Damsss que son relayhost est celui de son FAI, ce qui amène ma question :

Postfix ne peut-il etre son propre smtp ? afin d’avoir un serveur de messagerie independant de son fournisseur?

Si, on peut se passer de smarthost, mais ça pose d’autres pb différents (non purement techniques) insolubles, si ton adresse n’est pas associée à un domaine.
Si tu as une adresse fixe associée à un domaine, tu peux t’abstraire de ton FAI.

Bon alors si j’ai bien compris, si j’ai un nom de domaine (genre tarlak.net)
je peux me passer alors du smtp de mon FAI afin d’envoyer avec mon ptit serveur.

Et si je veux absolument envoyer un mail avec les comptes de mon fournisseur ca ne marchera pas, j’ai bien tout compris msiou dame ?

[quote=“tarlak”]Bon alors si j’ai bien compris, si j’ai un nom de domaine (genre tarlak.net)
je peux me passer alors du smtp de mon FAI afin d’envoyer avec mon ptit serveur.[/quote]oui
Attention: il faut un VRAI domaine (pas un dyndns) ET une adresse ip statique.[quote=“tarlak”]Et si je veux absolument envoyer un mail avec les comptes de mon fournisseur ca ne marchera pas,[/quote]pas de raison qu’ils se mette à te refuser juste parceque tu as déclaré un domaine. normalement. Mais il se peut qu’ils aient inventé une restriction, juste pour que tu doive payer pour la lever.

[quote=“MattOTop”]oui
Attention: il faut un VRAI domaine (pas un dyndns) ET une adresse ip statique.
[/quote]
Pas de soucis c’est le cas :slightly_smiling:

[quote=“MattOTop”]pas de raison qu’ils se mette à te refuser juste parceque tu as déclaré un domaine. normalement. Mais il se peut qu’ils aient inventé une restriction, juste pour que tu doive payer pour la lever.
[/quote]

Pour la restriction je ne sais pas, je suis, sauf erreur de ma part, chez le même fournisseur que Damsss dont je ne mensionnerais pas le nom non plus :slightly_smiling: Toute facon au pire j’install fetchmail qui me recupera les mais des boites de mon fournisseur pour les mettres dans un compte particulier :slightly_smiling:

merci pour ta reponse MattOTop

Ordinateur ouvre moi une session ssh avec le serveur…

Bon ben une autre question m’est venue à mon ti ciboulo, quand est-il des adresses mail composée? en effet d’apres le tuto il faut créer un compte (Linux) pour l’utilisateur, jusque la ca va, et ensuite créer les repertoires, hors si j’ai bien compris l’adresse mail deviendra alors NomUtilisateur@monDomaine

Donc si je veux faire une adresse du genre prenom.nom@monDomaine que ce passe t’il ? sachant que pour l’utilisateur linux je compte utilisé le prenom seulement.

Si j’ai ps été tres clair dite le me le :slightly_smiling:

Il n’y a pas de soucis, tu peux créer une adresse composée, en ajoutant l’alias composé dans les fichiers d’alias de postfix et en rechargeant postfix.

Merciiiiiiiiiiiiiii bon allez cette fois si je m’y met :slightly_smiling:

Bon ben voila je vais faire mon chieur, mais ca marche pas… enfin pas tout.

Le soucis que j’ai c’est qu’il ne lance pas spamd.

En effet j’ai ceci dans les log :

Feb 8 10:14:10 localhost spamc[3406]: connect(AF_INET) to spamd at 127.0.0.1 failed, retrying (#1 of 3): Connection refused Feb 8 10:14:11 localhost spamc[3406]: connect(AF_INET) to spamd at 127.0.0.1 failed, retrying (#2 of 3): Connection refused Feb 8 10:14:12 localhost spamc[3406]: connect(AF_INET) to spamd at 127.0.0.1 failed, retrying (#3 of 3): Connection refused Feb 8 10:14:13 localhost spamc[3406]: connection attempt to spamd aborted after 3 retries

Hors quand je lance dans un terminal spamd et qu’ensuite je fait un

mail adressedestinataire -s sujet …

la ca fonctionne, moi ce que j’avais compris c’est que spamd ce lancait à chaque fois qu’un mail etait envoyer me serais-je trompé?

Petit edit
Autre question surement idiote mais comment fait on pout synchroniser le fichier aliases et aliases.db ?

Non: pour éviter les temps de chargement/déchargement de la base de signatures, spamd est lancé au boot et reste en permanence en mêmoire (en plusieurs exemplaires, même) et attend que tu lui soumette quelquechose à analyser.
Par contre si ce n’est pas spamd qui ne démarre pas, c’est que spamc n’a pas le droit de soumettre à spamd, manifestement.
J’ai eu le même problême, je crois, mais je ne me souviens plus s’il faut changer la config de spamd, pour autoriser l’ecoute sur 127.0.0.1, ou s’il faut ajouter spamc ou un autre id à un groupe…

man -k postfix
man aliases

Merci MattOTop :blush: :wink:

Bon ben chui trop con… un reboot de la machine est c’est bon :slightly_smiling: a priori à l’install spamd ne se lance pas tout seul :slightly_smiling:

Sinon pour ceux qui voudrait avoir des adresses mail du genre :

Et surtout qu’elle s’affiche de cette manière chez votre destinataire

dans le fichier main.cf il faut ajouter les lignes suivantes :

alias_maps = hash:/etc/postfix/aliases
sender_canonical_maps = hash:/etc/postfix/canonical

ensuite on edit le fichier aliases de cette maniere :

on execute la commande postalias comme ceci :

et on oublie surtout pas de relancer postfix

on edit ensuite le fichier canonical qui doit conteni les infos suivante :

un petit :

et enfin on relance postfix

Et voila c’est bon maintenant les destinataire de vos mails verront une adresse qui vous plait :slightly_smiling:

je voudrais savoir si c’est possible de recupérer les mails a partir d’une autre pc , par exemple avec thunderbird (sous win) ??

[quote=“Maitreyoda”]je voudrais savoir si c’est possible de recupérer les mails a partir d’une autre pc , par exemple avec thunderbird (sous win) ??[/quote]oui. Voir page 1 de ce fil.

Merci Damsss

ce tuto est très bien :smiley:

Tres bien expliqué,

En prenant son temps de lire, et relire si on est pas sur d’avoir parfaitement compris à la première lecture, on arrive au but sans trop de difficultées.

Re Merci …

PS:

J’aurai une petit question:

Je essayé d’indiqué au pieds des mails envoyés et reçu par mon serveur postfix (ce même tuto), que ce mail a été vérifier par clamav et qu’il n’a pas détecté de virus. Si c’est le cas, qu’il puisse blouer le message et avertir du danger.

Pour le moment, c’est indiqué uniquement dans l’entête.

Avez-vous une idée svp?

Merci à bientôt