Recent Changes - Search:

Accueil

OpenSSL

SyncML

Apache Portable Runtime

Libxml2

Net-snmp

CUrl

Boost

Perl

ZLib

Samba

VPN

Serveurs de messagerie

edit

Postfix/Postfix

PostFix est un excellent relais SMTP utilisé entre autres chez Free (le site Web: http://www.postfix.org/)

Pourquoi installer un relais de messagerie local ?

Dans mon cas, le problème venait de chez OVH qui, fin 2006, a rencontré de graves problèmes avec ses relais de messagerie ce qui a entraîné des délais de livraison des emails allant de quelques secondes à plusieurs jours (j'ai un record à quatre jours) et ceci pendant plusieurs semaines. L'utilisation des mails étant devenue critique pour mon client, l'hébergement local de sa messagerie était justifié bien que l'externalisation chez un autre prestataire aurait été une aussi bonne solution, mais le défit de maîtriser Postfix méritait bien d'y passer quelques longues soirées ! De plus, l'externalisation n'évitait pas l'aller/retour du mail entre le client et son hébergeur ce qui induit un délai dans la distribution des emails échangés entre collaborateurs.
J'ai donc installé un premier relais chez ce client, voici donc retracé mon expérience sur le sujet, suivra un autre sujet concernant la gestion des profils itinérants (qui ne le sont pas vraiement) avec MS Outlook.

La problématique

L'ancien serveur de messagerie mutualisé d'OVH fait un forward vers des boîtes emails hébergées sur un serveur SMTP local sous Windows dont le domaine est du type DynDns (l'IP est statique depuis qu'il est client Free, mais le nom de ce domaine est resté pour des raisons historiques).
La bascule devra se faire par modification de l'enregistrement MX du DNS.
Mon nouveau relais devait donc remplir trois missions :
- Accepter les mails à destination du domaine public (hebergee.com) comme le faisait OVH
- Continuer à accepter les mails à destination du domaine (mail.xxx.dyndns.com) à cause du délai de propagation du DNS comme le faisait le serveur Windows.
- Transférer tous les mails vers l'ancien serveur SMTP sous Windows devenu interne.

La compilation de Postfix

# make
# groupadd postfix
# groupadd postdrop
# useradd -G postfix -b /dev/null -s /bin/false postfix
# make install
# sh postfix-install
# touch /etc/aliases
# chmod u+x /etc/aliases

Ajout au fichier /etc/rc.local

postfix start

Mémento des commandes utiles

rechargement de la configuration
postfix reload
dernières lignes du journal d'activité
tail - 20 /var/log/maillog
création d'une table de hash (aliases.db)
makemap hash /etc/postfix/virtual < /etc/postfix/virtual

lecture du contenu d'une table de hashage
postmap -s hash:/etc/postfix/aliases

contenu de la queue d'envoi
mailq

suppression d'un élément de la queue de sortie
postsuper -d EDB5C142C0

depuis quelques temps smtp.free.fr bloque l'envoi de mails en nombre voici un exemple de ce message

# mailq↵
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------

  5B54DCC       451 Fri Nov  9 23:10:55  root@bacp.graille.net

(host smtp.free.fr[212.27.48.4] refused to talk to me: 421 smtp4-g19.free.fr Error: too many connections from 99.99.99.99)

                                         coat@grdvle.net
                                         miclalave@saodaas.com

pour relancer manuellement l'envoi faire
postqueue -f

un scénario d'envoi de mail en telnet
helo test
mail from: monadresse@mondomaine.tld
rcpt to: ladresse@hebergee.com
data
From: "un correspondant" <monadresse@mondomaine.tld>
To: "l'adresse" <ladresse@hebergee.com>
Subject: un sujet
un mail de test
.
quit

A noter que l'utilisation du To: dans la section data vous évitera de chercher pourquoi le destinataire du message s'appelle "To: undisclosed-recipients" ....

La configuration de postfix

Configurer le nouveau relais des mails entrant du domaine pour qu'il relaye vers l'ancien relais devenu interne.
Commençons par modifier l'adresse IP de l'ancien serveur SMTP Windows en lui donnant une adresse interne.
Modifions maintenant le nouveau relais pour qu'il le cherche pas l'adresse du domaine (devenu interne) en ajoutant cette ligne au fichier /etc/host :
192.168.2.252 mail.xxx.dyndns.com

et modifions le /etc/resolve.conf pour que le fichier host soit consulté avant une résolution DNS:
lookup file
nameserver 212.27.32.5
nameserver 212.27.53.252
La nouvelle passerelle renverra maintenant les emails du host mail.xxx.dyndns.com vers une adresse interne en lieu et place de l'adresse publique.

configuration de Postfix, (fichier /etc/postfix/main.cf)
relay_recipient_maps =
relay_domains = mail.xxx.dyndns.com
relayhost = [192.168.2.253]

et voilà les mails entrant pour le domaine @mail.xxx.dyndns.com sont redirigés vers le serveur Windows 192.168.2.253.
S'agissant d'un relais, la vérification de l'existance de la boite se fera sur le serveur pointé par la variable relayhost ce qui evitera la mise en place d'un serveur LDAP.

Deuxiéme phase, écriture des règles de redirection.
Le mieux a été pour moi de faire une translation du domaine des mails entrant de @hebergee.com en @mail.xxx.dyndns.com.
Voici la procédure :
ajouter dans /etc/postfix/main.cf
virtual_alias_domains = @hebergee.com
virtual_alias_maps = hash:/etc/postfix/virtual

créer un fichier /etc/postfix/virtual contenant :
social@hebergee.com pomme@mail.xxx.dyndns.com, poire@mail.xxx.dyndns.com
abuse@hebergee.com contact@ladministrateur.com
@hebergee.com @mail.xxx.dyndns.com

La première ligne correspond à une liste de diffusion,
la seconde au forward de la boite abuse utilisée pour vous prevenir que vous êtes blacklisté !
La dernière correspond au catch all du domaine.

compiler le fichier /etc/postfix/virtual au format BerkeleyDB avec la commande suivante :
makemap hash /etc/postfix/virtual < /etc/postfix/virtual
et pour finir un postfix reload et voilà le tour est joué !!

Traitement anti-spams

Si vous recevez plusieurs centaines de spams par jour, ajoutez ceci au fichier /etc/postfix/main.cf :

../..

smtpd_recipient_restrictions =
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
permit_mynetworks,
reject_unauth_destination,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
permit

l'hémoragie devrait se calmer.

Un lien utile pour vérifier si une IP est blacklistée http://www.robtex.com/rbls.html

Création d'une whitelist

Cette liste vous permettra de passer outre les réponses des RBL's sur la base d'une liste d'adresses précisées. En attendant que vos correspondant change d'ISP, vous pouvez forcer la réception de leurs emails en ajoutant la ligne en rouge à votre /etc/postfix/main.cf

../..

smtpd_recipient_restrictions =
check_sender_access hash:/etc/postfix/whitelist,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
permit_mynetworks,
reject_unauth_destination,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rhsbl_sender dsn.rfc-ignorant.org,
permit

../..

Reste à créer et alimenter le fichier, voici un exemple de fichier whitelist,

#makemap hash /etc/postfix/whitelist < /etc/postfix/whitelist
a.restaurant@wanadoo.fr OK
co@ip-france.com OK
csatr2e@wanadoo.fr OK
d.nouvon@nouveau-avocat.com OK
superspammer@hotpub.com REJECT

Il faudra regénérer le fichier whitelist.db après chaque modification par l'appel indiqué en entête du fichier. Vous remarquerez, au passage, que la même liste peut aussi servir de blacklist en utilisant le mot clef REJECT à la place de OK. La liste exhaustive des mots clefs est à l'adresse http://www.postfix.org/access.5.html.

Un script listant les expéditeurs de spams

Réguliérement il vous faudra mettre à jour votre whitelist suite aux différentes plaintes de vos correspondants n'arrivant pas à vous contacter. Voici un script PERL permettant de traiter le journal d'activité du serveur Postfix et d'en extraire les expéditeurs ayant été bloqués.

#!/usr/bin/perl -s

$iCount = 0;

if($#ARGV == -1) {
        $sMAIL = "[^>]+";
}
else{
        $sMAIL = $ARGV[0];
        print "spams refusés pour l'adresse ",$sMAIL,"\n";
}

while ($ligne = <STDIN>) {
if ($ligne =~ /(.{15}).*NOQUEUE.*from=<([^@]+@[^>]+)> to=<($sMAIL)/) {
        $iCount++;
        if($sMAIL eq "[^>]+")
        {
                printf("%4i %s %s->%s\n",$iCount,$1,$2,$3);
        }
        else
        {
                printf("%4i %s %s\n",$iCount,$1,$2);
        }
}
}

Pour obtenir l'ensemble des spammeurs de la journée,

$ more /var/log/maillog | postfixSpam
1 Jan 14 00:06:18 Oreirodyj@cedevices.com->ccoupain@domaine.com
2 Jan 14 00:34:43 wzaimod@rima-tde.net->ccoupain@domaine.com
3 Jan 14 00:36:00 ghostface@gfmsi.com->oostyn@domaine.com
4 Jan 14 00:37:16 boone@goodhew.ca->oostyn@domaine.com
...

more /var/log/maillog* pour explorer toutes les journées de logs disponibles.

Pour obtenir les expéditeurs d'une adresse précise,

$ more /var/log/maillog | postfixSpam ccoupain@domaine.com
spams refusés pour l'adresse ccoupain@domaine.com
1 Jan 14 00:06:18 Oreirodyj@cedevices.com
2 Jan 14 00:34:43 wzaimod@rima-tde.net
3 Jan 14 03:16:18 ryelqlesxp@blackplanet.com
...

Un autre analyseur de log postfix est dans la rubrique exemple de Boost.

Edit - History - Print - Recent Changes - Search
Page last modified on October 03, 2009, at 04:08 PM