Serveur mail postfix pour utilisateur UNIX – Debian Etch

Ce tuto est extrait du forum Debian-fr.org, il permet de configurer un serveur mail avec postfix, avec pour configuration une boîte mail par utilisateur d’une machine tournant sous Debian. Tous les mails arrivent directement dans le /home de chaque utilisateur.

Merci à Damsss pour ce tuto.

Installer et configurer un serveur de courier

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 courrier sur son propre serveur, à sa propre adresse du type monNom@monDomaine.com. Pour le protocole 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 ).

1. Principe de fonctionnement

Courier-imap fournit le protocole IMAP et sera utilisé pour la réception du courrier. Les messages reçus par courier-imap seront déposés tel quel sur le serveur.
Postfix va regarder ces messages et va les transférer dans le répertoire de courrier 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 correct, il sera acheminé par Postfix, donc, dans le répertoire local de nouveaux courriers de l’utilisateur ; sinon il sera acheminé vers un autre répertoire, 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’envoi 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 courrier, 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 courrier du domaine, soit toujours retrouvable et accessible. 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 courrier.
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 à transférer les courriers 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
De plus on télécharge le programme TrashScan depuis cette adresse : http://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épertoire spécial de courrier, formaté pour le courrier, nommé Maildir, dans lequel doit se trouver les répertoires 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.<domaine du fournisseur>
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
 
* &lt; 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
 
* &lt; 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é à chaque nouveau message 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-<version>, 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@localhost.monDomaine.com et 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 :
http://x.guimard.free.fr/postfix/
http://www.jennings.homelinux.net/mails … onfig.html
http://www.linux-france.org/article/mai … aco/#N2994

Damsss.

Source de ce tuto