Le Raspberry Pi pour auto héberger son serveur d’email


Achtung : Dieser Artikel wurde automatisch von Google Translate übersetzt


Notre série de tutoriels continue avec une nouvelle étape dans notre indépendance : notre propre serveur d’email hébergé à la maison.

Raspberry Pi Home Server : auto héberger son serveur d'email

Alors je dois reconnaitre que le tutoriel qui va suivre n’a rien à voir avec celui prévu. Je voulais installer et configurer Citadel qui est un peu le couteau suisse du serveur mail. Malheureusement, une fois installé la configuration s’avère galère (pour moi) et pas beaucoup d’aide sur Internet. Ca sera donc pour plus tard.

Bref j’en suis revenu aux origines, avec un bon vieux serveur postfix !

  1. Le grand classique de mise à jour du Raspberry
    apt-get update && apt-get upgrade -y
  2. Autres petites choses qui ont leur importance : les ouvertures de port. Assurez vous que depuis l’extérieur, les ports TCP 25, 143, 993, 110 et 995 sont bien accessibles. Ici je ne vais pas vous aider car ça va dépendre de votre box ou de la configuration de votre FAI.
  3. Pour aller plus loin il vous faut un nom de domaine. Je vous conseille de passer par noip.com avec le tutoriel ici. Ca vous permet d’avoir un nom de domaine et une ip « fixe » grâce au client qui sera installé sur votre machine.
  4. Dans l’interface de configuration de noip pour votre domaine, allez tout en bas dans la zone MX et y ajoutez la valeur <nom de votre domaine>. Ca permet de rediriger les requêtes concernant la gestion des emails vers votre machine.
  5. Installer le package bind9-host
     apt-get install bind9-host
  6. Tester que la redirection va bien fonctionner
     host -t MX <nom de votre domaine>
    
     <nom de votre domaine> mail is handled by 10 <nom de votre domaine>.

    Ca c’est une bonne nouvelle. Sans ça, aucune chance de faire fonctionner notre serveur.

  7. Changer le fichier /etc/hosts
    127.0.0.1      <nom de votre domaine>
  8. Changer le fichier/etc/hostname
    <nom de votre domaine>
  9. Redémarrer le Raspberry Pi
    reboot
  10. Installer postfix
    apt-get install postfix

    Lors de l’installation vous choissez « Internet Site » dans l’écran de configuration. Puis votre nom de domaine.

  11. Pour faire nos tests, il faut
    1. Les outils de mail en ligne de commande qui sont déjà installés. Au cas où :
      apt-get install mailutils
    2. Un utilisateur de test. Chez moi j’ai root pour les installations et un utilisateur pi pour les tests. Si besoin vous pouvez en créer un autre.adduser pi
  12. Vous pouvez à partir de l’utilisateur root, envoyer un mail à l’utilisateur pi
    echo "Je parle bla bla bla" | mail -s "Sujet du mail : bla bla" pi@<votre domaine>.no-ip.org

    Vous aurez le résultat en vous connectant au raspberry avec l’utilisateur pi (un seul message chez vous !) :

    Raspberry Pi Home Server : auto héberger son serveur d'email

    La commande pour visualiser les emails reçus

  13. Pour la réception, nous allons installer la gestion POP3 et IMAP
    apt-get install dovecot-pop3d dovecot-imapd

    Grâce à eux vous pouvez désormais lire (on verra après pour l’envoi) les mails qui sont reçus sur le Raspberry Pi. La configuration automatique de Thunderbird doit vous donner quelque chose comme ça :

    Raspberry Pi Home Server : auto héberger son serveur d'email

    La configuration automatique de Thunderbird doit détecter l’IMAP, le POP3 et le SMTP grâce à votre email

    Par contre, coté sécurité, ça peut râler. Chez moi le certificat avait été généré avec l’ancien nom de la machine et non pas avec le domaine créé sous noip.

    Raspberry Pi Home Server : auto héberger son serveur d'email

    Notre mail vu dans Thunderbird

Recevoir c’est fait. Prochaine étape, envoyer ! Pour cela, il faut que notre service SMTP soit accessible et qu’il puisse envoyer sur Internet. Nous avons 4 possibilités :

  1. Utiliser le SMTP de Postfix. Seul hic, il risque d’être bloqué par les différents services de mail (Yahoo, Hotmail par exemple) qui pourraient le considérer comme un spammeur car il n’est pas « connu ».
  2. Utiliser le SMTP de Postfix mais avec des exceptions pour certaines adresses mails afin que vos mails ne partent pas en spams.
  3. Utiliser le SMTP de votre FAI (ou ISP pour nos amis anglophones). Si vous changer de fournisseur, il vous faudra mettre à jour votre configuration
  4. Utiliser un SMTP tiers comme par exemple celui de gmail si vous y avez un compte.

La solution la plus simple : le SMTP de votre fournisseur.

  1. Modifier le fichier de configuration de Postfix /etc/postfix/main.cf et y modifier la ligne
    relayhost =

    avec

    relayhost = <nom du SMTP>

    Par exemple pour free c’est smtp.free.fr, Orange smtp.orange.fr, etc. Vous trouverez une liste complète (j’espère à jour) ici pour les services français.

  2. Recharger la configuration du service
    service postfix reload
  3. Reste à tester

    Raspberry Pi Home Server : auto héberger son serveur d'emailEt sur le serveur :

    Raspberry Pi Home Server : auto héberger son serveur d'email

    Le mail envoyé depuis Thunderbird vu sur le serveur d’email auto hébergé

Voilà. Si vous voulez une boite email « privée » (envois uniquement à des destinataires de votre domaine) sans intermédiaire, vous avez trouvé je l’espère votre bonheur.

Là où les choses peuvent se compliquer c’est si vous voulez envoyer des emails à des personnes en dehors de votre domaine (gmail, yahoo ou autre). Si vous ne mettez pas d’authentification sur votre serveur SMTP vous serez considéré comme un relai ouvert qui sera une proie rêvée pour les spammeurs qui vous utiliseront pour inonder nos boites. Vous serez alors repéré et blacklisté. Pas trop le but voulu je pense.

Par défaut, Postfix s’installe avec une couche TLS pour crypter les échanges et donc aussi les mots de passe. De ce coté rien à faire donc, voici ce que vous devez avoir :

# TLS parameters

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

smtpd_use_tls=yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_tls_auth_only = yes

J’ai ajouté la ligne rouge pour s’assurer que l’authentification ne peut pas se faire sans passer par la couche TLS. Chaque client devra donc être configuré pour l’utiliser.

Nous allons ensuite mettre en place la fameuse authentification SASL. Pas besoin d’un serveur supplémentaire, Dovecot que nous avons installé pour la gestion POP3 et IMAP peut le faire donc nous n’allons pas surcharger la machine !

  1. Editer le fichier /etc/dovecot/dovecot.conf et y ajouter en fin de fichier :
    auth default {
    
     socket listen {
    
     client {
    
     path = /var/spool/postfix/private/auth
    
     group = postfix
    
     mode = 0660
    
     }
    
    }

    Nous avons maintenant le lien entre Dovecot et Postfix. Reste à le donner aussi à Postfix

  2. Modifier le fichier /etc/postfix/postfix.cf et y ajouter les lignes suivantes (pour plus de détail sur les lignes ajoutées, vous pouvez regarder ici) :
    smtpd_sasl_auth_enable = yes
    
    smtpd_sasl_type = dovecot
    
    smtpd_sasl_path = private/auth
    
    smtpd_sasl_authenticated_header = yes
    
    smtpd_client_restrictions =
    
     permit_mynetworks, permit_sasl_authenticated,
    
     sleep 1, reject_unauth_pipelining
    
    smtpd_helo_restrictions = reject_invalid_helo_hostname
    
    smtpd_sender_restrictions =
    
     reject_unlisted_sender, reject_unknown_sender_domain,
    
     permit_mynetworks, permit_sasl_authenticated,
    
     reject_non_fqdn_sender
    
    smtpd_recipient_restrictions =
    
     reject_unlisted_recipient, reject_unknown_recipient_domain,
    
     permit_mynetworks, permit_sasl_authenticated,
    
     reject_non_fqdn_recipient,
    
     reject_unauth_destination
  3. Reste à redémarrer Dovecot et Postfix
    service dovecot restart
    
    service postfix restart
  4. Vous devriez maintenant pouvoir envoyer où vous voulez et à qui vous voulez.

Au cas où voici mes configurations Thunderbird et Postfix

Raspberry Pi Home Server : auto héberger son serveur d'email

Configuration de Postfix

Raspberry Pi Home Server : auto héberger son serveur d'email

Configuration de réception IMAP sous Thunderbird

Raspberry Pi Home Server : auto héberger son serveur d'email

Configuration SMTP sous Thunderbird

Je ne suis pas le grand spécialiste Postfix alors n’hésitez pas à partager vos remarques ou expériences dans les commentaires.

Sources : Google, raspberrypi.org, Alsacreations, State-of-mind.de et surtout isalo.org qui a un super article sur le sujet

Vous aimerez aussi...

  • WF

    Salut,

    j’ai installé Postfix + Dovecot chez moi, ça tourne bien.

    Je me sers du SMTP de Postfix, avec authentification (tout en SSL), pas de soucis pour le moment.

    J’ai installé Roundcube, c’est un peu lourd mais ça passe.

    Avec la bonne config sur la box, RAS depuis 2 semaines.

    Par contre je conseille d’avoir un 2eme serveur pour la réplication, et pour prendre le relai en cas de coupure sur le 1er…

    • As tu essayé SquirrelMail ? Ca a l’air plus léger mais avec un look de la fin des année 90 …

      • WF

        Non, point de vu look/fonctionnalités, le meilleur me semble Roundcube.

        De mon côté, c’est un usage très temporaire, dans le cas où je n’aurais pas mon matériel (téléphone, PC, etc…) à proximité… c’est à dire pas très souvent!

  • Tef

    Bonjour,

    j’ai des erreurs qui parlent de l’IPv6 à l’installation de postfix et quand j’essai d’envoyer un mail de test (étape 12).

    D’où ça vient ?

    send-mail: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol

    postdrop: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol

    • Salut,
      dans le fichier /etc/postfix/main.cf, tu n’as que la valeur 127.0.0.1 sur la ligne mynetworks ? Par défaut il y a peut être une adresse de type IPv6 et le noyau du Rapsberry ne prend pas en charge le protocole par défaut.
      Si tu veux le support IPv6, tu fais modprobe ipv6 et pour la prise en charge au prochain reboot tu ajoutes ipv6 au fichier /etc/modules

      • Tef

        Salut,

        Merci pour l’IPv6, c’est bon.

        sinon, dans main.cf j’ai ça :

        mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

        donc j’imagine qu’il faut modifier la ligne comme ceci :

        mynetworks = 127.0.0.1

        bref, j’ai essayé avec les deux mais mon utilisateur de test ne reçoit rien…

        en vérifiant la boîte de root, j’ai ça :

        U 2 Mail Delivery Syst Mon May 6 16:38 72/2367 Undelivered Mail Returned to Sender

  • Tef

    En fait, voilà ce qu’il me dit exactement :

    The mail system

    : mail for mondomaine.com loops back to myself

    apparemment il refuse les boucle ?

  • Tef

    C’est bon tout roule.

    j’ai du reprendre le tuto de zéro (en désinstallant bind9-host, postfix et mailutils).

    Merci pour ces excellents tutoriels qui sauvent la vie de nombreux propriétaires de framboises 😉

    ps: ce tuto est exactement ce que je cherchais quand je demandais comment envoyer des mails depuis mon site hébergé sur mon pi. Merci infiniment (encore)

    • Merci pour ces compliments et ravi que ça aide.
      N’hésite pas si tu as d’autres besoins en tutos, je cherche des idées 😉

  • Jérémy

    Au secours… J’ai essayé de suivre ce tuto : http://www.howtoforge.com/perfect-server-debian-wheezy-apache2-bind-dovecot-ispconfig-3-p3

    Tout marchait bien (sauf la réception de mail), mais soudain, je n’ai plus réussi à avoir accès à Squirrel Mail ; j’ai ce message d’erreur = « ERREUR : Connexion interrompue par le serveur IMAP. »

    Quelqu’un pourrait-il me venir en aide ?

    Merci !

  • Sibra Philippe

    Très bon sujet.

    Mais je ne suis pas arrivé jusqu’au bout.

    J’ai un message d’erreur après la modification du fichier /etc/dovecot/dovecot.conf avec auth default ……..

    Error in configuration file /etc/dovecot/dovecot.conf line 100: Expecting ‘=’

    J’ai tout essayé, mais là je bloque..

    Merci par avance pour l’aide

    Philippe

    • Salut,
      Peux tu donner le contenu de la ligne 100 qui est celle qui pose problème ?
      Merci

  • Sibra Philippe

    La ligne 100 :

    auth default {

    J’ai creusé un peu et je crois que c’est parce-que je suis en version 2 de dovecot.

    • Exactement : http://wiki2.dovecot.org/BasicConfiguration
      Il faut que je revois ça pour corriger le tutoriel

      • bob

        Peut être en le modifiant comme ça ? :
        service auth {
        unix_listener /var/spool/postfix/private/auth {
        group = postfix
        mode = 0660
        user = postfix
        }
        }

  • olivier

    C’est surtout que tu as oublié de refermer ta parenthese dans l’exemple …

  • olivier

    (sur le site original aussi ! erf !)

    Sinon les parametres TLS tous les incrementes dans quel fichier ? j’ai vu un truc qui y ressemble dans master.cf mais pas avec la meme syntaxe.

    Merci pour tes reponses

  • Sibra Philippe

    Bonjour,

    Je n’ai bien sur pas oublier la dernière parenthèse. Je vérifie toujours ce genre d’erreur avant d’envoyer un commentaire.

    Pour les paramètres TLS il faut les mettre dans le fichier /etc/postfix/main.cf

    Merci

  • Sibra Philippe

    Salut,

    Je pense avoir trouver les modifications que l’on doit appliquer avec dovecot v2.

    J’ai modifier la dernière partie la configuration de postfix et de dovecot comme ceci:

    Pour postfix ajouter à la fin du fichier /etc/postfix/main.cf:

    smtpd_sasl_type = dovecot

    # Can be an absolute path, or relative to $queue_directory

    # Debian/Ubuntu users: Postfix is setup by default to run chrooted, so it is best to leave it as-is below

    smtpd_sasl_path = private/auth

    # and the common settings to enable SASL:

    smtpd_sasl_auth_enable = yes

    smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

    Encore pour postfix ajouter à la fin du fichier /etc/postfix/master.cf:

    submission inet n – – – – smtpd

    -o smtpd_tls_security_level=encrypt

    -o smtpd_sasl_auth_enable=yes

    -o smtpd_sasl_type=dovecot

    -o smtpd_sasl_path=private/auth

    -o smtpd_sasl_security_options=noanonymous

    -o smtpd_sasl_local_domain=$myhostname

    -o smtpd_client_restrictions=permit_sasl_authenticated,reject

    -o smtpd_sender_login_maps=hash:/etc/postfix/virtual

    -o smtpd_sender_restrictions=reject_sender_login_mismatch

    -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

    Pour dovecot dans le fichier /etc/dovecot/conf.d/10-master.conf modifier la partie

    # Postfix smtp-auth comme ceci :

    # Postfix smtp-auth

    unix_listener /var/spool/postfix/private/auth {

    mode = 0666

    user = postfix

    group = postfix

    }

    Ne pas oublier de redémarrer les services postfix et dovecot.

    Merci d’avance pour les corrections éventuelles.

    Philippe

  • Bonjour,

    Comment faire si `host -t MX ` ne retourne aucun MX ?

    J’ai tenté une recherche Google mais les explications me sont trop obscures …

    Merci !

    • Salut
      Ca peut venir de la configuration du nom de domaine. Il faut regarder sur l’interface de là où tu l’as acheté pour ajouter le support MX. J’ai donné l’exemple de no-ip mais après chaque interface sera différente

      • Effectivement, j’ai contacté le support, comme il n’y a pas de menu d’admin précis et ça a été corrigé dans la journée ! (petite pub au passage pour azote.org, qui fournit des noms de domaine gratuits !)

        Merci à toi pour ta réponse.

        • fred

          Salut savinelsampsonss814,

          Merci pour la pub, je me suis créer un domaine azote.
          Quel type de domaine il faut utiliser ?

          Merci
          Fred.

  • Jean Santeuil

    Bondoir,
    Plutôt débutant sous linux , j’ai installé sur mon raspberry pi un serveur web qui fonctionne .((interne et externe).
    N’ayant pas de nom de domaine , j’y accède avec mi ip (qui est fixe pour le moment utilisant une box pro jusqu’à la fin du mois).eci me permet de tester l’installation..
    J’arrive à ma question:
    Je souhaiterais installer un serveur mail..Est -il possible de le faire et de le le tester sans nom de domaine (avec l’ip)? p

    • En théorie oui en utilisant le nom qui est dans hostname et en l’ajoutant aussi dans /etc/hosts

  • Jean Santeuil

    Fausse manip, je continue.: pardon si la question est stupide ..
    Merci de votre aide…
    Jea, Santeuil

  • Jean Santeuil

    Bonjour !
    Merci de cette réponse si rapide !
    J’ai installé avec un nom de domaine qui m’appartient, hébergé par un tiers, qui s’éteint à la fin du mois (cessation d’activité).
    Tout va bien jusqu’au paragraphe 13:
    Impossible de configurer le compte de messagerie.( Thunderbird n’a pas réussi …etc…)
    Avez-vous une idée?
    Merci d’avance
    Jean Santeuil

    • Il faudrait un peu plus de détail dans les logs nginx ou php …

  • Jean Santeuil

    Bonjour!
    J’ai solutionné le problème en modifiant les droits des nouveaux comptes créés.
    En interne tout va donc bien !
    J’espère que la suite sera de même..??!!
    Merci de votre réponse
    Jean Santeuil

  • Jean Santeuil

    Re..(excusez- moi d’être lourd)
    Un seul problème La réception de l’extérieur ne se fait pas .tout va bien en interne et les envois se font vers extérieurs)
    en fouillant , dans in fichier mail.warn, j’ai trouvé ça:

    Jul 18 13:56:59 afcberry dovecot: config: Warning: Obsolete setting in /etc/dov
    ecot/dovecot.conf:100: add auth_ prefix to all settings inside auth {} and remo
    ve the auth {} section completely
    Jul 18 13:58:11 afcberry dovecot: config: Warning: NOTE: You can get a new clea
    n config file with: doveconf -n > dovecot-new.conf
    En console ,
    doveconf -n > dovecot-new.conf
    me donne :
    -bash: dovecot-new.conf: Permission denied
    Avez -vous un avis ??
    D’avance merci et bravo pour le tuto..
    Jean Santeuil

  • Alex Plane

    Bonjour ,
    j’ai aussi suivit le tuto
    mais dovecote me posse probleme , google ne me returne pas grand chose non plus sur mon erreur

    #sudo service dovecot start
    doveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: Duplicate service name: imap-login
    [….] Starting IMAP/POP3 mail server: dovecotdoveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: Duplicate service name: imap-login

    si quelequ’un a une idee
    merci d’avance

    Alex

    • Salut
      a priori il y a deux lignes de configuration pour imap-login donc ca généré un conflit

  • petrus

    Liens non fonctionnels vers isalo.org dans l’article

  • Eluc

    Hello !
    merci pour le tuto, j’ai pu bien avancé même si j’ai été bloqué une ou deux fois en chemin.
    J’ai encore un problème à priori très bête mais même après recherche je bloque. J’ai réussi donc à créer une adresse pour root et une pour pi mais maintenant je veux ajouter un user sur le RasPi, on va dire user1. J’ai fait adduser user1, je peux me logger en SSH avec pas de probème. Mais il ne se voit pas automatiquement attribué une boîte mail: « No mail for user1 »

    Je devrais trouver un tuto sur postfix.org, je sais pas si c’est la fatigue mais je vois rien dans la documentation…

    De manière générale il faut chaque fois créer un user sur la machine pour créer un boite mail ? où on peut créer juste des boites mails non liées à des comptes user ?

    Finalement si je commence à parler d’alias afin d’avoir plusieurs adresse mail par utilisateur qui pointe sur une principale (user1_bis@domaine.com atterri sur user1@domaine.com par exemple) avec possibilité d’envoyer avec l’adresse de son choix comme adresse visible (là j’abuse un peu peut être, je me rends pas compte des possibilités de base du server). Tout lien vers un tuto en ce sens sera le bienvenu, merci !

    • Salut,
      Pour moi il faut un user pour créer une boite mail. Les mails sont dans un fichier dont le owner est le user de l’adresse pour la sécurité.

      • Eluc

        Je comprends, du moment que je ne vais pas créer plus de quelques adresses mail cela ne pose de tellement problème mais si je veux m’amuser à créer des alias pour mes adresse principales je ne suis pas sûr que cette configuration soit compatible. Je suis dans la doc de postfix actuellement et sous alias ont peut lire ça: « NEVER list a virtual alias domain name as a mydestination domain! » et dans mydestination (fichier main.cf) j’ai justement mon domaine exemple.com.

        Je sens que j’ai encore du boulot pour crée mon propre mail fiable, sécurisé et fonctionnel au quotidien. Mais c’est pas grave j’aime les défis.

        • N’hésite pas à partager si tu trouves 😉

  • Après avoir potassé ce post, celui concernant Citadel, et d’autres sur internet j’ai opté pour l’utilisation d’iRedmail qui est je pense la plus simple. Si ça intéresse quelqu’un j’ai posté la description de la procédure ici:
    http://www.0xgone.com/2013/11/son-propre-serveur-mail-sur-raspberry.html

    Super blog en tout cas. Je l’ai découvert il y a quelque jours quand j’ai commencé à m’intéresser au serveur mail sur raspberry et c’est une très bonne source en français.

    • Merci pour le partage

  • lewis

    Salut merci pour votre tuto!
    J’ai rencontrer un pb avec ma box sfr qui ne reconnait pas no-ip dans la liste déroulante du champ service (onglet dyndns).
    Conclusion : je ne peux pas associer mon nom de domaine enregistré sur no-ip a ma box
    Merci pour votre réponse

    • Bonjour
      Soit vous passez par un service proposé par la box
      Soit vous installez inadyn sur le raspberry en le configurant avec le domaine sélectionné comme expliqué en début de tutoriel (étape 3)

  • GrallK

    Bonjour,

    j’ai suivis votre tuto « inadyn/no-ip » ainsi que celui-ci à la lettre, je peux envoyer des mails entre mes utilisateurs, lorsque j’utilise la commande « host -t MX » cela fonctionne, mais lorsque je me connecte avec thunderbird on me dit que mon mot de passe est incorrect, alors qu’il ne l’est pas, si je ne mets pas de mot de passe, thunderbird l’accepte, mais j’ai une notification comme quoi l’authentification n’est pas bonne est donc ne peut pas synchroniser mes mails.

    Cordialement,

    • Vincent Quéau

      salut,

      pareille pour moi, j ‘arrive bien à recevoir et envoyer des mails depuis mon raspberry, mais le paramétrage de thunderbird sur un pc distant ne fonctionne pas « mot de passe incorrect », j’ai essayé avec gmail et la c’est le STARTTLS qui ne serait pas compatible.