Les installations et tests se feront sur une machine Ubuntu server ou desktop, en 64 bits (mais cela marche également pour du 32 bits), testé sur du 8.04 LTS et du 10.04.
L'adresse IP du serveur est 192.168.168.1. Nous allons créer un domaine de test : testmessagerie.fr, nommer notre serveur messagerie.testmessagerie.fr, et le définir comme MX primaire pour ce domaine. Pour ce faire, je vous laisse regarder le configuration de bind expliquée dans d'autres billets. Il faudra ensuite définir ce serveur dns sur notre serveur et sur les postes servant à faire des tests d'envoi.

Etape 1 : installation des paquets nécessaires

Il suffit de lancer la commande :

sudo apt-get install postfix postfix-pgsql amavisd-new dovecot dovecot-pop3d dovecot-imapd clamav postgres postgresql pgadmin3 spamassassin

Quelques explications sur les paquets :

  • postfix : sert à recevoir et envoyer les mails
  • postfix-pgsql : permet de lier postfix à une base de données Postgres
  • amavisd-new : le lien entre postfix et les anti virus/anti spam
  • dovecot (et impad et pop3d) : le serveur qui permet de stocker les mails et de les consulter en pop3 ou imap
  • clamav : un anti virus
  • postgres : la base de données
  • pgadmin3 : un outil graphique pour gérer les bases de données postgres
  • spamassassin : un anti spam

Lors de l'installation de Postfix, plusieurs questions vous seront posées. Dans la plupart des cas, il faut laisser les valeurs par défaut. Les seules questions importantes sont : - Configuration type du serveur de messagerie, choisir "Site internet" Capture-steph_steph-laptop___.png - Nom de courrier : mettre le nom de la machine (ici messagerie.testmessagerie.fr) Capture-steph_steph-laptop___-1.png

Pour éviter tout conflit, il est fortement conseillée de désinstaller sendmail

sudo apt-get remove sendmail

Etape 2 : configuration de postgres

Il faut tout d'abord créer un utilisateur pour postgres. Pour faire simple, nous allons créer un utilisateur postfix avec le mot de passe postfix (oui, je sais, c'est mal, mais nous sommes là avant tout pour faire marcher tout ça, la sécurisation viendra par la suite).
Pour cela, deux méthodes sont possibles : soit via une interface graphique (ça tombe bien, nous venons juste d'installer pgadmin3...), soit à l'ancienne, en ligne de commande.

sudo -s
su - postgres
psql
create role postfix with login password 'postfix';
\q
exit
exit

Il faut ensuite créer les bases de données type. Pour cela, on ne va pas tout faire à la main. On va utiliser le fichier postfix.sql en annexe à ce billet.

sudo -s
su - postgres
createdb postfix
wget http://blog.sdewitte.net/public/postfix.sql
psql postfix < postfix.sql
\q
exit
exit

Etape 3 : création de l'utilisateur Linux, et de l'arborescence des données.

Afin de gérer les fichiers, nous allons utiliser un utilisateur Linux dédié (appelé messagerie) et nous allons poser les fichiers dans un répertoire dédié (/var/spool/virtual)
Par habitude, je fixe le uid et gid de cet utilisateur à une valeur très élevée

sudo addgroup messagerie --gid 60000
sudo adduser messagerie --uid 60000 --gid 60000

(et laisser vous guider)

sudo mkdir /var/spool/virtual
sudo chown messagerie:messagerie /var/spool/virtual

Etape 4 : configuration de la base de données.

A ce niveau-là, la base de données est créée mais vide. Vous pouvez voir avec pgadmin3 les différentes tables qui sont créées. Toutes ne nous intéressent pas, certaines sont pour des options qui seront détaillées plus loin.

La table domain

Comme son nom l'indique, c'est elle qui va gérer les domaines pour lesquels on veut gérer les mails
Voici les champs importants (les autres sont non utilisés pour le moment)

  • domain_name : le nom du domaine que l'on veut gérer (dans notre exemple : testmessagerie.fr). On va mettre ici une ligne par domaine que l'on veut traiter.
  • mailbox_path : le répertoire sur la machine dans lequel vont être stockés les mails. En général, on met un répertoire par domaine. Dans notre exemple, ce sera /var/spool/virtual/testmessagerie.fr
  • valide : mettre à true pour un domaine actif.

La table popbox

C'est la table qui contient les comptes des utilisateurs. Comme pour la table précédente, tous les champs ne sont pas importants.

  • domain_name : le nom de domaine (testmessagerie.fr)
  • local_part : le nom de l'utilisateur (par exemple : jdupont)
  • password : le mot de passe en md5
  • mbox_name : le nom du répertoire (sous répertoire du champ mailbox_path de la tale domainassociée) dans lequel seront stockés les mails de l'utilisateur. Par défaut, il est égal à local_part
  • name : mettre la même valeur que local_part
  • valid : mettre à true pour une boite valide
  • date_start : date de début de validité de la boite (laisser à blanc si pas de date de début de validité)
  • date_end : date de fin de validité de la boite (laisser à blanc si pas de date de fin de validité)
  • passwd_clair : le mot de passe en clair de la boite. Si il est changé ici, un trigger change immédiatement le champ password en md5.

Dans nos exemples, la base est paramétrée pour une boîte [email protected]

La table virtual

Il s'agit de la table des alias.

  • adresse : ce sera le nom de l'alias (par exemple [email protected])
  • vers : l'adresse de destination (dans notre cas, cela peut être la popbox créée précédemment [email protected]__, ou bien une autre adresse de messagerie externe, ou encore une liste de diffusion, c'est à dire des adresses séparées par une virgule)
  • valide : mettre à true pour un alias valide
  • date_start : date de début de validité de l'alias (laisser à blanc si pas de date de début de validité)
  • date_fin : date de début de validité de l'alias (laisser à blanc si pas de date de fin de validité)

A ce niveau, nous avons donc deux adresses prêtes : [email protected] et [email protected]

La suite des opérations dans le prochain billet