+++

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

« La messagerie, c'est cool ! »

*Chacal-puant, grand chef sioux*

<!-- more -->

Bon alors, si tu as bien tout suivi, tu devrais normalement être en mesure d'envoyer des messages cochons à tout un tas de personnes et en recevoir dans ton magnifique répertoire personnel, dans un dossier appelé `Maildir`. Sauf que pour le moment, tu es pas capable d'envoyer des messages depuis n'importe où avec ton serveur et en prime, tu peux consulter tes messages seulement en local avec… `cat`… Tout cela sent quand même pas mal mauvais des aisselles…

Va donc falloir se sortir les doigts du pot de confiture et les reposer sur son petit clavier pour sécurauthentifier (ne cherche pas, c'est un néologisme maison) ton serveur de messagerie. Pour cela, on va faire un peu de SSL, histoire de mettre du chiffrement des familles et qu'aucun mot de passe ne circule en clair, un peu de Dovecot et (encore) un peu de Postfix pour ce qui concerne l'authentification.

# ENVOIE DU SSL GROS !§!!

Je ne vais pas te donner un cours sur OpenSSL ou sur le SSL en général. D'abord, parce que j'ai pas que ça à glander non plus (on est là pour un serveur mail, pas pour faire joujou avec du chiffrement), ensuite parce qu'on trouve plein de gens bien moins simiesques qui expliqueront probablement ça bien mieux. Saches donc que tu auras besoin du certificat racine (CA) de ton autorité préférée, de ta clé privée et de ton certificat. Allez, je suis bon prince, [je te file](http://hausheer.osola.com/docs/9) un [lien ou deux](http://www.tc.umn.edu/~brams006/selfsign.html) pour pas que tu galères comme un porc.

Un config de `dovecot` fonctionnel qui fait du SSL, ça va pas chercher bien loin : 
```
protocols = imap imaps
listen = *,[::]
## SSL settings
ssl_cert_file = /chemin/vers/mon/certificat/server.crt
ssl_key_file = /chemin/vers/ma/cle/privee/server.key

protocol imap {
}
```

Si tu t'attendais à un grand tour de magie avec des lapins, des paillettes et les boobs de l'assistante, ça doit te faire tout drôle : oui, il suffit de pas grand chose pour faire un serveur IMAP parfaitement opérationnel et sécurisé (qui fait du STARTTLS ++ET++ du IMAPS). Tu peux donc configurer Thunderbird et admirer ta boîte de réception :').

aintenant que tu t'es bien échauffé les paluches, on peut continuer la même tambouille avec Postfix :
```
# Référence de chiffrement TLS
smptd_tls_CAfile = /chemin/vers/mon/certificat/racine/root.pem
smtpd_tls_cert_file = /chemin/vers/mon/certificat/server.crt
smtpd_tls_key_file = /chemin/vers/ma/cle/privee/server.key
smtpd_use_tls = yes
smtp_use_tls = yes
smptd_tls_auth_only = yes
```

Comme pour `dovecot`, on indique le chemin des certificats et on précise qu'on souhaite l'utiliser pour le SMTP en mode client, donc d'un serveur à un client, ou d'un serveur à un autre serveur. Par ailleurs, on autorisera l'authentification que s'il y a chiffrement.

# Nom, prénom, matricule…

Dovecot authentifie correctement et en chiffré. Reste que les utilisateurs légitimes ne peuvent toujours pas envoyer de messages depuis l'extérieur de ton réseau. On va donc bricoler un petit truc entre Dovecot et Postfix pour aider un peu. Première étape, créer une socket d'identification au niveau de `dovecot` :
```
auth default {
  mechanisms = plain
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }
  }
}
```

Tu peux arrêter de m'applaudir… Non, je ne fais pas de la magie, je fais simplement bien mon boulot… Et je remets le couvert avec Postfix :
```
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_recipient_restrictions =
  permit_sasl_authenticated,
  permit_mynetworks,
  reject_unauth_destination
```

En fait, on indique simplement le type et le chemin de la socket puis on complète les autorisations (dernière ligne), pour préciser qu'on accepte les messages authentifiés.

Il y a franchement pas de quoi faire sauter une braguette, mais avec le peu que tu as tapoté sur ton petit clavier avec tes petits doigts musclés, tu as un serveur parfaitement opérationnel : envoi et réception de messages, authentifiés, sécurisés et à distance. La semaine prochaine, on se protègera des vendeurs de Viagra et du Roi du Sénégal.
