Postfix



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
Editez le fichier : /etc/postfix/main.cf
Et modifez 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émarer Postfix.


postfix reload
OU :

/etc/init.d/postfix reload


Vous pouvez allez jeter un oeil dans le fichier /etc/aliases (pas le même fichier sous toute les distribs, enfin cela dépent d'ou pointe par defaut la valeur de alias_maps dans le main.cf )
Attention:A chaque changement de fichier tel que /etc/aliases, vous devez regé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/)


Création des Tables Mysql


Vous aurez besoin de créer des Tables mysql renseignant toute les informations pour chaque utilisateur. Je vous propose de suivre cette structure : mailsql.sql

  • Une table `alias` correspondant au fichier /etc/aliases
  • Une table `transport` pour chaque domaine on utilise quel transport de courier (on mettra en général maildrop)
  • Une table `users` permettant d'avoir les informations utilisateur. On s'en servira pour le serveur IMAP
  • Une table `virtual` pour faire simplement de la redirection de mail

Maildrop



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


Editez maintenant le fichier authdaemonrc dans /etc/courier/ et rajouter à la ligne 'authmodulelist=' authmysql


vi /etc/courier/authdaemonrc

authmodulelist="authmysql authpam"


Editez 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.

Editez le fichier /etc/maildroprc afin d'avoir seulement la ligne :

DEFAULT="$HOME/"

Petit 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 default 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 courier 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'

Configuration Finale de Postfix


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'


Editez 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 recoivent 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 un petit postfix reload

Et maintenant ?


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: .
Je viens de m'apercevoir que l'on doit les rajouter dans le main.cf de postfix; je reglera ça rapidement pour passer par mysql plutot.

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.

Spamassassin et Mailfilter


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.
Il ne reste plus maintenant qu'a développer un petit script PHP pour gérer facilement les comptes mail.

Edit: Comme l'a dit Julien en Commentaire, un projet existe déjà pour gérer Postfix : http://sourceforge.net/projects/postfixadmin/


--

Quelques Liens qui m'ont aidés:


Doc Postfix en Francais : http://x.guimard.free.fr/postfix/

Doc Gentoo : http://www.gentoo.org/doc/en/virt-mail-howto.xml

Doc Maildrop: http://www.free-4ever.net/index.php/Mail:Configuration_maildrop