+++

title = "Mais non, c'est pas difficile de faire son propre serveur mail (2)"
date = 2010-08-20
aliases = [ "post/2010/08/11/Mais-non,-c-est-pas-difficile-de-faire-son-propre-serveur-mail-(2)"]
[taxonomies]
tags = [ "mail", "système", "linux", "auto-hébergement" ]
+++

Avec Postfix, je suis détendu du mail…

<!-- more -->

aintenant que le DNS de `buttse.cx` est correctement réglé, on va mobiliser quelques neurones pour paramétrer Postfix de sorte à ce que ça ressemble vaguement à quelque chose. Mais d'abord, késsekessé Postfix et à quoi ça va bien pouvoir nous servir ?

# I HAZ A MAIL SERVER

Comme tu t'en doutes probablement déjà, Postfix n'est pas un presse-purée informatique un peu sofistiqué. C'est ce qu'on appelle un [Mail Transfer Agent](http://fr.wikipedia.org/wiki/Mail_Transfer_Agent) ou MTA. Ça permet donc d'envoyer des messages vers l'Interwebz et d'en recevoir sur les adresses MX que l'on a configuré. Si j'étais pas une grosse faignasse, il aurait fallu également s'intéresser à un [Mail Delivery Agent](http://fr.wikipedia.org/wiki/Mail_Delivery_Agent) ou MDA pour livrer les messages. Seulement comme on va faire une configuration de Postfix assez simple, il sera capable de faire office de MDA, tout seul comme un grand.

On va donc faire un vulgaire « je balance les messages aux utilisateurs locaux sans trop réfléchir », simple, bête et méchant.

# Bien joué les Smarties

Une conf de base qui tourne et qui est capable de faire MTA/MDA, ça va pas chercher bien loin. Attention, démonstration :

```
inet_protocols = all
inet_interfaces = all
mynetworks = 1.2.3.4, 127.0.0.0/8, [2001:dead:beef::]/64, [::1]/128
myhostname = lakeketteajeanmi.buttse.cx
myorigin = buttse.cx
mydestination = $myhostname,localhost.$mydomain,localhost,buttse.cx

mail_owner = postfix
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
```

Tout de suite, tu sens la puissance du merdier : en genre 10 lignes, tu es capable d'envoyer des messages depuis `mynetworks`, d'accepter les messages à destination de `mydestination` et de les livrer, au format `Maildir`, dans le répertoire personnel de l'utilisateur de la machine.

Pour les quelques raffinements supplémentaires, il s'agit essentiellement d'être capable d'écouter sur toutes les interfaces en IPv4/6 (`inet_protocols` et `inet_interfaces`) et de préciser le domaine de messagerie des utilisateurs locaux pour les messages sortants via `myorigin`. Bien sûr, rien ne t'empêche de bricoler un peu les rézo pour adapter à ton cas (par exemple autoriser directement ton réseau LAN).

Bon, je sais que c'est dur parce que tu viens de faire un gros effort intellectuel, mais il va quand même falloir se remuer les doigts de pied, pour démarrer Postfix et faire un ou deux petits essais :
```
$ echo "test" | mail -s "Come suck my…" zuckerberg@facebook.com
$ echo "un autre test" | mail -s "TA MÈRE LOL" root@buttse.cx
```

Il suffit de vérifier le log des messages (`/var/log/maillog` ou `/var/log/mail.log`) pour savoir si ça a marché ou pas. Alors, si ton fournisseur de Minitel 2.0 bloque le port 25 ou que ton adresse est blacklisté/greylisté (je ne te cache pas que c'est plus que probable), ça passera probablement pas. Le message sera considéré comme du spam ou rejeté. La seule solution dans ce cas, c'est de passer par le serveur SMTP de ton fournisseur d'accès pour tous les messages sortants. On s'accroche parce que c'est super compliqué :
```
relayhost = [smtp.monfaiquipue.com]:25
```

Pfiou… Va te falloir au moins deux ou trois jours pour récupérer après un machin pareil ! En ajoutant cette simple ligne, ton serveur de mail passera par ton fournisseur d'accès pour l'envoi au lieu d'envoyer lui-même. Ça induit un temps de latence supplémentaire et quelques autres désagréments, mais c'est malheureusement (trop) souvent la seule solution…

Bon, j'ai l'impression que tu es tout rouge et tout moite, j'ai pas envie que tu te fasses un claquage de cerveau, on verra donc la partie authentification et accès à distance la semaine prochaine.
