Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] centralisation des mails postfix/dovecot/dspam...
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu Mar 22, 2007 12:02 pm    Post subject: [HOWTO] centralisation des mails postfix/dovecot/dspam... Reply with quote

INTRODUCTION
Nous allons mettre en place une solution centralisés de gestion des mails personnels depuis plusieurs fournisseurs.
Le but est de rapatrier tous les mails en provenance de multiples sources, de le passer dans un filtre anti-spam et anti-virus, de les trier, de les mettre à disposition sur un serveur imap, et de pouvoir envoyer les mails en utilisant les serveurs smtp des officiels des fournisseurs avec authentification.

Enfin de faire du nettoyage automatique de l'arborescence imap.

Pour cela nous allons utiliser les outils suivants :

  • dovecot : net-mail/dovecot
  • dspam : mail-filter/dspam
  • clamav : app-antivirus/clamav
  • postfix : mail-mta/postfix
  • fetchmail : net-mail/fetchmail
  • imapfilter : mail-filter/imapfilter
  • plugin dpsam pour dovecot : à compiler à la main

POSTFIX

Tout d'abord, il faut installer postfix :
Code:
paludis -i postfix

ou
Code:
emerge postfix


Il faut s'assurer que postfix est bien compilé avec les options suivantes : ssl sasl.

Pour que postfix puisse faire du relay authentifié en fonction de l'adresse mail de l'envoyeur, il faut impérativement une utiliser une version 2.3 ou supérieure.

CONFIGURATION DE POSTFIX POUR LE RELAI
Pour le relai, il faut dans le main.cf (/etc/postfix/main.cf) de postfix ajouter les options suivantes :
Code:

sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp_passwords
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sender_dependent_authentication = yes
smtp_tls_per_site = hash:/etc/postfix/tls_per_site


le fichier /etc/postfix/sender_relay va permettre de mapper une adresse mail à un serveur smtp de la manière suivante :
Code:

user1@gmail.com smtp.gmail.com:587
user2@gmail.com smtp.gmail.com:587
user@free.fr smtp.free.fr
user@maboite.com smtp.maboite.com

pour finir ne pas oublier :
Code:
postmap /etc/postfix/sender_relay

Le fichier /etc/postfix/smtp_passwords va conserver les noms d'utilisateurs et mot de passer d'un compte smtp d'une adresse mail donnée de la manière suivante :
Code:

user1@gmail.com user:passwd
user2@gmail.com user:passwd
user@free.fr user:passwd
user@maboite.com user:passwd

pour finir ne pas oublier :
Code:
postmap /etc/postfix/smtp_passwords

Le fichier /etc/postfix/tls_per_site va permettre de définir si l'on doit utiliser une authentification de type tls ou non pour un serveur smtp donné :
Code:
smtp.gmail.com MUST
smtp.maboite.com MUST

pour finir ne pas oublier :
Code:
postmap /etc/postfix/tls_per_site


Pour le reste configurer postfix normalement, TLS ou pas, etc. La configuration si dessus fait que dès que postfix devra envoyer un mail depuis user1@gmail.com il le relayera au smtp de gmail par exemple.

DOVECOT
installer dovecot :
Code:
paludis -i dovecot

ou
Code:
emerge dovecot


Ne pas oublier le USEFLAG sieve pour permettre de filtrer les nouveaux mails

CONFIGURATION DE DOVECOT

Le fichier de configuration de dovecot est très simple, /etc/dovecot.conf, lisez le et configurer le selon vos besoins.
Pour activer le plugin de filtrage sieve, vérifier que vous avez bien les lignes suivante dans le fichier de configuration :
Code:

protocol lda {
 
  ....

  mail_plugins = cmusieve
  mail_plugin_dir = /usr/lib/dovecot/lda

  ....
}


DSPAM
Nous pouvons maintenant envoyer des mails, et stocker nos mails, Nous allons maintenant mettre en place un antispam, ici dspam car il est très efficace léger, et dispose d'une interface clamav, en plus il existe un plugin dovecot qui nous facilite la vie.
Code:
paludis -i dspam

ou
Code:
emerge dspam


N'oubliez pas le USEFLAG clamav pour l'antivirus
et en choisir un dans cela pour le support des données utilisateurs : mysql oracle postgres sqlite sqlite3 user-homedirs
Dans mon cas j'ai choisi user-homedirs car je ne vois pas l'intérêt d'avoir une base de donnée un seul utilisateur :)


CONFIGURATION DE DSPAM
Dans notre cas nous allons délivrer tous les mails y compris les spam (afin de pouvoir détecter les éventuelles erreurs : faux-positifs)
Donc s'assurer que dans /etc/dspam.conf on a bien l'option suivante :
Code:
Preference "spamAction=deliver"


DSPAM signe chaque message filtré afin de pour pouvoir faire un suivit pour l'apprentissage, cette signature nous la voulons uniquement dans les entêtes du mail donc :
Code:
Preference "signatureLocation=headers"


Nous voulons utiliser le LDA (Local Delivery Agent) par dovecot, donc :
Code:
TrustedDeliveryAgent  "/usr/libexec/dovecot/deliver -d %u"

et
Code:
UnTrustedDeliveryAgent  "/usr/libexec/dovecot/deliver -d %u"


Dans mon cas je souhaite recevoir tous les mails qui arrive au serveur, y compris ceux des autres user du système donc j'ai ramplacer %u par le nom de mon user

Et on active le support clamav :
Code:

ClamAVPort      3310
ClamAVHost      127.0.0.1
ClamAVResponse accept

CONFIGURATION DE POSTFIX POUR DSPAM
DSPAM peut s'interfacer de plusieurs manière avec postfix :
soit en tant que relay en faisant tourner dpsam en tant que serveur smtp, soit en ligne de commande, soit en tant que service LMTP, soit en tant que delivery agent

Dans notre cas, nous allons utiliser DSPAM en tant que LDA car c'est très simple.
dans main.cf
Code:
mailbox_command=/usr/bin/dspam --deliver=innocent -- -d %u


FETCHMAIL
Nos mails sont maintenant correctement relayés, stockés, et filtrés.

Il ne nous restent plus qu'a les recevoir :
Code:
paludis -i fetchmail

ou
Code:
emerge fetchmail

CONFIGURATION FETCHMAIL
Dans le répertoire de l'utilisateur qui executera fetchmail, éditer le fichier .fetchmailrc :
Code:
poll pop.free.fr protocol pop3 username "XXXXX" password "XXXXXXX"
poll mail.maboite.com protocol pop3 port 995 username "XXXXXXX" password "XXXXXXX" ssl
poll pop.gmail.com protocol pop3 port 995 username "XXXXXXX" password "XXXXXXX" ssl
poll pop.gmail.com protocol pop3 port 995 username "XXXXXXX" password "XXXXXXX" ssl

éditer la crontab pour l'exécuter toutes les 10 minutes par exemple
Code:

*/10 * * * * /usr/bin/fetchmail -s

DOVECOT-SIEVE
Pour filtrer les mails entrant et les répartir dans l'arborescence imap :
il suffit de rajouter des ligne dans le fichier $HOME/.dovecoe.sieve
Par exemple pour mettre tous les spam dans le répertoire "spam"
Code:

if header :contains "X-DSPAM-Result" "Spam" {

        fileinto "spam";
        stop;
}

Pour plus d'information sur la syntaxe sieve
http://www.bath.ac.uk/bucs/email/sieve.shtml
http://www.cmu.edu/computing/documentation/sieve/sieve.html
DOVECOT-DSPAM
Dovecot dispose d'un interface lui permettant de rajouter des plugins vous trouverez ici : http://johannes.sipsolutions.net/Projects/dovecot-dspam-integration un plugin permettant l'intégration de dovecot et dspam.

Ce plugin je l'ai légèrement modifier pour pouvoir définir manuellement le répertoire de spam ici : http://baptux.free.fr/libdspam.c

Pour l'installer il faut relancer la compilation de dovecot sans nettoyage des sources, ou le compiler à la main à côter.

Puis dans les sources de dovecot dans le répertoire src/plugins mettre le fichier libdspam.c
compiler :
Code:
gcc -fPIC -shared -Wall -I../ -I../lib -I../../ -I../lib-storage -I../lib-mail -I../lib-imap -I../imap -DHAVE_CONFIG_H -DDSPAM=\"/usr/bin/dspam\" -DSPAMFOLDER=\"spam\" libdspam.c -o lib_dspam.so


puis copier copier lib_dspam.so dans /usr/lib/dovecot/imap

Activer le plugin dans dovecot : dans dovecot.conf :
Code:

protocol imap {
...
  mail_plugins = dspam
  mail_plugin_dir = /usr/local/lib/dovecot/imap
...
}


Dorénavant quand vous enlèverez un mail du répertoire spam, dpsam l'apprendra comme "non spam" et si vous en mettez un, il l'apprendra comme spam.

IMAPFILTER
imapfilter est un utilistaire permettant de se connecter à un ou plusieurs compte imap et de faire des manipulation dessus.
Nous allons nous en servir pour faire du nettoyage automatique.
Code:
paludis -i imapfilter

ou
Code:
emerge imapfilter


Le fichier de configuration est un script en lua : $HOME/.imapfilter/config.lua
Pour nettoyer tous les spam vieux de 2 jours par exemple :
Code:
jour = {
        'before ' .. date_before(1),
}
results = match ( account1, "spam", jour)
delete (account1, "spam", results)

un ajout dans le cron et c'est automatique.

Plein de filtres peuvent être ainsi mis en place.
Back to top
View user's profile Send private message
geekounet
Bodhisattva
Bodhisattva


Joined: 11 Oct 2004
Posts: 3755
Location: Lyon, France

PostPosted: Thu Mar 22, 2007 12:32 pm    Post subject: Reply with quote

Il est possible aussi d'utiliser le SASL Dovecot pour l'authentification à Postfix aussi, ce qui permet de ne conserver qu'un seul mécanisme (PAM personnellement) :)
Il faut déjà compiler postfix avec les use sasl dovecot-sasl, et ensuite :
/etc/postfix/main.cf:
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

/etc/dovecot/dovecot.conf:
auth default {
  ...

  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }

  ...
  }
}

_________________
Google+ | Twitter
Back to top
View user's profile Send private message
zeuss1414
Guru
Guru


Joined: 23 Mar 2004
Posts: 490

PostPosted: Thu Mar 22, 2007 12:48 pm    Post subject: Reply with quote

Bon ben nikel se ptit tuto, Merci :wink:

J'utilise déja un certain nombre de ces outils (dovcot, fetchmail ...) donc je vais essayer tout ca à l'occaz, genre la semaine prochaine car la ca va être tendu.

Si tout marche bien j'essaierai d'ajouter un parti webmail (genre roundcube) que je trouve sympa, et si on pouvait rajouter une partie envoie de mail pour un domaine donnée ca serait un tuto complet pour quelqu'un qui veux se monter un serveur de messagerie. Et ca lui évitera de galérer comme nous tous pour faire un truc comme ca.
_________________
Portable : Macbok Pro 2,2Ghz Santa Rosa, 2G DDR2, 160G DD+160Go USB2 GeForce 8600GT 15" LED
Serveur : Athlon 2400+ 2Ghz 768MoDDR 120 Go geFoce 4MX Gentoo
Fixe : C2D E6300, 2G DDR2 pc 6400, 320Go+500Go USB2, geForce 7600GS, Antec P150 XP/Gentoo x86
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu Mar 22, 2007 1:13 pm    Post subject: Reply with quote

geekounet wrote:
Il est possible aussi d'utiliser le SASL Dovecot pour l'authentification à Postfix aussi, ce qui permet de ne conserver qu'un seul mécanisme (PAM personnellement) :)
Il faut déjà compiler postfix avec les use sasl dovecot-sasl, et ensuite :
/etc/postfix/main.cf:
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

/etc/dovecot/dovecot.conf:
auth default {
  ...

  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
    }

  ...
  }
}


Oui mais je n'ai pas mis d'authentification à mon postfix car il n'est pas ouvert de l'extérieur :)
En revanche ça m'a permis de comprendre pourquoi mon le sasl de dovecot de fonctionnait pas pour l'authentification sur les relais :) je vais essayer avec smtp_sasl_type = dovecot pour voir (ça fait une dépendance de moins si ça marche)
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu Mar 22, 2007 1:31 pm    Post subject: Reply with quote

Testé et rejeté.

Pour l'authentification vers les smtp externes genre gmail : il faut smtp_sasl_auth or smtp_sasl_type = dovecot n'est pas encore pris en compte pas postfix :(
Donc on conserve la dépendance cyrus pour le moment.

postfix ne connait pour le moment que smtpd_sasl_type = dovecot.

Ou alors je me suis loupé quelque part

EDIT : Bon en fait il s'agit d'un bug sur les ports de FreeBSD, je ne sais pas ce qu'il en est sous gentoo.

Quoi qu'il en soit le SASL dovecot ne fonctionne que pour le smtpd_sasl_type, il faut conserver cyrus pour le smtp_sasl_auth.
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Mon May 28, 2007 12:49 pm    Post subject: Reply with quote

A noter que fetchmail peut être remplacer allègrement par fdm (non encore présent sous forme d'ebuild) mais ça ne devrait pas être trop dur à faire.

fdm est très léger et très efficace, au niveau fonctionnalité il fait : fetchmail+procmail+mda. http://fdm.sourceforge.net/
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Mon Jun 25, 2007 12:50 am    Post subject: Reply with quote

Salut,


Merci pour ce tuto car quand on veut monter ce genre de conf on est bien heureux de trouver ce travail bien fait :wink: !

Je signal un soucis que j'ai eu avec la redirection vers gmail, j'ai du rajouter ds le fichier tls_per_site
Code:
smtp.gmail.com    MUST_NOPEERMATCH

car j'avais l'erreur suivante entre autre :
Code:
(Cannot start TLS: handshake failure)

_________________
Get Up and Go !


Last edited by man in the hill on Mon Jun 25, 2007 10:04 am; edited 1 time in total
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Mon Jun 25, 2007 8:39 am    Post subject: Reply with quote

Tiens c'est étonnant chez moi ça marche sans problèmes sans cette option (postfix 2.4.3) tu utilises qu'elle version ?
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Mon Jun 25, 2007 10:10 am    Post subject: Reply with quote

Bapt wrote:
Tiens c'est étonnant chez moi ça marche sans problèmes sans cette option (postfix 2.4.3) tu utilises qu'elle version ?

Salut,

J'utilise une version postfix-2.3.6 avec une gentoo profile server 2007 .
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Mon Jun 25, 2007 12:18 pm    Post subject: Reply with quote

Bah ça doit être lié à la version de postfix alors.
Back to top
View user's profile Send private message
olivier elmekki
n00b
n00b


Joined: 29 Jan 2006
Posts: 55

PostPosted: Thu Jan 17, 2008 2:53 pm    Post subject: Reply with quote

Cette solution me semble un peu excessive. Je m'explique : elle convient parfaitement si on désire envoyer des mails depuis différents serveurs smtp, mais cela implique de devoir définir manuellement, pour chaque mail, un sender, ou alors, cela prend sens dans un environnement multi-utilisateurs si on veut que chacun utilise un serveur smtp différent.

Néanmoins, je pense que la plupart des utilisateurs qui seront intéressés par ce sujet voudront centraliser leurs mails sur leur ordinateur personnel, comportant un seul utilisateur et ne nécessitant pas l'utilisation de plusieurs serveur smtp différents.

Dans ces conditions, c'est l'emploi de postfix qui me semble exagéré, je veux dire le fait d'installer un serveur mail aussi complet, pour ensuite le brider. Bien qu'il soit fait pour être plus facile à configurer que d'autres serveur mail, il reste complexe à administrer, et une erreur de configuration de la part d'un utilisateur mal renseigné peut vite amener à faire de sa machine un serveur de spam à son insu.

La solution alternative que je proposerai serai l'emploi de fetchmail + nbsmtp + clamav + maildrop. Il n'y a guère que la configuration de maildrop qui demandera une certaine attention (ce qui est inévitable pour un filtre de mail, puisqu'il faut lui définir des règles), mais une erreur de configuration, au moins, ne risquera pas de créer des trous de sécurité.

Voici un exemple de mise en place.

FETCHMAIL
------------

Deux choix :

1°) utiliser le script init.d et le fichier conf.d de gentoo

a) éditer /etc/conf.d/fetchmail pour définir l'intervalle de temps dans laquelle fetchmail est lancé
b) executer
Code:
rc-update add default fetchmail

c) placer la configuration dans /etc/fetchmailrc

Fetchmail se plaint de cette option, car il recommande de ne pas être lancé par root.

2°) configurer fetchmail pour être lancé par un utilisateur

a) définir le type d'appel
- soit on lance fetchmail en mode daemon (
Code:
fetchmail -d NBR_SECONDE
), dans ce cas, il faut faire lancer par l'utilisateur au démarrage, par exemple dans ~/.xinitrc
- soit on place une règle dans /etc/crontab qui appelle fetchmail régulièrement en tant qu'utilisateur. Par exemple, pour l'utilisateur USER :
Code:
*/3  *  * * *   USER    fetchmail -a
(toutes les 3 minutes)
b) Placer la configuration dans ~/.fetchmailrc

exemple de configuration :
Code:
poll pop.server.com protocol pop3
  user "NOM.PRENOM" there with password "PASSWORD"
  is "USER" here
  and wants mda "/usr/bin/maildrop"

poll imap.server2.com protocol imap
  user "SURNOM" there with password "PASSWORD2"
  is "USER" here
  and wants mda "/usr/bin/maildrop"


S'assurer que ce fichier n'est pas lisible par other, voir même par group, pour ne pas compromettre ses mots de passe.

nbsmtp
--------

placer la configuration dans ~/.nbsmtp

Code:
relayhost=smtp.server.com
fromaddr=NOM.PRENOM@server.com
domain=server.com
auth_mech=login
auth_user=NOM.PRENOM
auth_pass=PASSWORD


S'assurer que ce fichier n'est pas lisible par other, voir même par group, pour ne pas compromettre ses mots de passe.

clamav
--------

pas de configuration particulière

maildrop
---------

La configuration va dans /etc/maildroprc ou dans ~/.mailfilter (dans ce dernier cas, le fichier n'est lu que s'il a les permissions 600)

exemple :

Code:
DEFAULT="/home/USER/Mail/default"
MAILDIR="/home/USER/Mail/"

logfile "$MAILDIR/.maildrop.log"

log "----------------"
log ""

#utiliser clamdscan au lieu de clamscan si vous avez fait des configurations particulières dans /etc/clamd.conf
# (cela peut servir par exemple à envoyer un mail d'avertissement quand un virus est détecté)
`clamscan -`

if ( $RETURNCODE == 1 )
{
  log "mail vérolé!"
  to $MAILDIR/.viruses
}

if   (  /^X-Advertisement:.*/       \
   || /^X-Spam-Status: YES /       \
   || /^Message-ID:*<>/          \
        || /^From: "spammer\.biz"/         \
        || /<html>|<HTML>/:b           )
{
    exception {
        to $MAILDIR/.junk
    }
    log "Error while deliver to junk"
}


Ce fichier permet à la fois de filtrer les spams et d'appeler l'antivirus (et toute application de traitement des mails, d'ailleurs). Sa syntaxe est décrite dans maildropfilter(7).
Back to top
View user's profile Send private message
Shadow AOK
n00b
n00b


Joined: 26 Jun 2006
Posts: 35
Location: Lyon, France

PostPosted: Sun Oct 05, 2008 9:56 pm    Post subject: Reply with quote

J'ai un petit problème avec ce sympathique tuto que je déroule sur un serveur fraichement installé.

Dovecot ne veut plus démarrer depuis que j'ai renseigné le path pour le socket client.

Voici ce que j'ai dans mes logs :
Code:
Oct  5 23:40:36 rdv dovecot: Dovecot v1.1.1 starting up
Oct  5 23:40:36 rdv dovecot: auth-worker(default): mysql: Connected to localhost (srv_postfix)
Oct  5 23:40:36 rdv dovecot: Fatal: auth(default): Socket already exists: /var/spool/postfix/private/auth
Oct  5 23:40:36 rdv dovecot: Fatal: Auth process died too early - shutting down


J'utilise postfix 2.5.5 et Dovecot 1.1.1.
Que le fichier auth existe ou pas, que postfix ne soit déjà lancé ou non, l'erreur reste la même.

Voici les permissions du fichier auth :
Code:
srw-rw-r--  1 postfix postfix    0 oct  5 23:54 auth


Quelqu'un aurait une idée svp ?
Back to top
View user's profile Send private message
Shadow AOK
n00b
n00b


Joined: 26 Jun 2006
Posts: 35
Location: Lyon, France

PostPosted: Fri Nov 14, 2008 1:32 pm    Post subject: Reply with quote

J'ai trouvé la solution il y a quelques jours.
Il faut rajouter ceci dans le main.cf de postfix :
Code:
dovecot_destination_recipient_limit = 1
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum