Vendredi 23 novembre 2018

https://workaround.org/ispmail/stretch/filtering-out-spam-with-rspamd

Filtrage du spam avec rspamd

Vous avez un serveur de messagerie en parfait état de fonctionnement. Mais avant d’aller en direct, faisons quelque chose au sujet de la quantité folle de spam. Dans les éditions précédentes de ce guide, j’ai utilisé et recommandé SpamAssassin. Cependant, j’ai trouvé un logiciel plus polyvalent, plus évolutif et plus facile à intégrer : rspamd. rspamd a une comparaison (peut-être biaisée) sur leur page d’accueil.

rspamd est un processus permanent qui s’exécute sur votre serveur de messagerie. Il écoute les connexions de Postfix en utilisant le protocole milter (=filtre de courrier). Chaque fois qu’un courriel entre dans votre système, Postfix l’enverra à rspamd pour que son contenu soit vérifié. rspamd effectue beaucoup de vérifications sur l’email et calcule un score total. Plus le score est élevé, plus le courriel doit être considéré comme non sollicité. Faire en sorte que Postfix utilise rspamd

Disons à Postfix d’envoyer tous les courriels entrants via rspamd. Exécutez ces commandes sur le shell :

    postconf smtpd_milters=inet:127.0.0.1:11332
    postconf non_smtpd_milters=inet:127.0.0.1:11332
    postconf milter_protocol=6
    postconf milter_mail_macros="i {mail_addr} {client_addr} {client_name} {auth_authen}"

Postfix se connectera maintenant à rspamd qui écoute le port TCP 11332 sur localhost (127.0.0.0.1) et transmettra le courrier électronique par cette connexion. Le paramètre smtpd_milters définit cette connexion pour les courriels qui sont entrés dans le système à partir d’Internet via le protocole SMTP. Le paramètre non_smtpd_milters est optionnel - il fait que Postfix a vérifié tous les courriels qui proviennent du système lui-même. Enfin, le paramètre milter_mail_macros définit plusieurs variables que rspamd attend pour une meilleure détection des spams. rspamd lance alors ses vérifications et indique à Postfix si l’email doit passer ou être rejeté.

Tester la détection du spam

Pour tester, nous pouvons utiliser un exemple d’email spam fourni avec SpamAssassin. Il s’appelle GTUBE (Generic Test for Unsolicited Bulk Email). Il contient un certain modèle artistique qui est reconnu comme spam par SpamAssassin. Connaissez-vous EICAR.COM pour tester les antivirus ? C’est la même chose pour le spam.

Je vous suggère de télécharger le fichier sur le serveur :

wget http://spamassassin.apache.org/gtube/gtube.txt

….et envoyer cet email à notre utilisateur de test John……

sendmail john@example.org < gtube.txt

Vérifiez votre /var/log/mail.log. Vous trouverez quelque chose comme ceci :

    Jan 13 09:21:01 mail postfix/cleanup[19945]: 95B7A42212: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.example.org> to=<john@example.org>
    Jan 13 09:21:01 jen postfix/cleanup[19945]: 95B7A42212: to=<john@example.org>, relay=none, delay=0.18, delays=0.18/0/0/0, dsn=5.7.1, status=bounced (Gtube pattern)

Les parties intéressantes sont celles imprimées en caractères gras. “milter-reject” indique que le milter (rspamd) a recommandé à Postfix de rejeter l’email. Il a donné la raison “5.7.1 Gtube pattern”. Dans les communications par courrier, on trouve souvent ces codes à trois chiffres. Ils sont définis dans la RFC 3463. Le premier chiffre est le plus important :

2 = Succès
4 = Échec transitoire (problème temporaire - revenez plus tard)
5 = Échec permanent (ne pas réessayer de cette façon)

Donc 5.7.1 nous dit que le code résultat est un échec permanent dans la livraison. Si vous consultez le RFC, vous constaterez que le 7 représente un problème concernant la politique de sécurité. Il ne s’agit donc pas d’une défaillance technique, mais plutôt d’un composant de sécurité du système qui a rejeté le courriel. C’est ce que rspamd a fait. Il nous a même donné la raison : “Gtube pattern”. Vous voyez donc que rspamd est au courant du modèle de test de spam Gtube et réagit comme prévu.

En conséquence, vous ne verrez pas cet e-mail dans la boîte de réception de John. C’est un grand avantage d’utiliser des “milters” d’ailleurs. Imaginez Postfix recevant un e-mail de spam et confirmant sa réception. Que doit-il faire lorsqu’il découvre qu’il s’agit d’un courriel indésirable ? Selon le protocole SMTP, il ne doit pas jeter les courriels. Créez-vous un message de rebond indiquant à l’expéditeur que vous n’avez pas accepté le courriel ? Ce serait une mauvaise idée parce que la prétendue adresse de l’expéditeur n’est très probablement pas l’expéditeur réel. Vous enverriez le rebond à une personne innocente, créant ainsi ce qu’on appelle la rétrodiffusion et l’aggravant encore plus. La bonne approche consiste donc à vérifier le courrier électronique pendant que le serveur d’envoi est toujours connecté à votre Postfix. Cela permet à Postfix de rejeter l’email avec un code d’erreur 5.x.x.x et de laisser l’autre partie déterminer ce qu’il faut faire.

Paramètres de score (facultatif)

rspamd ne rejettera pas tous les courriels non sollicités. Comme il calcule un score de la propabilité du spam, vous pouvez lui dire quels scores vous accepteriez, marquer comme spam ou faire rejeter le courriel entrant. Jetez un coup d’oeil au fichier /etc/rspamd/metrics.conf. Il y a des tonnes de scores définis pour diverses conditions. Au début du fichier, vous trouverez :

     actions {
     reject = 15;
     add_header = 6;
     greylist = 4;
     }

Ce sont les actions par défaut. Si rspamd calcule un score d’au moins 15, l’email sera rejeté tout comme le modèle Gtube du test précédent. Tout score supérieur à 6 ajoutera des lignes d’en-tête comme “X-Spam: Yes” afin que votre logiciel de messagerie puisse les détecter et peut-être classer l’email dans un autre dossier. Tout score supérieur à 4 déclenchera la greylisting qui est un mécanisme qui rejette temporairement l’email avec un code 4.x.x.x et attend que le serveur d’envoi réessaye. Après un temps d’attente de quelques minutes, greylisting acceptera l’email. L’idée est de rejeter les courriels provenant de systèmes qui n’ont pas de file d’attente d’envoi. Les logiciels malveillants, comme ceux des ordinateurs infectés par Wind*ws, essayaient d’envoyer un courriel une seule fois, ce qui déclenchait la greylisting et rejetait avec succès le spammeur. Mais même les programmeurs de logiciels malveillants ont appris et peuvent réessayer après quelques minutes, contournant ainsi la liste grise. Votre “mileage” peut varier.

Si vous souhaitez modifier ces valeurs par défaut, créez un nouveau fichier dans /etc/rspamd/override.d/metrics.conf contenant:

    actions {
     reject = 150;
     add_header = 2;
     greylist = 5;
    }

Cela ne rejetterait pratiquement jamais un courriel. Et il marquerait n’importe quel email avec un score d’au moins 2 comme spam. La liste grise se produirait à un score supérieur à 5. Il ne s’agit pas nécessairement de valeurs saines, mais simplement d’un exemple.

Veuillez prendre un moment pour comprendre comment changer les valeurs par défaut de rspamd. Vous pouvez soit créer des fichiers dans /etc/rspamd/local.d/…. qui remplaceront des sections entières ; soit créer des fichiers dans /etc/rspamd/override.d/…. qui ne changeront que de petites parties de la configuration. Il y a une page utile dans la documentation rspamd qui contient des exemples. Quoi que vous fassiez, ne changez jamais directement les fichiers /etc/rspamd/* car une mise à jour logicielle tentera de les remplacer.

Bien sûr, redémarrez rspamd après tout changement de configuration :

service rspamd reload

Pour vérifier si rspamd a récupéré votre configuration, utilisez cette commande pour voir la configuration actuelle :

rspamadm configdump |more

Vous pouvez tester votre configuration en utilisant

rspamadm configtest

Alternativement, vous pouvez vérifier si tous les processus rspamd requis sont en cours d’exécution…..

pgrep -a rspam

22510 rspamd: main process 
22511 rspamd: rspamd_proxy process 
22512 rspamd: controller process 
22513 rspamd: normal process 
22514 rspamd: normal process 
22515 rspamd: hs_helper process

Antivirus

https://workaround.org/ispmail/stretch/filtering-viruses-malware/

Filtrage virus clamav

Rspamd not sending messages to clamav milter https://groups.google.com/forum/#!topic/rspamd/7qH8d0gKi3g

Mode debug root@vps526361:/home/adxo# cat /etc/rspamd/local.d/logging.inc

type = “file”; filename = “/var/log/rspamd/rspamd.log”; level = “info”; debug_modules = [];

2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; proxy; proxy_accept_socket: accepted milter connection from 127.0.0.1 port 58786 2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; milter; rspamd_milter_process_command: got connection from 78.230.171.39:37193 2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; proxy; rspamd_mime_parse_message: cannot find content-type for a message, assume text/plain 2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; proxy; rspamd_mime_part_get_cte: detected missing CTE for part as: 7bit 2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; proxy; rspamd_extract_words: detected part language: en 2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; proxy; rspamd_message_parse: loaded message; id: 20180320085925.6E4E1648A2@yanspm.com; queue-id: ; size: 214; checksum: <688e2a8c223dff43c33d160304120f9a> 2018-03-20 07:59:28 #5762(rspamd_proxy) <6d8570>; proxy; fuzzy_generate_commands: <20180320085925.6E4E1648A2@yanspm.com>, part is shorter than 1000 bytes: 86 (43 * 2.00 bytes), use direct hash 2018-03-20 07:59:29 #5762(rspamd_proxy) <6d8570>; lua; greylist.lua:255: Score too low - skip greylisting 2018-03-20 07:59:29 #5762(rspamd_proxy) <6d8570>; proxy; rspamd_task_write_log: id: <20180320085925.6E4E1648A2@yanspm.com>, qid: , ip: 78.230.171.39, from: <yann@yanspm.com>, (default: F (no action): [-0.57/15.00] [DMARC_POLICY_ALLOW(-0.25){yanspm.com;none;},R_SPF_ALLOW(-0.20){+a;},MIME_GOOD(-0.10){text/plain;},IP_SCORE(-0.02){country: FR(-0.10);},ARC_NA(0.00){},ASN(0.00){asn:12322, ipnet:78.224.0.0/11, country:FR;},FROM_EQ_ENVFROM(0.00){},FROM_NO_DN(0.00){},MID_RHS_MATCH_FROM(0.00){},RCPT_COUNT_ONE(0.00){1;},RCVD_COUNT_ZERO(0.00){0;},RCVD_TLS_ALL(0.00){},R_DKIM_NA(0.00){},TO_DN_NONE(0.00){},TO_MATCH_ENVRCPT_ALL(0.00){}]), len: 214, time: 243.351ms real, 6.890ms virtual, dns req: 16, digest: <688e2a8c223dff43c33d160304120f9a>, rcpts: <yan@cinay.pw>, mime_rcpt: <yan@cinay.pw> 2018-03-20 07:59:29 #5762(rspamd_proxy) <6d8570>; proxy; rspamd_protocol_http_reply: regexp statistics: 0 pcre regexps scanned, 1 regexps matched, 166 regexps total, 84 regexps cached, 0B bytes scanned using pcre, 309B bytes scanned total 2018-03-20 07:59:29 #5762(rspamd_proxy) <876c62>; proxy; proxy_milter_finish_handler: finished milter connection