<p class="spip">Postfix est un serveur de courriel libre.</p>

<p class="spip">Je pars du principe que postfix est correctement installé et fonctionnel. Si votre distribution vous pose des questions lors de l’installation, répondez ce que vous voulez, nous reprendrons la configuration depuis le début.</p>

<p class="spip">Dans la suite de l’article, nous n’utiliseront que les composants propre à postfix. Des outils extérieurs pourraient pourtant être bien utile.</p>

<p class="spip">Penser à faire une sauvegarde des fichiers de configuration avant toute modification.</p>

<p class="spip">A partir de maintenant, je considère que mon domaine se nomme gnunux.priv, que ma machine s’appelle ibook et que j’ai un utilisateur local gnunux.</p>

<h2>Première envoi et réception de courriel</h2>
<h3>Fichier de configuration de base de postfix</h3>
<p class="spip">Le fichier de configuration principal de postfix est <i class="spip">/etc/postfix/main.cf</i> (le chemin peut varier suivant l’installation).</p>

<p class="spip">Les options suivantes sont toutes les options nécessaires à son bon fonctionnement. Il faut donc commencé par vider le fichier de configuration.</p>

<pre># > /etc/postfix/main.cf</pre>
<p class="spip">Il faut commencer par indiquer le nom de domaine de la machine. C’est le nom avec lequel postfix se présentera sur les serveurs relais :</p>

<pre>myhostname = ibook.gnunux.priv</pre>
<p class="spip">Le nom de domaine par défaut :</p>

<pre>mydomain = gnunux.priv</pre>
<p class="spip">Le nom de domaine de courrier sortant par défaut. Si dans votre outil de courriel vous mettez ,par exemple, "<i class="spip">gnunux</i>", il le transformera en "<i class="spip">gnunux@gnunux.priv</i>"</p>

<pre>myorigin = $mydomain</pre>
<p class="spip">Les courriels à destination de ces domaines seront conservés en local :</p>

<pre>mydestination = $myhostname, localhost, $mydomain</pre>
<p class="spip">Le relais est autorisé depuis les IP suivantes (ici seulement le poste local) :</p>

<pre>mynetworks = 127.0.0.0/8</pre>
<p class="spip">Le chemin des commandes, n’est pas obligatoire pour certaine distribution :</p>

<pre>command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
queue_directory = /var/spool/postfix</pre>
<p class="spip">Postfix utilise cet utilisateur, ce n’est pas obligatoire sur certaine distribution :</p>

<pre>mail_owner = postfix</pre>
<p class="spip">Attention, "<i class="spip">/etc/aliases.db</i>" doit exister. Pour cela, faire :</p>

<pre># touch /etc/aliases
# postalias /etc/aliases</pre>
<h3>Premier test</h3>
<p class="spip">Dans une console, envoyer un message :</p>

<pre># mail gnunux@gnunux.priv
Subject : Test
Je mets tout ce que je veux et je fini mon message par un "." seul sur une ligne
.
EOT
#</pre>
<p class="spip">Pour savoir où arrive notre courriel, nous allons utiliser <i class="spip">postconf</i>. Cette commande liste toutes les options prise en compte par postfix. Nous auront celles vues au dessus auquelle il faut ajouter toutes les options par défaut. Il nous faut récuperer l’option "<i class="spip">mail_spool_directory</i>".</p>

<pre># postconf -d|grep "mail_spool_directory"
mail_spool_directory = /var/mail
#</pre>
<p class="spip">Si nous allons dans le répertoire <i class="spip">/var/mail</i> nous verrons le fichier "<i class="spip">gnunux</i>" contenant notre courriel.</p>

<h2>Rediriger les courriels</h2>
<p class="spip">Les courriels sont acheminés vers le serveur MX du domaine. Par exemple :</p>

<pre># dig gnunux.info MX
[...]
gnunux.info.            3600    IN      MX      20 mail.gnunux.info.
[...]</pre>
<p class="spip">Postfix enverra donc le courriel à <i class="spip">mail.gnunux.info</i>. Si aucun serveur MX n’est trouvé, le courriel sera envoyé à l’adresse IP du serveur <i class="spip">gnunux.info</i>.</p>

<p class="spip">Il peut être pourtant intéressant de modifier le serveur de destination.</p>

<p class="spip">Attention, je ne parle pas de la possibilité de renvoyer TOUS les courriels vers une passerelle (en utilisant <i class="spip">relayhost = adresse_ip</i>).</p>

<p class="spip">Pour cela, il faut rajouter les lignes suivantes au fichier de base :</p>

<pre>transport_maps = hash :/etc/postfix/transport</pre>
<p class="spip">Le fichier <i class="spip">/etc/postfix/transport</i> est un fichier de type <i class="spip">hash</i>. Postfix est capable de lire plusieurs type de donnée. Pour les connaître, il suffit de faire :</p>

<pre># postconf -m
[...]
hash
#</pre>
<p class="spip">Voici le contenu du fichier "<i class="spip">/etc/postfix/transport</i>". Les courriels envoyés à <i class="spip">yogi.priv</i> seront redirigés vers le serveur smtp <i class="spip">192.168.1.15</i> :</p>

<pre>yogi.priv       smtp :[192.168.1.15]:25</pre>
<p class="spip">Il faut créer maintenant le fichier hash. Pour cela, il faut faire :</p>

<pre># postmap /etc/postfix/transport</pre>
<p class="spip">Un fichier <i class="spip">/etc/postfix/transport.db</i> sera alors créé.</p>

<h2>Réécriture d’adresse</h2>
<p class="spip">Il est possible de réécrire des adresses courriels :</p>

<pre># canonical_maps = hash :/etc/postfix/canonical</pre>
<p class="spip">Dans le fichier <i class="spip">/etc/postfix/canonical</i> :</p>

<pre>gnu     gnunux</pre>
<p class="spip">(ne pas oublier postmap)</p>

<p class="spip">Toutes les adresses courriels, en entrée comme en sortie, envoyé à ou prevenant de <i class="spip">gnu</i> seront réécrient en tant que <i class="spip">gnunux</i>.</p>

<p class="spip">Il est possible de différencier l’envoi et la réception :</p>

<pre>sender_canonical_maps = hash :/etc/postfix/sender_canonical
recipient_canonical_maps = hash :/etc/postfix/recipient_canonical</pre>
<h2>Cacher les serveurs locaux d’envoi</h2>
<p class="spip">Modifions le serveur d’origine :</p>

<pre>myorigin = $myhostname</pre>
<p class="spip">Le serveur envoi maintenant les courriels en tant que <i class="spip">gnunux@ibook.gnunux.priv</i>.</p>

<p class="spip">Pour cacher les sous-domaines (seulement pour le relayage, pas en local) :</p>

<pre>masquerade_domains = !yogi.gnunux.priv gnunux.priv</pre>
<p class="spip">Ici, tous les courriels qui transitent par ce serveur supprimeront les <i class="spip">....gnunux.priv</i>, sauf pour <i class="spip">yogi.gnunux.priv</i> (puisque précédé d’un "<i class="spip"> !</i>").</p>

<p class="spip">Il peut être intéressant d’exclure un utilisateur. Par exemple, tous les courriels de maintenance envoyé par <i class="spip">root</i> auront le même expéditeur : <i class="spip">gnunux.priv</i>. Il peut être intéressant de conserver les différenciations et donc connaître les serveurs de provenance :</p>

<pre>masquerade_exceptions = root</pre>
<h2>Prévenir du changement d’adresse courriel</h2>
<p class="spip">Prenons un exemple, si j’envoi une courriel à <i class="spip">rah@ibook.gnunux.priv</i>, nous voyons dans les journaux (<i class="spip">/var/log/mail.log</i>) :</p>

<pre><rah@ibook.gnunux.priv> : Recipient address rejected : 
     User unknown in local recipient table (in reply to RCPT TO
     command)</pre>
<p class="spip">Si nous rajoutons :</p>

<pre>relocated_maps = hash :/etc/postfix/relocated</pre>
<p class="spip">Dans <i class="spip">/etc/postfix/relocated</i>, nous mettons :</p>

<pre>rah@ibook.gnunux.priv   rah@gnunux.info</pre>
<p class="spip">(ne pas oublier postmap)</p>

<p class="spip">Nous avons maintenant :</p>

<pre><rah@ibook.gnunux.priv> : Recipient address rejected :
     User has moved to rah@gnunux.info</pre>
<h2>Liste noir</h2>
<p class="spip">Voici comment faire une liste noir :</p>

<pre>smtpd_sender_restrictions = check_sender_access hash :/etc/postfix/sender_checks</pre>
<p class="spip">Et dans le fichier <i class="spip">/etc/postfix/sender_checks</i> :</p>

<pre>root@yogi.priv   554 I don’t need your viagra !</pre>
<p class="spip">(ne pas oublier postmap)</p>

<p class="spip">Les courriels envoyés depuis <i class="spip">root@yogi.priv</i> seront refusés avec comme message "<i class="spip">I don’t need your viagra !</i>".</p>

<p class="spip">L’option <i class="spip">check_sender_access</i> permet de vérifier l’envoyeur et l’option <i class="spip">smtpd_sender_restrictions</i> permet de restreindre les utilisateurs.</p>

<h2>Duplication des flux</h2>
<p class="spip">BCC (blind carbon-copy), permet de rajouter un destinataire caché. Avec des expressions régulières nous allons pouvoir rajouter un destinataire.</p>

<p class="spip">Le but étant de faire une duplication du courriel pour un serveur de test, voire une serveur de sauvegarde de courriel.</p>

<p class="spip">Pour modifier le table bcc, nous allons utiliser :</p>

<pre>recipient_bcc_maps = regexp :/etc/postfix/recipient_bcc</pre>
<p class="spip">Dans le fichier <i class="spip">/etc/postfix/recipient_bcc</i> :</p>

<pre>/^((.*)@ibook\.gnunux\.priv)$/ $2@yogi.gnunux.priv</pre>
<p class="spip">Attention, il ne faut pas faire <i class="spip">postmap</i> puisque c’est un fichier d’expression régulière et non un fichier hash.</p>

<h2>Maintenance de postfix</h2>
<p class="spip">Voir la queue de postfix :</p>

<pre>postqueue -p</pre>
<p class="spip">La queue est la liste des courriels en attente.</p>

<p class="spip">Vider la queue :</p>

<pre>postqueue -f</pre>
<p class="spip">Supprimer un courriel dans la queue :</p>

<pre>postsuper -d ID</pre>
<p class="spip">(l’ID est donné par la commande <i class="spip">postqueue -p</i>)</p>

<p class="spip">Voir les statistiques de la queue :</p>

<pre>qshape incoming active deferred</pre>
<p class="spip">Les journaux d’activité sont <i class="spip">/var/log/mail.*</i>.</p>