View previous topic :: View next topic |
Author |
Message |
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Thu Mar 22, 2007 12:02 pm Post subject: [HOWTO] centralisation des mails postfix/dovecot/dspam... |
|
|
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 :
ou
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 :
ou
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.
ou
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
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
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 |
|
|
geekounet Bodhisattva
Joined: 11 Oct 2004 Posts: 3772
|
Posted: Thu Mar 22, 2007 12:32 pm Post subject: |
|
|
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
}
...
}
} |
|
|
Back to top |
|
|
zeuss1414 Guru
Joined: 23 Mar 2004 Posts: 490
|
Posted: Thu Mar 22, 2007 12:48 pm Post subject: |
|
|
Bon ben nikel se ptit tuto, Merci
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 |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Thu Mar 22, 2007 1:13 pm Post subject: |
|
|
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 |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Thu Mar 22, 2007 1:31 pm Post subject: |
|
|
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 |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Mon May 28, 2007 12:49 pm Post subject: |
|
|
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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Mon Jun 25, 2007 12:50 am Post subject: |
|
|
Salut,
Merci pour ce tuto car quand on veut monter ce genre de conf on est bien heureux de trouver ce travail bien fait !
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 |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Mon Jun 25, 2007 8:39 am Post subject: |
|
|
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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Mon Jun 25, 2007 10:10 am Post subject: |
|
|
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 |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Mon Jun 25, 2007 12:18 pm Post subject: |
|
|
Bah ça doit être lié à la version de postfix alors. |
|
Back to top |
|
|
olivier elmekki n00b
Joined: 29 Jan 2006 Posts: 55
|
Posted: Thu Jan 17, 2008 2:53 pm Post subject: |
|
|
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 |
|
|
Shadow AOK n00b
Joined: 26 Jun 2006 Posts: 48 Location: Lyon, France
|
Posted: Sun Oct 05, 2008 9:56 pm Post subject: |
|
|
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 |
|
|
Shadow AOK n00b
Joined: 26 Jun 2006 Posts: 48 Location: Lyon, France
|
Posted: Fri Nov 14, 2008 1:32 pm Post subject: |
|
|
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 |
|
|
|
|
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
|
|