Archive

Articles taggués ‘dovecot’

Classement du courrier côté serveur avec Sieve

06/01/2009

Lorsque vous consultez votre courrier en IMAP depuis plusieurs clients différents (webmail et client sur le PC, par exemple) et que vous avez implémenté sur votre PC des règles de tri de courrier, le classement n’est pas fait lorsque vous consultez votre courrier sur le Webmail et que celui-ci n’a pas encore été classé par votre PC qui devrait resté allumé pour classer en temps réel.

La solution est de réaliser le classement directement côté serveur, afin que votre MDA (Mail Delivery Agent) réalise directement ce classement. Ainsi, peu importe l’endroit où vous vous connectez, le classement sera toujours réalisé.

Un langage, Sieve défini par la RFC 5228 permet de réaliser facilement ces traitements, sur base des en-têtes du courrier reçu. Ainsi, il est facile de vérifier la valeur d’un en-tête (l’expéditeur du mail, son destinataire, le sujet, …) ou son existence (est-ce que l’antispam a placé l’en-tête indiquant le caractère indésirable du courrier ?).

En utilisant le MDA de Dovecot, un plugin nommé cmusieve est disponible. Il suffit de l’activer dans le fichier /etc/dovecot/dovecot.conf, dans la section lda, de la manière suivante:

protocal lda {
  mail_plugins = cmusieve
}

Ensuite, après avoir redémarré dovecot, pour les utilisateurs nécessitant un filtrage, rajouter à la racine de leur boîte mail un fichier nommé .dovecot.sieve (qui doit appartenir à l’utilsateur utilisé pour le mail, généralement vmail). A chaque modification du fichier, dovecot créera une version compilée, nommé .dovecot.sievec. En cas de problème avec votre fichier (erreur de syntaxe), un fichier .dovecot.sieve.err sera créé.

Ce fichier contient les règles propres à chaque utilisateur. En voici quelques exemples :

Classement du spam dans le folder Junk:

require "fileinto";

if exists "X-Spam-Flag" {
  fileinto "Junk";
}

Marquer le courrier provenant de l’adresse mail@example.org comme lu:

require "imapflags";

if address :is ["From"] "mail@example.org" {
  setflag "\\Seen";
}

Supprimer le courrier provenant de l’adresse mail@example.org:

if address :is ["From"] "mail@example.org" {
  discard;
}

Dans le cas du classement du courrier dans un folder précis, il est indispensable de configurer votre client mail pour qu’il idle sur tous les folders (par défaut ce n’est que sur la Inbox principale).

Il est possible de définir des script globaux à tous les utilisateurs et de créer des répondeurs. Nous verrons cela dans un prochain article.

Courrier électronique , ,

Bloquer les scans ssh, pop3 et imap : fail2ban

27/12/2008

Fail2ban est un démon qui lit les fichiers de logs au fur et à mesure de leur écriture afin de bloquer les ip indésirables pendant un temps donné. Le but est simplement d’éviter de surcharger votre serveur avec des dizaines de requêtes par seconde dont le seul but est d’essayer de trouver un couple utilisateur/mot de passe valide afin de tenter de hacker votre machine ou de s’en servir comme relais pour l’envoi de courrier électronique indésirable.

Fail2ban intègre par défaut le contrôle des scans SSH, en lisant votre fichier /var/log/auth.log. Il n’y a donc pas de configuration particulière à faire pour ssh.

Il est possible de le configurer pour qu’il lise aussi votre /var/log/mail.log afin de bloquer les adresses ip qui floodent votre serveur de courrier avec des couples login/mots de passe invalides. L’espoir des hackeurs est de tomber sur un serveur qui pratique le pop-before-smtp, c’est à dire la technique qui consiste à d’abord lire son courrier puis d’utiliser le serveur smtp. Le fait de s’authentifier avec succès sur le serveur pop implique que votre adresse ip est autorisée à envoyer du courrier pendant un certain temps, vers toutes les destinations. Les hackeurs peuvent alors se servir de votre serveur pour envoyer leur spam à la terre entière.

La première étape est de demander à dovecot de transcrire dans les logs les tentatives de connexion échouées. Cela se fait en éditant son fichier de configuration /etc/dovecot/dovecot.conf et en positionnant la directive auth_verbose à true.

Ensuite, il faut éditer le fichier /etc/fail2ban/jail.local et y rajouter

[dovecot-auth]
enabled  = true
port     = imap,imaps,pop3,pop3
sfilter   = dovecot-auth
logpath  = /var/log/mail.log

Vous pouvez rajouter d’autres directives: maxretry (nombre de tentatives après blacklistage), ignoreip (liste d’ip qui ne seront pas blacklistées séparées par des espaces) et bantime (temps de blacklistage en secondes). Attention, ne pas oublier de mettre 127.0.0.1 dans la liste des ip à ignorer, sans quoi des tentatives infructueuses via un webmail conduiraient à un auto-blacklistage, ce qui aurait un impact sur toutes les applications (postfix ne saurait plus se connecter à MySQL, par exemple). En haut du fichier, ces 3 directives sont présentes de manière globale, le fait de les repréciser dans une règle leur fait prendre le dessus pour la règle en cours.

Ensuite, créer un fichier /etc/fail2ban/filter.d/dovecot-auth.conf et y mettre

[Definition]
failregex = auth-worker(.*): sql(.*,<HOST>): unknown user

Il est évident qu’il peut être nécessaire d’adapter la regexp à votre situtation, l’ip à blacklister étant représentée par <HOST>. Dans ce cas-ci, on ne bloquera que les utilisateurs inexistants, la regexp peut par exemple être adaptée pour prendre en compte les vrais utilisateurs qui se trompent de mot de passe.

Redémarrer fail2ban et dovecot pour les faire prendre en compte leur nouvelle configuration.

Fail2ban consigne ses actions dans le fichier /var/log/fail2ban.log.

Système , , , , , ,