Installation d'un serveur mail complet sous debian

Sur mon serveur entre autres services j'ai mon propre serveur mail. Cela me permet 1 d'apprendre comment ça marche et 2 d'avoir la main sur ce service (même si j'utilise pas mal gmail à coté...). J'ai donc dû installer et configurer les différents outils pour faire tourner un serveur mail complet.

J'ai passé pas mal de temps à écumer les différents tutos et j'ai jamais trouvé un truc propre et efficace, qui marchait et qui expliquait comment ça marchait. Et les docs sont franchement indigestes. Donc, après pas mal d'essais divers et variés, je vous livre ma config qui marche (bien même) et qui est somme toute plutôt propre. Le tuto va être en plusieurs parties vu qu'il y a plusieurs logiciels :

Concernant la configuration, on voit que je n'utilise rien d'exotique. Je suis comme d'habitude sur une debian 12 stable.

Toutefois, deux trois choses à noter :

  • Je suppose que vous avez déjà un serveur DNS (bind) qui tourne, soit sur votre machine soit chez un hébergeur, sur lequel vous pouvez modifier les enregistrements.
  • Vu le point précédent, je suppose que vous avez aussi au moins un nom de domaine (voire plusieurs !).
  • Enfin, je travaille avec des utilisateurs virtuels : tout est en base de données, ce qui a à mon sens de nombreux avantages. Mais change pas mal la config.

Je vais écrire ce tuto en plusieurs fois, mais promis, j'essaie de faire ça vite ;)

C'est parti, vous êtes bien installés ? En avant !

Installer les paquets :

Toujours bon d'avoir un serveur à jour :

apt update
apt upgrade

Installation du serveur web (pour postfixadmin et roundcube). Pensez à bien noter votre mot de passe root mysql :

apt install apache2 php mariadb-server

Pour pas se fatiguer avec l'administration des bases de données :

apt install phpmyadmin

Lire ce tuto pour une installation détaillé de LAMP:

Si vous avez exim4 (autre serveur smtp) d'installé, il faut le retirer :

apt purge 'exim4*'

Maintenant, l'installation de postfix, avec la couche mysql (les utilisateurs virtuels seront en base de données) et sasl2 pour l'authentification :

apt install postfix postfix-mysql libsasl2-modules sasl2-bin

Répondez "site internet" à la première question (les autres ne nous intéressent pas), puis donnez le nom de domaine que vous avez pris (example.org par exemple) à la suivante.

Il faut installer postfixadmin, qui servira à gérer les domaines et utilisateurs virtuels :

apt install postfixadmin

Utilisez la configuration automatique avec apache2. Postfixadmin créée son propre utilisateur, laissez le générer un mot de passe aléatoire, nous allons créer notre propre utilisateur plus loin.

Ensuite, installation de Dovecot :

apt install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved

Sieve permet de placer les mails automatiquement dans des dossiers (pratique !)

Un peu de configuration :

Création de la base de données :

Lors de l'installation de postfixadmin, la base de données à été crée automatiquement, et un utilisateur a été créé pour manipuler les comptes virtuels. Toutefois, pour des raisons de sécurité, le démon Postfix utilisera un autre utilisateur pour accéder à ces données, qui ne pourra que les lire.

Pour cela, accédez à phpmyadmin (http://example.org/phpmyadmin par défaut), connectez vous en tant que root avec le mot de passe spécifié à l'installation de mysql-server.

Une fois connecté, cliquez sur l'onglet "Privilèges" :

Privilèges dans Phpmyadmin

En bas du tableau des utilisateurs, cliquez sur "Ajouter un utilisateur". Pour le tutorial, on appellera l'utilisateur mailuseravec le mot de pass azerty.

Bien entendu prenez un mot de passe solide (evitez le caractere "#" dans le mot de passe).

Si vous modifiez le nom, pensez à répercuter la modification dans la suite du tutoriel.
Pensez à forcer le client en Local uniquement (valeur localhost). Personne n'est censé se connecter à cet utilisateur depuis l'extérieur.

Une fois l'utilisateur créé, cliquez dans sa ligne sur le lien Changer les privilèges :

Changement de privilèges dans Phpmyadmin

Scrollez un peu pour découvrir les "Privilèges spécifiques à une base de données", et ajoutez des privilèges pour la base de données postfixadmin :

Privilèges spécifiques

Donnez UNIQUEMENT le droit "select" : il n'y a rien besoin d'autre.

Et voila ! La partie base de données est prête !

Enregistrement DNS :

Pour indiquer au monde entier que c'est votre serveur qui s'occupe des mails pour votre domaine, il faut ajouter un resource record DNS de type MX. Concrètement, si vous avez votre propre serveur DNS, il faut modifier le ficher /etc/bind/db.example.org. Si vous utilisez le DNS de votre hébergeur, allez chercher dans les menus "Zone DNS". Il faut rajouter un enregistrement comme ceci :

@   IN  MX  10  1.2.3.4 ;bien sur mettez votre propre IP ici !

On en profite pour rajouter un sous domaine utile :

mail    IN  A   1.2.3.4 ;idem

Et voila ! Il n'y a plus qu'a attendre qu'il se propage.

Utilisateur vmail :

L'utilisateur vmail sera celui qui va gérer les emails :

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/vmail -m

Son home directory (/var/vmail) va contenir tous les mails reçus sur le système.

Préparer les certificats :

Pour être un peu tranquilles (un peu de chiffrement n'a jamais tué) on va utiliser des connexions chiffrées. Ca retiendra pas la NSA, mais ça embêtera les pirates du dimanche.

openssl req -new -x509 -days 3650 -nodes -newkey rsa:4096 -out /etc/ssl/certs/mailserver.pem -keyout /etc/ssl/private/mailserver.pem

Répondez aux questions qui sont posées. Si vous ne voulez rien mettre dans le champ, mettez un point ".".
Dans le champ Organization Name, mettez votre nom Joe Bob.
Dans le champ Common Name, mettez votre nom de domaine example.org.

Votre certificat est généré et placé dans /etc/ssl/certs/mailserver.pem.

Voila pour l'installation ! Prochaine étape : postfixadmin et les utilisateurs virtuels !

POSTFIXADMIN

Salut à tous ! Nouvelle étape dans le tuto sur l'installation d'un serveur de mail : la configuration de postfixadmin !

Postfixadmin est un module web qui permet de manipuler très simplement les domaines et utilisateurs virtuels en base de données.

Lors de l'installation de postfixadmin, on l'avait connecté à notre base de données avec un utilisateur et un mot de passe aléatoire. Il faut maintenant générer cette base de données. Pour cela, il suffit de se rendre à l'adresse suivante :

http://example.org/postfixadmin/setup.php

Le chargement est un peu long, puisque le setup crée la base de données, puis les résultats s'affichent :

Résultat de la création de la base de données

A la fin de la page, on doit créer le mot de passe pour le setup :

Formulaire mot de passe setup

Générez le hash du mot de passe :

Hash et formulaire administrateur

Copiez le hash obtenu dans le fichier de configuration (dans /etc/postfixadmin) comme indiqué. Vous devez ensuite créer le compte administrateur, en retapant le mot de passe setup. Attention, mettez un mot de passe différent pour plus de sécurité !

Vous pouvez ensuite vous connecter à l'adresse http://example.org/postfixadmin/login.php

Vous obtenez la page suivante :

Accueil postfixadmin

Il va maintenant falloir créer les domaines, puis les utilisateurs. Un domaine correspond à un nom de domaine. Par exemple, example.org. Mais si vous possédez aussi example.com et que vous voulez aussi des mails sur ce domaine en utilisant le même serveur, c'est tout à fait possible ! Pensez bien à rajouter l'enregistrement MX comme vu dans le tuto précédent. Pour ajouter un domaine, survolez Liste Domaines et cliquez sur Nouveau domaine.

Ajout de domainepostfixadmin

Une fois validé, on voit que notre domaine apparait dans la liste des domaines !

Vous pouvez ensuite rajouter les utilisateurs. Pour cela, survolez Liste virtuels et cliquez sur Ajouter un compte courriel. Vous arrivez sur cette page :

Ajout de compte courriel postfixadmin

Entrez les informations,__ décochez "Envoyer le message de bienvenue"__ (on a pas encore configurer ce qu'il faut pour le recevoir !) et validez. Félicitations, vous avez créé votre utilisateur en base de données.

Vous pouvez aussi créer des alias. Il s'agit d'adresses email qui redirigeront les mails vers un autre compte. Par exemple, tout serveur mail doit se doter d'une adresse mail "abuse", pour que l'on puisse signaler du spam en provenance d'un domaine par exemple. Mais si on la met en utilisateur, personne ne s'y connectera jamais ! Il suffit donc de créer un alias depuis abuse@example.com vers votre mail utlisateur que vous venez de créer.

Pour faire cela, survolez Liste Virtuels et cliquez sur Ajouter un alias. Voici la page :

Ajout d'alias postfixadmin

Et voila, votre alias abuse est créé.


Configuration de Postfix

MAJ : pour démarrer postfix faire : 

postfix start

 

Vous savez maintenant comment créer domaines, utilisateurs et alias avec postfixadmin. Prochaine étape : faire arriver les emails à destination grâce à Postfix !

Maintenant qu'on a des adresses mail, il pourrait être pratique qu'elles puisse échanger des messages. C'est ce que permet postfix : faire passer des mails d'un serveur à l'autre. Il faut donc relier postfix à la base de données

Domaines :

Pour que postfix ait accès aux domaines, il faut écrire le code suivant dans /etc/postfix/mysql-virtual-mailbox-domains.cf :

user = mailuser
password = azerty
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT 1 FROM domain WHERE domain='%s'

(Pensez à mettre votre mot de passe pour l'utilisateur mailuser)

Ce fichier va permettre à postfix, quand il reçoit un mail destiné à user@example.org, de déterminer si notre serveur est bien en charge du domaine example.org. Si c'est le cas, ça veut dire que le domaine se trouve dans notre base de données. Il faut qu'en executant la requête "query", un élément quelconque soit retourné, et rien si le domaine n'est pas présent.

Attention ! Ici, il n'est pas identique de marquer "localhost" et "127.0.0.1" dans le champ hosts. En effet, si vous mettez "localhost", postfix va chercher la socket UNIX de mysql, qui ne sera pas présente. Alors qu'en mettant l'IP, postfix va effectuer une connexion tcp sur le port de mysql.

Pour l'activez, lancez la commande :

postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Cela ajoute la configuration au fichier /etc/postfix/main.cf et recharge automatiquement la configuration de postfix, évitant d'avoir à le faire à la main.

Pour tester si la recherche de domaine fonctionne bien, vous pouvez lancer la commande suivante :

postmap -q example.org mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Si le domaine example.org est présent dans vos domaines, la valeur "1" sera affichée, sinon rien.

Boites mails

Ensuite, il faut vérifier si la boite mail existe, exactement comme avec les domaines. Cette fois ci on écrit dans le fichier /etc/postfix/mysql-virtual-mailbox-maps.cf :

user = mailuser
password = azerty
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT 1 FROM mailbox WHERE username='%s'

Pour activer :

postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Et pour tester :

postmap -q john@example.org mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Comme pour le domaine, le résultat est 1 si la boite existe, rien sinon.

Gestion des alias

Il faut maintenant rediriger les alias vers les utilisateurs existant. Dans le fichier /etc/postfix/mysql-virtual-alias-maps.cf :

user = mailuser
password = azerty
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s'

Pour activer :

postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Pour tester :

postmap -q abuse@example.org mysql:/etc/postfix/mysql-virtual-alias-maps.cf

Ici le résultat n'est plus le même : c'est l'utilisateur destination qui doit s'afficher, ce qui permet à postfix de faire la correspondance.

Dernière étape très importante : modifier les droits de ces trois fichiers. En effet, ils contiennent en clair des mots de passe SQL. Lancez les deux commandes :

chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf

Comme ça postfix peut continuer à lire les configurations, et les visiteurs indiscrets ne peuvent pas.


Activation du port 587

Beaucoup de FAI bloquent le port 25 (smtp) pour éviter les serveurs de spam. Du coup on utilise le port 587 qui est un port alternatif "standard".

Pour le débloquer, il faut modifier le fichier /etc/postfix/master.cf et décommenter la ligne :

submission inet n       -       -       -       -       smtpd

Activation de SASL

Sasl permet de forcer l'authentification pour envoyer des mails, ce qui évite que n'importe quel spammer utilise votre serveur comme relai. Pour activer sasl avec postfix, modifiez le fichier /etc/postfix/main.cf en ajoutant les lignes suivantes :

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions = 
  permit_mynetworks 
  permit_sasl_authenticated 
  reject_unauth_destination

Ici on voit plusieurs choses :

  • auth_enable : on active l'authentification
  • tls_auth_only : on active l'authentification uniquement pour ceux qui ont une connexion TLS. Cela evite que votre mot de passe circule en clair.
  • recipient restrictions : on autorise uniquement les connexions en provenance des IP spécifiées dans "mynetwork", les personnes authentifiées correctement avec SASL (et donc avec TLS) et on autorise de relever les mails destinés aux utilisateurs du système.

La ligne la plus importante est la première : elle permet de faire passer l'authentification par dovecot. En effet l'authentification par SASL en passant par postfix est une usine à gaz. Ici, Postfix demande a SASL l'authentification, qui demande à Dovecot. Simple non ?

Voici le master.cf complet :

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd -o content_filter=spamassassin
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
# Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet n -   y       -       -       smtpd
submission inet n       -       y       -       -       smtpd -o content_filter=spamassassin
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o smtpd_reject_unlisted_recipient=no
#     Instead of specifying complex smtpd_<xxx>_restrictions here,
#     specify "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
#     here, and specify mua_<xxx>_restrictions in main.cf (where
#     "<xxx>" is "client", "helo", "sender", "relay", or "recipient").
#  -o smtpd_client_restrictions=
#  -o smtpd_helo_restrictions=
#  -o smtpd_sender_restrictions=
#  -o smtpd_relay_restrictions=
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination
#  -o milter_macro_daemon_name=ORIGINATING
# Choose one: enable submissions for loopback clients only, or for any client.
#127.0.0.1:submissions inet n  -       y       -       -       smtpd
#submissions     inet  n       -       y       -       -       smtpd
#  -o syslog_name=postfix/submissions
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#     Instead of specifying complex smtpd_<xxx>_restrictions here,
#     specify "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
#     here, and specify mua_<xxx>_restrictions in main.cf (where
#     "<xxx>" is "client", "helo", "sender", "relay", or "recipient").
#  -o smtpd_client_restrictions=
#  -o smtpd_helo_restrictions=
#  -o smtpd_sender_restrictions=
#  -o smtpd_relay_restrictions=
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       y       -       -       qmqpd
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
        -o syslog_name=postfix/$service_name
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop  unix  -       n       n       -       -       pipe
  flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
#   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
#  mailbox_transport = lmtp:inet:localhost
#  virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus     unix  -       n       n       -       -       pipe
#  flags=DRX user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman   unix  -       n       n       -       -       pipe
  flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
spamassassin unix - n n - - pipe 
  flags=R user=debian-spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

voici le main.cf complet : 

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 3.6 on
# fresh installs.
compatibility_level = 3.6



# 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_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache


smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.$mydomain, localhost, localhost.localdomain
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions =
    permit_sasl_authenticated
    permit_mynetworks
    reject_unauth_destination
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1

 

Maintenant qu'on arrive à faire circuler les mails sur notre serveur, et qu'on les arrête quand ils sont pour nous, il faut pouvoir les récupérer pour les mettre dans les dossiers. C'est le rôle de dovecot.

Configuration de Dovecot

La configuration de dovecot est éclatée dans plusieurs fichiers, qui se trouvent dans /etc/dovecot/conf.d/.

Configuration auth :

Le premier fichier à modifier est 10-auth.conf. Il faut modifier les mécanismes de connexions. Votre ligne doit ressembler à :

auth_mechanisms = plain login

Par défaut, dovecot utilise les utilisateurs réels du système. Nous, nous utilisons des utilisateurs en base de données. Il faut donc modifier les includes à la fin du fichier :

#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

Configuration SQL :

Il faut ensuite modifier le fichier auth-sql.conf.ext. Commentez les sections userdb existantes et saisissez celles-ci :

userdb {
        driver = static
        args = uid=vmail gid=vmail home=/var/vmail/%d/%n
    }

Configuration mail :

Dans le fichier 10-mail.conf, modifiez le paramètre mail_location comme ceci :

mail_location = maildir:/var/vmail/%d/%n/Maildir

Ainsi, les mails reçus seront placés dans le dossier /var/vmail/[domaine]/[utilisateur]/Maildir.

Vérifiez que le separator a bien pour valeur /, et non ..

Configuration master :

Dans le fichier 10-master.conf, dans le bloc service auth, spécifiez le smtp-auth de postfix :

# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
}

Configuration SSL :

Pour utiliser les certificats SSL créés en partie 1, modifiez le fichier 10-ssl.conf :

ssl = yes
ssl_cert = </etc/ssl/certs/mailserver.pem
ssl_key = </etc/ssl/private/mailserver.pem

Configuration LDA :

Il faut activer le plugin sieve pour placer les fichier dans les dossiers. Pour cela, dans le fichier 15-lda.conf, trouvez le bloc protocol lda (ou créez le si besoin) :

protocol lda {
    # Space separated list of plugins to load (default is global mail_plugins).
    mail_plugins = $mail_plugins sieve
}

Connexion SQL :

Il faut indiquer à Dovecot comment se connecter à la base de données SQL. Pour cela, modifiez le ficher /etc/dovecot/dovecot-sql.conf.ext. Le fichier est plutot bien documenté. Trouvez (ou ajoutez à la fin) ces lignes :

driver = mysql
    connect = host=127.0.0.1 dbname=postfixadmin user=mailuser password=azerty
    password_query = SELECT username,domain,password FROM mailbox WHERE username='%u';

(Pensez à modifier le mot de passe)

Ici aussi, on change les droits de ce fichier vu qu'il contient un mot de passe :

chown root:root /etc/dovecot/dovecot-sql.conf.ext
chmod go= /etc/dovecot/dovecot-sql.conf.ext

Finalisation :

Modifiez les droits du fichier de configuration, pour que dovecot soit lancé en tant qu'utilisateur vmail :

chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf

Redémarrez dovecot :

service dovecot restart

Comme à chaque redémarrage de service, vérifiez les logs (# tail /var/log/mail.log). Ils doivent finir par la ligne

... dovecot: master: Dovecot v2.1.7 starting up (core dumps disabled)

Connecter Postfix à Dovecot :

Maintenant, on a d'un coté Postfix qui sait quand un mail qui passe est pour lui, et Dovecot qui sait où mettre les mails qu'on lui donne. Il faut donc que Postfix passe les mails a Dovecot qui les range.

Pour cela, ajoutez les lignes suivantes à la fin du fichier /etc/postfix/master.cf :

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

(Attention, la deuxième ligne est indentée par deux espaces)

Et redémarrez postfix :

service postfix restart

La fin du fichier /var/log/mail.log :

postfix/master[…]: daemon started -- version 2.9.6, configuration /etc/postfix

Et modifiez la configuration de postfix pour qu'il utilise ce qu'on vient de lui donner :

postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1

Et voila pour postfix !

Test de la configuration

Déjà, pour l'instant, notre dossier /var/vmail est vide. Vous pouvez le vérifier avec un simple tree /var/vmail ou, si vous n'avez pas la commande tree (que je vous conseille !), simplement ls -R /var/vmail

Maintenant, on va ouvrir les logs dans un terminal, avec la commande :

tail -f /var/log/mail.log

...et envoyer un mail à notre utilisateur :

echo test | mail user@example.com

Si tout marche bien, votre fichier de log devrait ressembler à ça :

Jan 20 08:17:29 hostname postfix/pickup[17343]: 19F9CD00064: uid=0 from=<root>
    Jan 20 08:17:29 hostname postfix/cleanup[19091]: 19F9CD00064: message-id=<20150120071729.19F9CD00064@hostname>
    Jan 20 08:17:29 hostname postfix/qmgr[5341]: 19F9CD00064: from=<root@hostname>, size=387, nrcpt=1 (queue active)
    Jan 20 08:17:29 hostname dovecot: lda(user@example.com): msgid=<20150120071729.19F9CD00064@hostname>: saved mail to INBOX
    Jan 20 08:17:29 hostname postfix/pipe[19095]: 19F9CD00064: to=<user@example.com>, relay=dovecot, delay=0.38, delays=0.18/0.03/0/0.16, dsn=2.0.0, status=sent (delivered via dovecot service)
    Jan 20 08:17:29 hostname postfix/qmgr[5341]: 19F9CD00064: removed

Si echec mettre la ligne 39 du fichier /etc/postfix/main.cf comme ceci:

mydestination = localhost.info, localhost

Votre log sera peut être un peu différent, mais on voit bien les différentes étapes :

  • Postfix récupère le mail et l'arrête vu que c'est pour lui
  • Dovecot récupère le mail (avec le plugin lda) pour le placer dans la boite de réception (dossier INBOX)
  • Postfix confirme que le mail a été donné à dovecot et que c'est plus son problème
  • Postfix vire le mail de sa liste vu que dovecot s'en occupe

Maintenant, votre dossier /var/vmail/ doit ressembler à ça :

/var/vmail/
└── example.com
    └── user
        └── Maildir
            ├── cur
            ├── dovecot.index.cache
            ├── dovecot.index.log
            ├── dovecot.mailbox.log
            ├── dovecot-uidlist
            ├── dovecot-uidvalidity
            ├── dovecot-uidvalidity.54a66424
            ├── new
            │   └── 1421738249.M235803P19096.hostname,S=439,W=453
            ├── subscriptions
            └── tmp

On voit que notre mail est bien arrivé, et est placé dans le dossier "new", donc tout va bien !
(Au passage, on voit la mise en forme sympa avec tree pour l'arborescence !)

Installation de SpamAssassin:

apt install spamassassin spamc
nano /etc/postfix/master.cf
Change:
smtp      inet  n       -       n       -       -       smtpd
To:
smtp      inet  n       -       n       -       -       smtpd -o content_filter=spamassassin


Change:
smtps     inet  n       -       n       -       -       smtpd
To:
smtps     inet  n       -       n       -       -       smtpd -o content_filter=spamassassin

A la fin de fichier, ajoutez:

spamassassin unix - n n - - pipe flags=R user=debian-spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Pour activer le sujet personnaliser quand un mail est detecté comme spam:

nano /etc/spamassassin/local.cf

et activez (décommentez):

rewrite_header Subject *****SPAM*****

Installation de Sieve:

apt install dovecot-sieve dovecot-managesieved
nano /etc/dovecot/conf.d/20-lmtp.conf

Ajoutez: 

protocol lmtp {
  postmaster_address = admin@example.com
  mail_plugins = $mail_plugins sieve
}
nano /etc/dovecot/conf.d/90-sieve.conf

Ajoutez: 

plugin {
   sieve = ~/.dovecot.sieve
   sieve_global_path = /var/lib/dovecot/sieve/default.sieve
   sieve_dir = ~/sieve
   sieve_global_dir = /var/lib/dovecot/sieve/
}

Vous pourvez desormais ajouter des filtres avec le webmail Rainloop par exemple:

Récupérer les mails

Voila la configuration que j'ai mis en place pour Thunderbird :
En réception, IMAPS :

  • serveur : mail.example.com
  • port : 143
  • nom d'utilisateur : user@example.com
  • sécurité : StartTLS
  • Méthode d'authentification : Mot de passe normal

En envoi :

  • serveur : mail.example.com
  • port : 587
  • nom d'utilisateur : user@example.com
  • sécurité : StartTLS
  • Méthode d'authentification : Mot de passe normal

Vous pouvez maintenant envoyer et recevoir des mails !

 

 

42 commentaires

  1. image ricardo

    Bonjour,
    Je vous remercie beaucoup pour ce tutoriel qui est très clair et qui semble bien fait !
    Malheureusement, ça ne marche pas complètement pour moi !
    En effet lorsque j'arrive au chapitre Test de la Configuration "...et envoyer un mail à notre utilisateur : echo test | mail user@example.com " (bien sûr j'ai adapté l'adresse email destinatrice), dans la log, je n'obtiens pas la même chose que vous, c'est à dire, le passage par DOVECOT ne fonctionne pas ! Je passe directement en envoi SMTP !

    Mar 13 16:28:14 mail postfix/pickup[1873]: 6618E120E8A: uid=1000 from=<ricardo@mail.rican.pw>
    Mar 13 16:28:14 mail postfix/cleanup[1882]: 6618E120E8A: message-id=<20180313162814.6618E120E8A@mail.rican.pw>
    Mar 13 16:28:14 mail postfix/qmgr[1874]: 6618E120E8A: from=<ricardo@mail.rican.pw>, size=407, nrcpt=1 (queue active)
    Mar 13 16:28:14 mail postfix/smtp[1884]: 6618E120E8A: to=<anaya.richard@gmail.com> ...

    Est-ce que vous avez une idée du problème ?
    Alors que j'ai vraiment suivi à la lettre le tutoriel !
    Par avance, merci.

  2. Bonjour,

    avez-vous vérifié les logs dans /var/log/mail.err ou /var/log/mail.info ou /var/log/mail.log, afin d'avoir une piste ?

    avez-vous fait cette partie du tuto ?

    Si echec mettre la ligne 39 du fichier /etc/postfix/main.cf comme ceci:

    mydestination = localhost.info, localhost

    Cdlt.

  3. image bluefox

    Bonjour, merci pour ce tuto clair et bien documenté.
    Je l'ai suivi à la lettre jusqu'au test, echo test | mail user@example.com
    J'ai debian9, php 7.2.3-1 J'ai tenté la modif de la ligne 39...
    Voici mes logs:
    Mar 20 00:37:52 vps279343 dovecot: master: Warning: Killed with signal 15 (by pid=8080 uid=0 code=kill)
    Mar 20 00:37:52 vps279343 dovecot: master: Dovecot v2.2.27 (c0f36b0) starting up for pop3, imap (core dumps disabled)
    Mar 20 00:38:07 vps279343 postfix/postfix-script[8147]: stopping the Postfix mail system
    Mar 20 00:38:07 vps279343 postfix/master[7320]: terminating on signal 15
    Mar 20 00:38:07 vps279343 postfix/postfix-script[8310]: starting the Postfix mail system
    Mar 20 00:38:07 vps279343 postfix/master[8312]: daemon started -- version 3.1.8, configuration /etc/postfix
    echo coucou | mail contact@usehtech.com
    Mar 20 00:40:01 vps279343 dovecot: imap-login: Disconnected (disconnected before auth was ready, waited 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, secured, session=<eg0Gesxnppl/AAAB>
    Mar 20 00:40:01 vps279343 dovecot: pop3-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, secured, session=<OnEGesxnTKd/AAAB>
    Mar 20 00:40:01 vps279343 postfix/smtpd[8501]: connect from localhost[127.0.0.1]
    Mar 20 00:40:01 vps279343 postfix/smtpd[8501]: lost connection after CONNECT from localhost[127.0.0.1]
    Mar 20 00:40:01 vps279343 postfix/smtpd[8501]: disconnect from localhost[127.0.0.1] commands=0/0

    Merci pour votre aide...

  4. Bonjour,

    LA, comme ça, ça ne me parle pas.

    Juste une question, avez vous fait les enregistrements DNS smtp chez votre hébergeur ?

    cdlt.

  5. image JMarc

    Magnifique tuto : clair, opérationnel, qui explique bien et très bien écrit ! Mille merci.
    Juste pour la commande de test de la config, et pour les incultes comme moi, la commande mail n'est accessible qu'après install de mailutils. Un détail...
    Encore bravo !

  6. Merci ^^.

    Mais je tiens à dire que ce tuto n'est pas de moi (enfin je l'ai juste un peu adapté pour Débian 9) mais de :

    https://www.tictech.info/post/mail_intro

    Cdlt.

  7. image bluefox

    Merci pour la réponse, oui mes enregistrements DNS sont correct et actifs

  8. image bluefox

    OUPS......Quelle bonne idée, en fait mes enregistrements DNS liés aux mails sont les suivants:
    usehtech.com 3600 MX Mon IP
    mail.usehtech.com 3600 A Mon IP
    usehtech.com 3600 SPF "v=spf1 a mx -all"

    Il manquerait donc les infos relatives au SMTP ?

  9. Ah oui effectivement, ça peut aider, ça doit être un truc du genre:

    IN MX 10 smtp.usehtech.com

    Bon courage.

    cdlt.

  10. image bluefox

    Bonjour, J'ai tout réinstallé sur un autre serveur, il y a du progrès.
    Je parviens à envoyer des mails mais pas à en recevoir, sauf en boucle si je me les envoie à moi même via roundcube.
    Voici mon mail queue.

    Apr 6 21:00:42 vps-33397 postfix/smtpd[10302]: connect from localhost[::1]
    Apr 6 21:00:42 vps-33397 postfix/smtpd[10302]: 2D9A6E12C4: client=localhost[::1]
    Apr 6 21:00:42 vps-33397 postfix/cleanup[10306]: 2D9A6E12C4: message-id=<4ea14583b09c73de6b697b567277cc39@usehtech.com>
    Apr 6 21:00:42 vps-33397 postfix/qmgr[10184]: 2D9A6E12C4: from=<contact@usehtech.com>, size=622, nrcpt=1 (queue active)
    Apr 6 21:00:42 vps-33397 spamc[10309]: connect to spamd on 127.0.0.1 failed, retrying (#1 of 3): Connection refused
    Apr 6 21:00:42 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10310, secured, session=<Sl46rDJp0J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:00:42 vps-33397 postfix/smtpd[10302]: disconnect from localhost[::1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
    Apr 6 21:00:42 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=515 out=657
    Apr 6 21:00:43 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10312, secured, session=<gZdHrDJp1J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:00:43 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=44 out=535
    Apr 6 21:00:43 vps-33397 spamc[10309]: connect to spamd on 127.0.0.1 failed, retrying (#2 of 3): Connection refused
    Apr 6 21:00:43 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10314, secured, session=<eLNMrDJp2J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:00:43 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=292 out=2735
    Apr 6 21:00:43 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10316, secured, session=<L1BNrDJp2p8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:00:43 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=82 out=622
    Apr 6 21:00:44 vps-33397 spamc[10309]: connect to spamd on 127.0.0.1 failed, retrying (#3 of 3): Connection refused
    Apr 6 21:00:44 vps-33397 spamc[10309]: connection attempt to spamd aborted after 3 retries
    Apr 6 21:00:44 vps-33397 postfix/pickup[10183]: 5CA3AE12EE: uid=116 from=<contact@usehtech.com>
    Apr 6 21:00:44 vps-33397 postfix/pipe[10307]: 2D9A6E12C4: to=<francois.de-vos@laposte.net>, relay=spamassassin, delay=2.2, delays=0.16/0.01/0/2, dsn=2.0.0, status=sent (delivered via spamassassin service)
    Apr 6 21:00:44 vps-33397 postfix/qmgr[10184]: 2D9A6E12C4: removed
    Apr 6 21:00:44 vps-33397 postfix/cleanup[10306]: 5CA3AE12EE: message-id=<4ea14583b09c73de6b697b567277cc39@usehtech.com>
    Apr 6 21:00:44 vps-33397 postfix/qmgr[10184]: 5CA3AE12EE: from=<contact@usehtech.com>, size=738, nrcpt=1 (queue active)
    Apr 6 21:00:48 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10321, secured, session=<mWKerDJp4J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:00:48 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=290 out=4662
    Apr 6 21:01:14 vps-33397 postfix/smtp[10319]: connect to smtpz4.laposte.net[194.117.213.1]:25: Connection timed out
    Apr 6 21:01:14 vps-33397 postfix/smtp[10319]: 5CA3AE12EE: to=<francois.de-vos@laposte.net>, relay=none, delay=30, delays=0.02/0.01/30/0, dsn=4.4.1, status=deferred (connect to smtpz4.laposte.net[194.117.213.1]:25: Connection timed out)
    Apr 6 21:01:43 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10330, secured, session=<n3nhrzJp4p8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:01:43 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=195 out=1711
    Apr 6 21:02:43 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10342, secured, session=<aHt0szJp5J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:02:43 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=195 out=1711
    Apr 6 21:03:07 vps-33397 postfix/qmgr[10184]: 784E6E12EA: from=<contact@usehtech.com>, size=693, nrcpt=1 (queue active)
    Apr 6 21:03:37 vps-33397 postfix/smtp[10344]: connect to smtpz4.laposte.net[194.117.213.1]:25: Connection timed out
    Apr 6 21:03:37 vps-33397 postfix/smtp[10344]: 784E6E12EA: to=<francois.de-vos@laposte.net>, relay=none, delay=653, delays=623/0.03/30/0, dsn=4.4.1, status=deferred (connect to smtpz4.laposte.net[194.117.213.1]:25: Connection timed out)
    Apr 6 21:03:44 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10348, secured, session=<nzEXtzJp7J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:03:44 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=195 out=1711
    Apr 6 21:04:44 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10350, secured, session=<IyyrujJp8J8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:04:44 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=195 out=1711
    Apr 6 21:05:44 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10361, secured, session=<ulI+vjJp8p8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:05:44 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=195 out=1711
    Apr 6 21:06:44 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=10363, secured, session=<QALSwTJp9p8AAAAAAAAAAAAAAAAAAAAB>
    Apr 6 21:06:44 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=195 out=1711

    Si vous avez une idée?

  11. Bonjour,

    Pourriez vous vérifier que spamassassin est bien démarré ?

    /etc/init.d/spamassassin status

    Essaye de créer un fichier "/etc/spamassassin/spamc.conf" et met dedans:

    -d 127.0.0.1

    ça dit quoi ?

  12. image bluefox

    bonjour h2tp et merci pour ton aide précieuse
    J'avais déjà procédé à la création de ce fichier, voila ce que ça dit:
    ● spamassassin.service - Perl-based spam filter using text analysis
    Loaded: loaded (/lib/systemd/system/spamassassin.service; disabled; vendor preset: enabled)
    Active: inactive (dead)

  13. image bluefox

    Après un:
    systemctl enable spamassassin.service
    j'obtiens:
    ● spamassassin.service - Perl-based spam filter using text analysis
    Loaded: loaded (/lib/systemd/system/spamassassin.service; enabled; vendor preset: enabled)
    Active: inactive (dead)
    Mais je ne parviens toujours pas à envoyer de mail

  14. image bluefox

    J'ai aussi changé dans : /etc/default/spamassassin
    ENABLED=1

  15. image bluefox

    Je précise aussi que je reçois bien les mails de l'extérieur, mais que la commande :
    echo coucou | mail contact@usehtech.com ne donne rien
    voici les logs
    Apr 9 02:50:19 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=121 out=1042
    echo coucou | mail contact@usehtech.com
    Apr 9 02:50:56 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=9395, secured, session=<pGJ6zF9pzrIAAAAAAAAAAAAAAAAAAAAB>
    Apr 9 02:50:56 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=294 out=2306
    Apr 9 02:50:58 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=9397, secured, session=<zB+SzF9p0LIAAAAAAAAAAAAAAAAAAAAB>
    Apr 9 02:50:58 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=294 out=2306
    Apr 9 02:50:59 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=9399, secured, session=<xYeazF9p0rIAAAAAAAAAAAAAAAAAAAAB>

  16. image bluefox

    Et enfin:
    ● spamassassin.service - Perl-based spam filter using text analysis
    Loaded: loaded (/lib/systemd/system/spamassassin.service; enabled; vendor preset: enabled)
    Active: active (running) since Mon 2018-04-09 02:59:32 CEST; 3min 51s ago
    Process: 9478 ExecStart=/usr/sbin/spamd -d --pidfile=/var/run/spamd.pid $OPTIONS (code=exited, status=0/SUCCESS)
    Main PID: 9480 (/usr/sbin/spamd)
    Tasks: 3 (limit: 4915)
    CGroup: /system.slice/spamassassin.service
    ├─9480 /usr/sbin/spamd -d --pidfile=/var/run/spamd.pid --create-prefs --max-children 5 --helper-home-dir
    ├─9481 spamd child
    └─9482 spamd child

    Apr 09 02:59:28 vps-33397 systemd[1]: Starting Perl-based spam filter using text analysis...
    Apr 09 02:59:29 vps-33397 spamd[9478]: logger: removing stderr method
    Apr 09 02:59:32 vps-33397 spamd[9480]: spamd: server started on IO::Socket::IP [::1]:783, IO::Socket::IP [127.0.0.1]:783 (running version 3.4.1)
    Apr 09 02:59:32 vps-33397 spamd[9480]: spamd: server pid: 9480
    Apr 09 02:59:32 vps-33397 spamd[9480]: spamd: server successfully spawned child process, pid 9481

  17. image bluefox

    Voila qui fonctionne en local maintenant:
    04:05:42 [root@vps-33397:/] # echo Test | mail contact@usehtech.com
    04:07:51 [root@vps-33397:/] # tail /var/log/mail.log
    Apr 9 04:06:55 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=12079, secured, session=<KIQ03GBpSLQAAAAAAAAAAAAAAAAAAAAB>
    Apr 9 04:06:55 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=90 out=876
    Apr 9 04:07:51 vps-33397 postfix/pickup[11617]: 64F0CE1322: uid=0 from=<root@vps-33397.fhnet.fr>
    Apr 9 04:07:51 vps-33397 postfix/cleanup[12084]: 64F0CE1322: message-id=<20180409020751.64F0CE1322@vps-33397.fhnet.fr>
    Apr 9 04:07:51 vps-33397 postfix/qmgr[11618]: 64F0CE1322: from=<root@vps-33397.fhnet.fr>, size=332, nrcpt=1 (queue active)
    Apr 9 04:07:51 vps-33397 dovecot: lda(contact@usehtech.com): msgid=<20180409020751.64F0CE1322@vps-33397.fhnet.fr>: saved mail to INBOX
    Apr 9 04:07:51 vps-33397 postfix/pipe[12106]: 64F0CE1322: to=<contact@usehtech.com>, relay=dovecot, delay=0.51, delays=0.41/0.01/0/0.09, dsn=2.0.0, status=sent (delivered via dovecot service)
    Apr 9 04:07:51 vps-33397 postfix/qmgr[11618]: 64F0CE1322: removed
    Apr 9 04:07:55 vps-33397 dovecot: imap-login: Login: user=<contact@usehtech.com>, method=PLAIN, rip=::1, lip=::1, mpid=12113, secured, session=<6SPJ32BpUrQAAAAAAAAAAAAAAAAAAAAB>
    Apr 9 04:07:55 vps-33397 dovecot: imap(contact@usehtech.com): Logged out in=90 out=908
    04:08:13 [root@vps-33397:/] #

    mais je ne peux toujours rien envoyer...

  18. J'avoue que je ne vois pas trop ou si situe le problème, ce n'est peux être pas spamassassin le problème ...

    Pour info mon

    ENABLED=1

    chez moi est à 0

    Sinon tu est sous quel OS ?

    Aussi je pense que tu devrais changer ton HOSTNAME.

    C'est mieux si il correspond au CommonName, pour toi: usehtech

    Je continuerais de regarder un peu mais le temps me manque en ce moment. ^^

    Courage, n'empêche ça y est presque ..

  19. image bluefox

    Je suis sous debian9 stretch
    voici mon hostname,
    09:49:54 [root@vps-33397:~] # hostname
    vps-33397
    10:09:39 [root@vps-33397:~] # hostname -f
    vps-33397.fhnet.fr
    10:09:50 [root@vps-33397:~] #

  20. image bluefox

    Voici le tuto que j'ai suivi pour l'installation du serveur:
    The Perfect Server - Debian 9 (Stretch) with Apache, BIND, Dovecot, PureFTPD and ISPConfig 3.1 - Page 1
    Merci pour votre aide

  21. image bluefox

    Voici mon main.cf
    # See /usr/share/postfix/main.cf.dist for a commented, more complete version
    # Debian specific: Specifying a file name will cause the first
    # line of that file to be used as the name. The Debian default
    # is /etc/mailname.
    #myorigin = /etc/mailname

    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no

    # appending .domain is the MUA's job.
    append_dot_mydomain = no

    # Uncomment the next line to generate "delayed mail" warnings
    #delay_warning_time = 4h

    readme_directory = /usr/share/doc/postfix

    # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
    # fresh installs.
    compatibility_level = 2

    # 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_tls_cert_file=/etc/ssl/certs/mailserver.pem
    #smtpd_tls_key_file=/etc/ssl/private/mailserver.pem

    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.

    smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
    myhostname = vps-33397.fhnet.fr

    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = $myhostname, vps-33397.fhnet.fr, localhost.fhnet.fr, localhost
    #mydestination = localhost.fhnet.fr, localhost
    #relayhost =
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    inet_protocols = all
    html_directory = /usr/share/doc/postfix/html
    virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
    virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
    virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
    smtpd_tls_security_level = may
    smtpd_tls_auth_only = yes
    smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
    virtual_transport = dovecot
    dovecot_destination_recipient_limit = 1

  22. image bluefox

    et mon master.cf
    # Postfix master process configuration file. For details on the format
    # of the file, see the master(5) manual page (command: "man 5 master" or
    # on-line: http://www.postfix.org/master.5.html).
    #
    # Do not forget to execute "postfix reload" after editing this file.
    #
    # ==========================================================================
    # service type private unpriv chroot wakeup maxproc command + args
    # (yes) (yes) (no) (never) (100)
    # ==========================================================================
    #smtp inet n - y - - smtpd
    smtp inet n - n - - smtpd -o content_filter=spamassassin
    #smtp inet n - y - 1 postscreen
    #smtpd pass - - y - - smtpd
    #dnsblog unix - - y - 0 dnsblog
    #tlsproxy unix - - y - 0 tlsproxy
    submission inet n - - - - smtpd
    -o syslog_name=postfix/submission
    -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    # -o smtpd_reject_unlisted_recipient=no
    # -o smtpd_client_restrictions=$mua_client_restrictions
    # -o smtpd_helo_restrictions=$mua_helo_restrictions
    # -o smtpd_sender_restrictions=$mua_sender_restrictions
    # -o smtpd_recipient_restrictions=
    # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    #smtps inet n - - - - smtpd
    smtps inet n - n - - smtpd -o content_filter=spamassassin
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    # -o smtpd_reject_unlisted_recipient=no
    # -o smtpd_client_restrictions=$mua_client_restrictions
    # -o smtpd_helo_restrictions=$mua_helo_restrictions
    # -o smtpd_sender_restrictions=$mua_sender_restrictions
    # -o smtpd_recipient_restrictions=
    # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    #628 inet n - y - - qmqpd
    pickup unix n - y 60 1 pickup
    cleanup unix n - y - 0 cleanup
    qmgr unix n - n 300 1 qmgr
    #qmgr unix n - n 300 1 oqmgr
    tlsmgr unix - - y 1000? 1 tlsmgr
    rewrite unix - - y - - trivial-rewrite
    bounce unix - - y - 0 bounce
    defer unix - - y - 0 bounce
    trace unix - - y - 0 bounce
    verify unix - - y - 1 verify
    flush unix n - y 1000? 0 flush
    proxymap unix - - n - - proxymap
    proxywrite unix - - n - 1 proxymap
    smtp unix - - n - - smtp
    relay unix - - y - - smtp
    # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
    showq unix n - y - - showq
    error unix - - y - - error
    retry unix - - y - - error
    discard unix - - y - - discard
    local unix - n n - - local
    virtual unix - n n - - virtual
    lmtp unix - - y - - lmtp
    anvil unix - - y - 1 anvil
    scache unix - - y - 1 scache
    #
    # ====================================================================
    # Interfaces to non-Postfix software. Be sure to examine the manual
    # pages of the non-Postfix software to find out what options it wants.
    #
    # Many of the following services use the Postfix pipe(8) delivery
    # agent. See the pipe(8) man page for information about ${recipient}
    # and other message envelope options.
    # ====================================================================
    #
    # maildrop. See the Postfix MAILDROP_README file for details.
    # Also specify in main.cf: maildrop_destination_recipient_limit=1
    #
    maildrop unix - n n - - pipe
    flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
    #
    # ====================================================================
    #
    # Recent Cyrus versions can use the existing "lmtp" master.cf entry.
    #
    # Specify in cyrus.conf:
    # lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
    #
    # Specify in main.cf one or more of the following:
    # mailbox_transport = lmtp:inet:localhost
    # virtual_transport = lmtp:inet:localhost
    #
    # ====================================================================
    #
    # Cyrus 2.1.5 (Amos Gouaux)
    # Also specify in main.cf: cyrus_destination_recipient_limit=1
    #
    #cyrus unix - n n - - pipe
    # user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
    #
    # ====================================================================
    # Old example of delivery via Cyrus.
    #
    #old-cyrus unix - n n - - pipe
    # flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
    #
    # ====================================================================
    #
    # See the Postfix UUCP_README file for configuration details.
    #
    uucp unix - n n - - pipe
    flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
    #
    # Other external delivery methods.
    #
    ifmail unix - n n - - pipe
    flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
    bsmtp unix - n n - - pipe
    flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
    scalemail-backend unix - n n - 2 pipe
    flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
    mailman unix - n n - - pipe
    flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
    ${nexthop} ${user}

    dovecot unix - n n - - pipe
    flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
    spamassassin unix - n n - - pipe flags=R user=debian-spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

  23. Pour le main.cf

    A part la ligne inet_protocols, moi j'ai:

    inet_protocols = ipv4

    Pour le master.cf

    Chez moi les lignes:

    -o syslog_name=postfix/submission
    -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject

    sont toutes commentés

  24. image nachos

    Postfix Admin Setup Checker

    Error: Smarty template compile directory templates_c is not writable.
    Please make it writable.
    If you are using SELinux or AppArmor, you might need to adjust their setup to allow write access.
    Depends on: MySQL 4.1 - OK
    (change the database_type to 'mysqli' in config.inc.php if you want to use MySQL)
    Error: Can't connect to database
    Please edit the $CONF['database_*'] parameters in config.inc.php.

    DEBUG INFORMATION:
    MySQL 3.x / 4.0 functions not available! (php5-mysql installed?)
    database_type = 'mysql' in config.inc.php, are you using a different database?

  25. image youkizedog

    Bonjour, merci pour ce tuto... juste un truc qui m'a bloqué un moment :
    quand on crée mailuser avec son password (azerty dans l'exemple) ne pas créer de password avec un '#' dedans !
    car ça bloque
    "Warning: Configuration file /etc/dovecot/dovecot-sql.conf.ext line 144: Ambiguous '#' character in line"

  26. Merci pour l'info !
    J'ai ajouté la précision au tuto.

    cdlt

  27. image carapuce007

    Bonjour,

    Je ne reçois pas les emails et lors de l'envoie j'ai ceci : Erreur serveur : '454 4.7.1 <**********@free.fr>: Relay access denied'

    Mais j'arrive bien à me connecté pourtant via outlook :(

  28. Bonjour,

    qu'avez vous à la ligne "mydestination" du fichier "/etc/postfix/main.cf" ?

    essayez ceci:

    mydestination = localhost.info, localhost votre_domain.com

    cdlt

  29. image carapuce007

    Bonjour,

    Alors du coup j'ai cherché j'ai trouvé ça venait de mon main.cf du postfix que j'ai édité avant votre réponse mais petit soucis je n'arrive pas à envoyer de mail aux adresses free.fr comment faire ? Car gmail ça marche et j'arrive à recevoir de free par exemple

  30. image carapuce007

    Désolé du double poste mais pour dire aussi que ça vient de outlook qui n'a pas le protocole StartTls dans son soft ^^

    Et au passage dans /etc/dovecot/conf.d/20-lmtp.conf à quoi correspond votre email ? "admin@example.com" admin est un user soit je dois mettre tout mes users ou un alias ?

  31. image Vincent

    Bonjour,

    J'ai suivi ton tuto pour installer et configurer postfix et postfixadmin et je me retrouve coincé lors de la création de mon premier domaine. PostfixAdmin me dit "Domaine invalide plaquestick.com, et/ou non resolvable via les DNS".

    J'ai correctement appliquer le changement dans ma zone DNS en faisant pointer le MX records vers mon serveur.

    Est-ce que le fait de déclarer le même nom de domaine que le domaine de la machine peut avoir un impact, car cela marque avec plein d'autre domaines ? Postfix effectue des vérifications lors de l'ajout du nom de domaine?

    Merci de ton aide.

  32. Bonjour,

    qu'avez vous dans le fichier /etc/resolv.conf ?

  33. image Vincent

    Bonjour,

    J'ai les lignes suivantes dans /etc/resolv.conf

    nameserver 213.246.33.144
    nameserver 213.246.36.14
    nameserver 80.93.83.11
    nameserver 80.93.83.25


    Ce fichier sert à quoi ? C'est la première fois que je monte un serveur mail alors je patauge un peu sur certains points.

    Cordialement

  34. Ce fichier sert à déterminer quels serveurs DNS il faut utiliser pour votre serveur. (dans votre cas il semble bon)

    J'essaie de comprendre votre erreur, mais il est vrai qu'installer son serveur d'email n'est pas evident et moi aussi je me suis casser les dents de nombreuses fois.

    Grâce à ce tuto (qui vient de chez tictech à la base) j'y arrive à chaque fois. ^^

    Je cherche ce qui peut clocher, je vous répondrais dés que j'ai une piste.

    Aussi quel est le hostname (taper "hostname" dans une invite de commande), normalement chez vous cela devrait etre plaquestick.com.

    Pas sure que cela soit ça mais c'est mieux si le nom du serveur correspond au ndd.

    cdlt

  35. Qu'avez vous dans le fichier /etc/postfix/main.cf à la ligne "mydestination" ?

    Essayez de mettre :

    mydestination = localhost.info, localhost

    cdlt

  36. image Vincent

    J'ai changé la ligne mydestination mais rien de change. J'ai redémarré le service postfix après mais rien du tout.

    mon hostname est frhb18270ds en tapant hostsname sur mon serveur

    J'ai tout reconfiguré 2 fois déja.
    Tout se déroule normalement sauf pour renseigne le premier domaine en sachant que pour d'autres ça marche.

    Et quand je teste mon domaine dans mxlookUP il ne me sort pas d'erreurs.
    Je ne comprends vraiment pas.

    Mon serveur est un serveur dédié chez Ikoula et eux me disent que la configuration de leur coté est bonne. Je vais tombé dingue.

    En tout cas merci pour votre temps

  37. OK.

    1 essayer (a "mydestination)

    frhb18270ds localhost.plaquestick.com localhost plaquestick.com

    Redemarrage des services

    test

    2 reboot du serveur (si vous pouvez).

    Si toujours pas, qu'il y a t'il dans

    /var/log/mail.log
    /var/log/mail.warn
    /var/log/mail.err

    cdlt

  38. image Vincent

    rien dans les logs.

    redemarrage serveur: pas de changements

    changement mydestination: pas de changements

    Je desespere.

    cdlt

  39. hum ..

    J'avoue que pour ce soir je suis à cour d'idées également.^^

    Vous est il possible de changer le nom du serveur ?

    cdlt

  40. image Vincent

    C'est bon ca marche,

    J'ai juste changé mon hostname par mail.plaquestick.com.
    Je ne sais pas exactement si c'est ça mais bon ça fonctionne.
    En tout cas un grand merci pour votre aide et votre temps.

    cdlt

  41. Super !

    J'ai l'intime conviction que c'était ça ^^.

    Bien cordialement et bonne continuation.

  42. image Léo

    Bonjour, j'ai suivi ton tuto (qui au passage, est franchement bien écrit) avec attention.
    Mon premier problème (je sais pas si cela en est vraiment un), lorsque je tente de me connecter avec ThunderBird avec les paramètres que tu as indiqué dans ton tuto, il m'est impossible de relever les nouveaux mails, alors qu'avec RoundCube j'arrive à voir les mails entrants.

    Mon deuxième problème est que je n'arrive pas à envoyer de mail depuis RoundCube. Lorsque j'essaye d'envoyer un message, erreur: "Erreur SMTP (250) : échec lors de l'authentification." Je ne sais pas si le problème bien de la config du serveur mail ou de roundcube.

    /var/log/mail.log :

    Jul 26 19:52:44 vps619687 postfix/smtpd[17034]: connect from localhost[127.0.0.1]
    Jul 26 19:52:44 vps619687 postfix/smtpd[17034]: disconnect from localhost[127.0.0.1]



    Logs de roundcube :

    [26-Jul-2019 19:52:44 Europe/Berlin] ERROR: SMTP server does not support authentication ()
    [26-Jul-2019 19:52:44 +0200]: <2ap24qvd> SMTP Error: Authentication failure: SMTP server does not support authentication (Code: ) in /var/www/html/roundcube/program/lib/Roundcube/rcube.php on line 1665 (POST /?_task=mail&_unlock=loading1564163566279&_lang=fr_FR&_framed=1&_action=send)

    Cependant la config de roundcube me laissais perplexe:

    // For example %n = mail.domain.tld, %t = domain.tld
    $config['smtp_server'] = 'localhost';

    // SMTP port (default is 25; use 587 for STARTTLS or 465 for the
    // deprecated SSL over SMTP (aka SMTPS))
    $config['smtp_port'] = 25;

    // SMTP username (if required) if you use %u as the username Roundcube
    // will use the current username for login
    $config['smtp_user'] = '';

    // SMTP password (if required) if you use %p as the password Roundcube
    // will use the current user's password for login
    $config['smtp_pass'] = '';

    // SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use
    // best server supported one)
    $config['smtp_auth_type'] = '';


    Donc je l'ai modifié pour :

    $config['smtp_server'] = 'localhost';
    $config['smtp_port'] = 587;
    $config['smtp_user'] = '%u';
    $config['smtp_pass'] = '%p';
    $config['smtp_auth_type'] = 'LOGIN';

    J'ai toujours les même messages


    Troisième problème de temps à autre je reçois ces lignes dans /var/log/mail.log:

    connect from unknown[193.169.252.140]
    Jul 26 20:29:19 vps619687 postfix/smtpd[17667]: lost connection after AUTH from unknown[193.169.252.140]
    Jul 26 20:29:19 vps619687 postfix/smtpd[17667]: disconnect from unknown[193.169.252.140]

    Je ne sais pas à qui appartient cette ip: 193.169.252.140 elle est localisé en Pologne apparemment :|

    Ce problème, n'a (je crois) rien a voir avec ton tuto, mais j'aimerais avoir quelques avis avant que de régler les problèmes d'envois de mail. J'ai pas envie qu'un malins spam de mail avec mon serveur

    Voila, je sais pas si tu pourras m'aider :) en tous cas merci pour ce tuto et merci de m'avoir lu :D
    Bonne journée/soirée.

    Léo

Écrire un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec une *

Quelle est le premier caractère du mot 4y8rgm ? :