Archives pour la catégorie ‘Messagerie’

Exim : loguer le sujet des mails

Suite à mon article pour Postfix, voici la méthode pour ajouter le sujet des mails dans les logs d’Exim. L’option suivante est à ajouter dans votre fichier de configuration :

log_selector = +subject

Postfix : loguer le sujet des mails

Un serveur mail produit un ou plusieurs journaux détaillés de l’ensemble de ses traitements. Il est pourtant difficile de retrouver la trace d’un envoi de mail, si bien qu’on regrette que le sujet n’y soit pas enregistré.

Pour y remédier sous Postfix, il faut ajouter l’option de configuration suivante à votre fichier main.cf :

header_checks = regexp:/etc/postfix/header_checks

et créer le fichier header_checks, ici dans le répertoire /etc/postfix, avec ce contenu :

/^Subject:/ WARN

Une fois le serveur SMTP redémarré, le journal enregistre le sujet des mails :

Apr 16 01:29:12 mail postfix/smtpd[66160]: setting up TLS connection from ANancy-156-1-12-239.w83-203.abo.wanadoo.fr[83.203.135.239]
Apr 16 01:29:12 mail postfix/smtpd[66160]: Anonymous TLS connection established from ANancy-156-1-12-239.w83-203.abo.wanadoo.fr[83.203.135.239]: TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)
Apr 16 01:29:13 mail postfix/smtpd[66160]: 07CE52AA2085: client=ANancy-156-1-12-239.w83-203.abo.wanadoo.fr[83.203.135.239], sasl_method=PLAIN, sasl_username=bhuisgen@hbis.fr
Apr 16 01:29:13 mail postfix/cleanup[66165]: 07CE52AA2085: message-id=<4BC7A148.8070204@hbis.fr>
Apr 16 01:29:13 mail postfix/cleanup[66165]: 07CE52AA2085: warning: header Subject: test header check from ANancy-156-1-12-239.w83-203.abo.wanadoo.fr[83.203.135.239]; from= to= proto=ESMTP helo=
Apr 16 01:29:13 mail postfix/qmgr[66156]: 07CE52AA2085: from=, size=1527, nrcpt=1 (queue active)
Apr 16 01:29:13 mail dovecot: deliver(bhuisgen@hbis.fr): sieve: msgid=<4BC7A148.8070204@hbis.fr>: stored mail into mailbox 'INBOX'
Apr 16 01:29:13 mail postfix/pipe[66166]: 07CE52AA2085: to=, relay=dovecot, delay=0.25, delays=0.23/0/0/0.01, dsn=2.0.0, status=sent (delivered via dovecot service)
Apr 16 01:29:13 mail postfix/qmgr[66156]: 07CE52AA2085: removed

Amavis : autoriser les archives protégées par mot de passe

Par défaut, Amavis vérifie les extensions des pièces jointes aux messages électroniques filtrés. Les fichiers binaires sont bloqués tout comme les extensions de fichiers Windows sensibles. Les archives de fichiers sont également analysées et bannies si un des fichiers contient ces extensions.

Pour bypasser cette analyse, la pratique courante est d’archiver les fichiers et de protéger l’archive par un mot de passe. Toutefois, la configuration d’Amavis doit être adaptée en y insérant un test en ligne 5 :

$banned_filename_re = new_RE(
### BLOCKED ANYWHERE
# qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components
# Allow if it is or contains any undecipherable components:
[ qr'^UNDECIPHERABLE$'=> 0 ],
qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary

Les utilisateurs de votre messagerie pourront alors recevoir et envoyer des messages avec des archives protégées contenant des fichiers sensibles.

Exim : désactiver les requêtes IDENT

Exim réalise par défaut des requêtes IDENT, correspondant à des connexions sortantes vers le port 113 des hôtes, afin de les identifier.  N’étant pas nécessaires d’un point de vue sécurité, ces requêtes ralentissent le traitement de chaque message. Pour y remédier, il est possible de les désactiver en ajoutant à votre fichier de configuration l’option suivante :

rfc1413_query_timeout = 0s

Le traitement des messages n’est donc plus ralenti inutilement.

Messagerie : exemple de filtre sieve

Voici un exemple de filtre sieve. Il inclut le filtre global spam.sieve ainsi que le filtre personnel vacation.sieve (dont la ligne sera à décommenter pour être actif). Il y a quelques règles pour flager les mails (TODO, monitoring, etc), les classer (cron, mailings) et les marquer automatiquement comme lus.

require "fileinto";
require "imap4flags";
require "include";
require "regex";

include :global "spam.sieve";
#include :personal "vacation.sieve";

# important
if anyof (
   address "from" "alert@hbis.fr",
   header :regex ["subject"][".*security alert.*"]) {
   addflag "$label1"; # important
}

# todo
if header :regex ["subject"] [".*TODO.*"] {
   addflag "$label4"; # todo
}

# mailings
if exists "List-Id" {
   fileinto "INBOX.mailings";
}

# backup
if header :regex ["subject"] [
   ".*backup.*"] {
   fileinto "INBOX.admin.backup";
}

# cron
if exists "X-Cron-Env" {
 fileinto "INBOX.admin.cron";
}

# periodic
if header :regex ["subject"] [
                    ".* security run output",
                    ".* monthly run output",
                    ".* daily run output",
                    ".* weekly run output"] {
 fileinto "INBOX.admin.periodic";
}

# awstats
if header :regex ["subject"] [
                    "awstats report"] {
 fileinto "INBOX.admin.awstats";
 setflag "\\seen";
}

Le script ci-dessous est un exemple de répondeur automatique, dont les notifications sont limitées à une seule notification par jour (pour un même expéditeur) :

require "vacation";

vacation
   :days 1
   :subject "Out of office"
   "I'm currently out of office.";

N’oubliez pas que les options disponibles dépendent de l’implémentation et des extensions de votre serveur SIEVE.

Thunderbird : afficher votre quota mail

Depuis sa version 3, Thunderbird ne nécessite plus d’extension pour afficher l’état d’occupation de votre de espace de stockage mail. Par défaut, il s’affiche au moment où 75 % du quota est atteint.

Pour l’afficher constamment, vous devez modifier sa configuration :
- dans la boîte de dialogue des options / préférences de votre client, sélectionnez l’onglet ‘Avancé’ puis ‘Général’.
- cliquez sur le bouton ‘Editeur de configuration’.
- saisissez ‘quota’ dans le filtre d’affichage.
- modifiez la variable mail.quota.mainwindow_threshold.show en fixant sa valeur à 0.

- Redémarrez votre client mail et la barre d’état affichera le statut de votre quota.

FreeBSD : un MTA pratique pour les jails

Pour chaque jail, il est nécessaire de recevoir les mails (cron, periodic, etc…). Afin de préserver au mieux les ressources et éviter le recours à un vrai relais SMTP (sendmail, postfix ou autre), un MTA idéal est ssmtp (Simple SMTP Agent). Il permet de relayer tous les mails vers un SMTP, ceci par un contournement de la commande sendmail. Donc pas de démon et c’est tant mieux.

Pour l’installer :

# cd /usr/ports/mail/ssmtp
# make install
# make replace

La dernière commande va remplacer la commande sendmail par celle de ssmtp.

Au niveau de la configuration, il y a deux fichiers :

# mv /usr/local/etc/ssmtp/ssmtp.conf.sample /usr/local/etc/ssmtp/ssmtp.conf
# mv /usr/local/etc/ssmtp/revaliases.sample /usr/local/etc/ssmtp/revaliases

Pour ssmtp.conf, il faut veiller aux options suivantes :

mailhub=172.16.0.3:25
rewriteDomain=hbis.fr

La première permet d’indiquer le serveur SMTP vers qui relayer les envois de mail. Dans mon cas, c’est l’IP de ma jail SMTP. Un serveur SMTP externe peut bien sûr être utilisé  La seconde option permet de spécifier le domaine des adresses d’envoi s’il n’est pas présent,  ce qui est le cas des comptes systèmes, sous peine d’avoir un refus d’envoi.

Le second fichier revaliases permet de convertir les adresses d’envoi, bref configurer des alias, mais aussi préciser le SMTP de destination pour un mail sender donné.

Pour désactiver le démon sendmail de votre jail, n’oubliez pas de corriger votre fichier /etc/rc.conf :

sendmail_enable="NONE"

Et pour virer le nom d’utilisateur Charlie des mails envoyés par le compte root :

# pw user mod root -c ''

Postfix : virtual alias lookup problem

Un problème courant sur les serveurs SMTP Postfix avec gestion virtuelle des utilisateurs avec backend MySQL, concerne la présence de nombreux warnings dans le log comme ceci :

Feb  5 03:02:19 srv07 postfix/cleanup[22193]: warning: 7C6E95117E: virtual_alias_maps map lookup problem for user@domain.fr

Pour le corriger, il suffit de corriger la requête SQL des alias mail :

query = SELECT goto FROM alias WHERE address=CONVERT('%s' USING latin1) AND active = '1

SpamAssasin : bug 2010

Les versions de SpamAssassin antérieures à la version 3.2.5 possèdent une règle de filtrage qui marque par défaut tous les messages datés entre 2010 et 2099 comme spam. L’expression régulière fautive est la suivante :

header FH_DATE_PAST_20XX Date =~ /20[1-9][0-9]/ [if-unset: 2006]

De nombreux sites relayent ce problème sans pour autant apporter les solutions possibles et encore moins souligner que les règles de filtrage doivent être mises à jour quotidiennement. A moins d’avoir un souci au niveau de la mise à jour des règles, ce bug aurait donc dû être écarté.

Les solutions possibles pour corriger le bug sont les suivantes, par ordre croissant d’efficacité :

  • désactiver la règle de filtrage, en ajoutant dans le fichier de configuration local.cf :
# bug 2010 spamassassin
score FH_DATE_PAST_20XX 0.0
  • corriger manuellement la regex :
header FH_DATE_PAST_20XX Date =~ /20[1-9][0-9]/ [if-unset: 2006]

par :

header FH_DATE_PAST_20XX Date =~ /20[2-9][0-9]/ [if-unset: 2006]

Pour trouver le fichier à modifier :

# pwd
/var/lib/spamassassin/3.002001/updates_spamassassin_org
# grep -R FH_DATE_PAST_20XX *
updates_spamassassin_org/50_scores.cf:score FH_DATE_PAST_20XX 2.075 3.384 3.554 3.188 # n=2
updates_spamassassin_org/72_active.cf:##{ FH_DATE_PAST_20XX
updates_spamassassin_org/72_active.cf:header   FH_DATE_PAST_20XX Date =~ /20[1-9][0-9]/ [if-unset: 2006]
updates_spamassassin_org/72_active.cf:describe FH_DATE_PAST_20XX The date is grossly in the future.
updates_spamassassin_org/72_active.cf:##} FH_DATE_PAST_20XX

Toutefois, il faudra prendre rendez-vous pour la corriger à nouveau en 2020 … d’où la dernière solution.
mettre à jour vos règles de filtrage et l’automatiser quotidiennement par une tâche cron (la solution la plus efficace) :

# /usr/bin/sa-update -D channel,dns
[3124] dbg: dns: is Net::DNS::Resolver available? yes
[3124] dbg: dns: Net::DNS version: 0.66
[3124] dbg: channel: attempting channel updates.spamassassin.org
[3124] dbg: channel: update directory /var/lib/spamassassin/3.002001/updates_spamassassin_org
[3124] dbg: channel: channel cf file /var/lib/spamassassin/3.002001/updates_spamassassin_org.cf
[3124] dbg: channel: channel pre file /var/lib/spamassassin/3.002001/updates_spamassassin_org.pre
[3124] dbg: channel: metadata version = 730418
[3124] dbg: dns: 1.2.3.updates.spamassassin.org => 895075, parsed as 895075
[3124] dbg: channel: preparing temp directory for new channel
[3124] dbg: dns: is Net::DNS::Resolver available? yes
[3124] dbg: dns: Net::DNS version: 0.66
[3124] dbg: channel: reading MIRRORED.BY file
[3124] dbg: channel: found mirror http://daryl.dostech.ca/sa-update/asf/ weight=5
[3124] dbg: channel: found mirror http://www.sa-update.pccc.com/ weight=5
[3124] dbg: channel: selected mirror http://daryl.dostech.ca/ sa-update/asf
[3124] dbg: channel: populating temp content file
gpg: WARNING: unsafe ownership on homedir `/etc/mail/spamassassin/sa-update-keys'
[3124] dbg: channel: file verification passed, testing update
[3124] dbg: channel: extracting archive
[3124] dbg: dns: is Net::DNS::Resolver available? yes
[3124] dbg: dns: Net::DNS version: 0.66
[3124] dbg: channel: lint check succeeded, extracting archive to /var/lib/spamassassin/3.00200/updates_spamassassin_org...
[3124] dbg: channel: point of no return for existing /var/lib/spamassassin/3.00200/updates_spamassassin_org
[3124] dbg: channel: creating MIRRORED.BY file
[3124] dbg: channel: creating update cf/pre files
[...]
[3124] dbg: channel: adding 72_active.cf
[...]
[3124] dbg: channel: update complete

Si la mise à jour est effective, la regex est corrigée automatiquement :

# pwd
/var/lib/spamassassin/3.002001/updates_spamassassin_org
# grep -R FH_DATE_PAST_20XX *
50_scores.cf:score FH_DATE_PAST_20XX 2.075 3.384 3.554 3.188 # n=2
72_active.cf:##{ FH_DATE_PAST_20XX
72_active.cf:header   FH_DATE_PAST_20XX Date =~ /20[2-9][0-9]/ [if-unset: 2006]
72_active.cf:describe FH_DATE_PAST_20XX The date is grossly in the future.
72_active.cf:##} FH_DATE_PAST_20XX

Si elle n’est pas effectuée (et c’était malheureusement mon cas sur un serveur mail), corrigez votre fichier de serveurs miroirs avec les suivants :

# pwd
/var/lib/spamassassin/3.002001/updates_spamassassin_org
# cat MIRRORED.BY
# test mirror: zone, cached via Coral
#http://buildbot.spamassassin.org.nyud.net:8090/updatestage/
http://daryl.dostech.ca/sa-update/asf/ weight=5
http://www.sa-update.pccc.com/ weight=5

N’oubliez pas de redémarrer le démon spamd et/ou encore votre logiciel de filtrage mail (amavisd-new, etc).

Source : http://wiki.apache.org/spamassassin/Rules/FH_DATE_PAST_20XX

pop-before-smtp : regex pour Dovecot

Attention à la dernière mise à jour de Dovecot sur Gentoo … le format de log a changé. Si vous utilisez pop-before-smtp, voici les nouvelles expressions régulières à utiliser :

$logtime_pat = '(\w+ \d+ \d+:\d+:\d+)';
$pat = '^[LOGTIME] (?:imap|pop3)-login: Info: Login: .+? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';
Haut de page