Cet article est un aide mémoire des étapes pour l'installation d'un Serveur mail (ici Postfix) avec un ajout simplifié d'utilisateur à travers une base mysql. J'ai consulté des fichiers de configurations d'un peu partout pour aboutir à ce que je voulais, j'ai donc trouvé utile de tout rassembler ici.
J'utilise Postfix(Mail Transport Agent) , Maildrop (Mail Delivery Agent), Dovecot (Serveur IMAP) et Mysql pour la gestion des Adresses, domaine et redirection mail. Je considère pour la suite que vous avez un serveur mysql qui tourne et qui est fonctionnel.
Vous aurez Besoin d'installer Postfix et Postfix-mysql Sous Debian :
apt-get install postfix postfix-mysql
Rendez-vous ensuite dans la configuration basique de Postfix Éditez le fichier : /etc/postfix/main.cf Et modifiez les valeurs comme suit :
myhostname = {VOTRE HOSTNAME}
mydestination = {HOSTNAME}, localhost.localdomain, localhost
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
Après chaque changement sur main.cf, il faut redémarrer Postfix.
postfix reload
OU :
/etc/init.d/postfix reload
Vous pouvez allez jeter un œil dans le fichier /etc/aliases (pas le même fichier sous toute les distributions, enfin cela dépent d'où pointe par défaut la valeur de alias_maps dans le main.cf )
Attention: A chaque changement de fichier tel que /etc/aliases, vous devez régénérer le fichier de db :
postmap /etc/aliases
Normalement, vous en avez fini avec la configuration basique de Postfix et vous devriez pouvoir recevoir des mails pour les utilisateurs possédant des comptes UNIX sur le serveur. (Si ce n'est pas le cas, mieux vaut résoudre le problème avant de passer à la suite. Petit coup d'oeil dans /var/log/mail.log/ )
Vous aurez besoin de créer des Tables mysql renseignant toute les informations pour chaque utilisateur. Je vous propose de suivre cette structure : http://blog.beneth.fr/upload/mailsql.sql
Il vous faut maintenant installer maildrop pour le transport du courrier. J'utiliserai ici le paquet courier-maildrop ( Il vous faut également l'authentification par mysql)
apt-get install courier-maildrop courier-authlib-mysql
Éditez maintenant le fichier authdaemonrc dans /etc/courier/ et rajouter à la ligne 'authmodulelist=' authmysql
vi /etc/courier/authdaemonrc authmodulelist="authmysql authpam"
Éditez maintenant le fichier authmysqlrc et renseignez-y les informations d'accès à votre base de donnée (je vous conseille fortement de créer un utilisateur qui a accès seulement à la Base mailsql) Voici quelques paramètres à changer :
MYSQL_SERVER localhost
MYSQL_USERNAME {votreLogin}
MYSQL_PASSWORD {votrePass}
MYSQL_DATABASE mailsql
MYSQL_USER_TABLE users
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD maildir
MYSQL_NAME_FIELD name
Les autres configurations doivent être Commentées.
J'ai ici été confronté à un problème. J'ai mis maildir sur le champ MYSQL_HOME_FIELD car c'est la seul solution que j'ai trouvé pour obtenir la variable $HOME à mettre dans le /etc/maildroprc [Cela permet d'avoir la Maildir dans le bon répertoire].Il faudrait trouver en fait la variable correspondant à la ligne MYSQL_MAILDIR_FIELD si quelqu'un à une solution je serai très heureux qu'il m'en fasse part, ça simplifierait grandement les règles de filtrages par la suite.
Éditez le fichier /etc/maildroprc afin d'avoir seulement la ligne :
DEFAULT="$HOME/"
Up: Suite aux commentaires de Seb, vous aurez besoin de vérifier qu'il existe un lien symbolique dans /etc/courier/ pointant vers /etc/maildroprc. (Par défaut sous debian, apparemment ce n'est pas le cas sous Ubuntu Server.)
Suite de mon problème : j'aimerai ici pouvoir définir deux variables la DEFAULT pour le transport du courrier au bon endroit et une autre avec un home qui soit le même pour tout un groupe d'utilisateur afin de créer des règles de filtrages de mail pour tout le monde. Si quelqu'un à une solution merci de poster en commentaire. Serveur IMAP (Dovecot)
Avant d'installer dovecot, on va créer un nouvel utilisateur système qui gérera les boites aux lettres virtuelles.
adduser --disabled-login --disabled-password --uid 5000 --gid 5000 vmail
On peut maintenant installer Dovecot
apt-get install dovecot-imapd
Il faut configurer Dovecot pour passer par Mysql vous devriez avoir un fichier de configuration de cette forme la : /etc/dovecot/dovecot.conf
protocols = imap imaps
listen = *
log_timestamp = “%Y-%m-%d %H:%M:%S”
mail_extra_groups = vmail
ssl_disable = yes
auth_verbose = yes
mail_debug = yes
auth_debug_passwords = yes
base_dir = /var/run/dovecot/
default_mail_env = maildir:/home/vmail/%d/%n
first_valid_uid = 1029
disable_plaintext_auth = no
protocol imap {
mail_plugins = quota imap_quota
}
auth default {
mechanisms = plain login digest-md5 cram-md5
passdb sql {
args=/etc/dovecot/dovecot-sql.conf
#args =
}
userdb sql {
args= /etc/dovecot/dovecot-sql.conf
}
user = root
count = 2
}
plugin {
quota = maildir:storage=1000000
}
ps : La ligne Quota permet de définir la taille des boites mails. Ici, j'autorise 1Go de Stockage.
Vous devez maintenant configurer le fichier de conf pour accéder à mysql : /etc/dovecot/dovecot-sql.conf (Les lignes ci-dessous sont celles à laisser et à configurer, les autres sont à commenter)
driver = mysql
connect = host=localhost dbname=mailsql user={votreLogin} password={votrePassword}
default_pass_scheme = SHA
password_query = SELECT password FROM users WHERE email = '%u' AND postfix = 'y'
user_query = SELECT uid, gid FROM users WHERE email = '%u'
Il faudra que vous créez 5 fichiers dans /etc/postfix/ qui donneront les requêtes sql à effectuer.
Fichier: /etc/postfix/mysql-aliases.cf
hosts = 127.0.0.1
user = {votre_Login}
password = {Votre_Password}
dbname = mailsql
query = SELECT destination FROM alias WHERE alias='%s'
Fichier: /etc/postfix/mysql-relocated.cf
hosts = 127.0.0.1
user = {Votre Login}
password = {Votre Password}
dbname = mailsql
query = SELECT destination FROM relocated WHERE email='%s'
Fichier: /etc/postfix/mysql-transport.cf
hosts = 127.0.0.1
user = {votre login}
password = {Votre Password}
dbname = mailsql
query = SELECT destination FROM transport WHERE domain='%d'
Fichier: /etc/postfix/mysql-virtual.cf
hosts = 127.0.0.1
user = {votre login}
password = {votre password}
dbname = mailsql
query = SELECT destination FROM virtual WHERE email='%s'
Fichier: /etc/postfix/mysql-virtual-maps.cf
hosts = 127.0.0.1
user = {votre login}
password = {votre password}
dbname = mailsql
query = SELECT maildir FROM users WHERE email='%s' AND postfix='y'
Éditez maintenant le fichier de configuration de Postfix : /etc/postfix/main.cf Vous devriez avoir un fichier de configuration qui ressemble a celui ci-dessous:
myhostname = {Votre Hostname}
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf
myorigin = /etc/mailname
mydestination = {votre Hostname}, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname
maildrop_destination_recipient_limit = 1
virtual_mailbox_domains = {Liste de vos domaines qui reçoivent du courrier, exemple j'ai @exemple.com et @exemple.net je met : exemple.com exemple.net}
transport_maps = mysql:/etc/postfix/mysql-transport.cf
virtual_transport = $transport_maps
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
virtual_mailbox_base = $virtual_mailbox_maps
Pour plus de lisibilité, vous pouvez récupérer mon main.cf ici : http://blog.beneth.fr/public/postfix/main.cf
Vous en avez normalement Fini avec Postfix, N'oubliez pas de Reloader Postfix !
Et bien, vous pouvez ajouter des utilisateurs depuis votre base de donnée. Vous pouvez ajouter des alias: Rappel: j'envoie le courrier à postmaster qui est alias de root qui est alias de l'utilisateur beneth. L'utilisateur beneth recevra donc le courier de postmaster. Vous devez ajouter vos domaines dans la table transport sous la forme : domaine: @domaine.com et Destination: maildrop: .
La partie la plus interressante est la possibilité de créer des utilisateurs virtuels dans la table users. Vous devez dans le champ email renseigner l'adresse email complète de l'utilisateur user@domaine.net. Cela est Important car comme vous avez pu le voir on peut ainsi séparer les emails des différents domaines. L'adresse email complete est %u, le domaine est %d et le nom est %n (pour dovecot tout du moins; c'est un peu différent pour postfix, vous avez du voir les %s…)
Si votre utilisateur vmail créé avec l'uid 5000 et gid 5000, vous aurez toujours à mettre ces valeurs dans la table users (c'est les valeurs par défaut que je vous ai mis dans le fichier de structure sql) Enfin, vous devez spécifier le chemin vers la Maildir. Le serveur IMAP configuré comme ci-dessus voudra un chemin de la forme /home/vmail/DOMAINE(%d)/USER(%n) Le dernier champ Postfix doit être laissé à 'y' pour autoriser la connection de l'utilisateur. Cela est pratique pour désactiver temporairement un utilisateur.
Pour aller Plus loin …. Je vous conseille de télécharger Roundcube un exellent webmail qui vous permettra de gérer facilement vos mails et de la même façon de n'importe quel ordinateur.
Vous avez besoin d'installer Spamc (le démon de Spamassassin) et mailfilter pour filtrer vos mails
apt-get install spamc spamassassin mailfilter
Quelque précision sur la Maildir: vos dossier doivent être précédé d'un point. Je vous conseille de les creer avec Roundcube, et par exemple si vous voulez qu'un dossier apparaisse comme un sous dossier de la INBOX , vous créer un dossier dans roundcube qui s'appelle INBOX.votredossier, et ensuite vous créez vos règles de filtrage de mail. Le fichier de filtrage est à mettre à la racine de la Maildir sous le nom .mailfilter . Voici mon fichier pour vous aider un peu sur la syntaxe :
xfilter "/usr/bin/spamc" if (/^X-Spam-Flag:.*YES/) to "$DEFAULT/.Junk/" if (/^To:.*debian-user-french\@lists.debian.org.*$/) to "$DEFAULT/.INBOX.debian.user-french/" if (/^TO:.*debian-announce\@lists.debian.org.*$/) to "$DEFAULT/.INBOX.debian.announce/" if (/^TO:.*debian-security-announce\@lists.debian.org.*$/) to "$DEFAULT/.INBOX.debian.security/" if (/^TO:.*debian-news-french\@lists.debian.org.*$/) to "DEFAULT/.INBOX.debian.news/"
Voilà, j'espère vous avoir aider et avoir été assez clair. S'il y a des points obscures, demandez moi, je pourrais peut-être vous aider.
Si certain point ne marche pas, prenez le réflexe de consulter vos fichier de log ( /var/log/mail.log ), en général le problème est bien indiqué.
Et si vous trouvez qu'il y a des problèmes (de sécurité ou autre) dites le moi !
J'utilise ce système depuis presque un mois, et j'en suis très satisfait. Je consulte maintenant mes mails avec Roundcube; Seul petit hic c'est un petit peu lent mais on s'y habitue.
Edit: Comme l'a dit Julien en Commentaire, un projet existe déjà pour gérer Postfix : http://sourceforge.net/projects/postfixadmin/
Étant maintenant possesseur d'un laptop, je consulte mes mails via evolution. Cependant, le port imap et imaps n'est pas ouvert sur l'interface public pour des raisons de sécurité. C'est pourquoi j'ai mis en place un tunnel VPN avec lequel j'autorise l'accés aux port IMAP et IMAPS et SMTP afin de pouvoir consulter mes mails en local chez moi. Vous devrez pour cela ajouter dans le main.cf de votre postfix à la ligne : mynetworks = 127.0.0.0/8 l'adresse ip de votre réseau de confiance VPN. Imaginons que ce soit des adresses en 10.8.0.0 vous rajouterez :
mynetworks = 127.0.0.0/8 10.8.0.0/24
Ne rajoutez pas l'adresse public, sinon vous risquerez de faire openrelay avec votre serveur mail et avoir des problèmes de Spam !
Si vous ne pouvez faire de tunnel VPN, vous devriez sûrement jetez un œil sur les possibilités offerte par sasl pour pouvoir envoyer des mails seulement si on est authentifié.
Quelques Liens qui m'ont aidés: