Table des matières

Spamassassin: "whitelist_from_spf" et "softfail"

Je vais proposer un “patch” pour le module “SPF.pm” de “spamassassin”, afin qu'il tolère les réponses “softfail” comme il le fait pour “pass” en règle SPF .

~~READMORE~~

Petite histoire

Une légende urbaine

Il est des légendes urbaines tenaces, et l'une d'elle est lié à la configuration des e-mails.

Qui n'a pas entendu dire:
“Pour configurer son mail, il faut utiliser le service SMTP de son fournisseur d'accès !”

Ça eu été vrai avec feu AOL ou feu CompuServe… mais plus aujourd'hui.

Donc, quand vous avez un compte mail a configurer:
UTILISER LE SERVEUR SMTP DE VOTRE FOURNISSEUR DE MAIL (et non pas d'“accès”).

Exemples:

Où que vous soyez, utilisez son service SMTP, comme “smtp.gmail.com”.

Où que vous soyez, utilisez son service SMTP, comme “smtp.free.fr”.

Exigez un service d'envoi SMTP, genre: “smtp.trouduc.com”.

Etc…
Le petit truc un peu rébarbatif , c'est qu'il vous faudra entrer un mot de passe, et peut être utiliser le port 587 au lieu du port 25.

SPF

Malgré le conseil ci-dessus, des utilisateurs, souvent âgés et obtus (haha!), refusent d'adapter leur configuration aux temps modernes.
Donc, quand on utilise des règles SPF , et bien on se retrouve avec des utilisateurs (âgés et obtus) qui rouspètent parce que leur mails sont rejetés.

On peut assouplir les règles SPF pour tolérer ces gougnafiers: on configure le SPF de telle sorte qu'il émette un avertissement sous forme d'un “softfail” pour certaines plages d'IP, et ça passe…

Enfin, presque:
Certains scripts vont traiter une réponse “softfail” comme un rejet: ce qui n'est pas le cas. (de même que “neutral”, mais je m'en fous).

C'est ce qui arrive avec le plugin/script “SPF” qui vient avec “spamassassin”.

On va devoir modifier le source pour qu'il accepte les “softfail” comme un “pass”, et pour cela, j'ai fait un patch.

En pratique

Exemple de configuration qu'on peut trouver dans “/etc/spamassassin/local.cf” :

whitelist_from_spf *@tjaouen.fr
def_whitelist_from_spf *@microsoft.com *@gmail.fr
whitelist_auth fhollande@gouv.fr

Si l'un des cas retourne pour le test SPF “softfail”, il sera considéré comme un problème, et donc, ne saura pas whitelisté: c'est un peu trop sévère à mon goût.

Je vais proposer 2 méthodes pour tolérer les “softfail”.

La première va simplement autoriser les “softfail” pour les listes “whitelist_from_spf” et “whitelist_auth”.

La deuxième va utiliser une autre liste créée pour l'occasion et nommé “whitelist_from_spf_softfail”.

patch

Le patch pour “Debian Jessie” :

Le patch pour “Debian Wheezy” :

Si nécessaire:

# aptitude update && aptitude install patch

Rechercher où se trouve le script a patcher:

# dpkg -S SPF.pm

On va dans le répertoire:

# cd /usr/share/perl5/Mail/SpamAssassin/Plugin

On fait un backup (toujours!) :

# cp -p SPF.pm{,-backup}
:!: Le patch ne pourra s'appliquer que sur le fichier “SPF.pm” original venant que Debian Jessie ou Debian Wheezy.

Appliquer le patch:

# patch -p0 <SPF-softfail-v2.patch.txt 
patching file SPF.pm

Recharger “spamassassin” :

# /etc/init.d/spamassassin reload

Configurer

"whitelist_from_spf"

Pour activer le traitement des “softfail” en équivalent de “pass” , il suffit d'ajouter dans la conf de “spamassassin” :

wl_ignore_spf_softfail 1

(Par defaut, c'est '0', bien sur)
Pour ma part, cette option a été ajouté dans /etc/spamassassin/local.cf .

Maintenant, on recharge la conf, est c'est fini:

# /etc/init.d/spamassassin reload

Le comportement associé à la liste “whitelist_from_spf” (et incidement, “whitelist_auth”) est changé.
Une réponse “softfail” est équivalent à “pass”.

:!: Cela ne change rien pour “def_whitelist_from_spf

"whitelist_from_spf_softfail"

Sinon, on peut ajouter les adresses a une nouvelle liste créé par le patch.

Il s'agit de “whitelist_from_spf_softfail” .

Exemple:

whitelist_from_spf_softfail *@gmail.com
whitelist_from_spf_softfail toto@trouduc.fr

Mais il faut aussi ajouter ça dans /etc/spamassassin/local.cf (ou équivalent):

ifplugin Mail::SpamAssassin::Plugin::SPF

header USER_IN_SPF_SOFTFAIL_WHITELIST   eval:check_for_spf_softfail_whitelist_from()
describe USER_IN_SPF_SOFTFAIL_WHITELIST From: address is in the user's SPF SOFTFAIL whitelist
tflags USER_IN_SPF_SOFTFAIL_WHITELIST   userconf nice noautolearn
score USER_IN_SPF_SOFTFAIL_WHITELIST    -100.000

endif # Mail::SpamAssassin::Plugin::SPF

Adapter le “score” selon vos envies, mais ne changez rien au reste.

Et pour activer la nouvelle configuration, comme d'habitude:

# /etc/init.d/spamassassin reload

Divers

Debug

Pour voir les messages de debug d'un service, par exemple “spf”, on fera en sorte que “spamassassin” démarre avec l'option “-D spf”.

Exemple, dans “/etc/default/spamassassin”, j'ai simplement fait cette modif:

OPTIONS="--create-prefs --max-children 5 --helper-home-dir --ipv4only -D spf"

Si le patch n'est pas appliqué correctement, vous pourrez voir une erreur comme ça dans les logs:

Nov  31 05:40:06 mx9 spamd[24215]: config: failed to parse line, skipping, in "/etc/spamassassin/local.cf": wl_ignore_spf_softfail 1

Ou encore:

Nov 31 05:52:48 mx1 spamd[2274]: rules: failed to run USER_IN_SPF_SOFTFAIL_WHITELIST test, skipping:
Nov 31 05:52:48 mx1 spamd[2274]:  (Can't locate object method "check_for_spf_softfail_whitelist_from" via package "Mail: [...]:SpamAssassin::PerMsgStatus" at (eval 1154) line 1558.
Nov 31 05:52:48 mx1 spamd[2274]: )

A l'inverse, vous pourriez voir:

Nov  31 06:11:27 mx0 spamd[24700]: spf: ignoring softfail from whitelist, by admin setting

Pour mémoire

Le patch a été fait comme cela:

$ diff -Naur SPF.pm SPF-softfail-v2.pm > SPF-softfail-v2.patch.txt