serveur_hebergement:serveur_mail:partie_5_lutter_contre_le_spam

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveur_hebergement:serveur_mail:partie_5_lutter_contre_le_spam [2022/11/02 15:17] fateserveur_hebergement:serveur_mail:partie_5_lutter_contre_le_spam [2023/08/08 14:00] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-====== Partie : lutter contre le spam ======+====== Partie : lutter contre le spam ======
  
-Le spam est la plaie des e-mails. Si vous ne faites rien pour lutter contre, vous allez crouler sous les spams. Heureusement, il y a plusieurs moyens de lutter contre le spam.+===== Comment ça marche la détection de spam =====
  
-Plusieurs logiciels vont nous aider dans cette tâche : +Le spam est la plaie des e-mails. Si vous ne faites rien pour lutter contre, vous allez crouler sous les spams. Heureusement, il y a plusieurs moyens de lutter contre le spam. Plusieurs logiciels vont nous aider dans cette tâche. 
-  Postgrey : à chaque e-mail reçu, Postgrey va vérifier la combinaison adresse IP de l'envoyeur, adresse e-mail de l'envoyeur et adresse e-mail du destinataire. Si cette combinaison n'a jamais été vu, il va rejeter l'e-mail. Les serveur e-mail légitimes vont renvoyer l'e-mail alors que la plupart des serveurs envoyant du spam ne renvoi rien en cas de rejet + 
-  SpamAssassin : filtre les e-mails et détecte les spams à l'aide de règles +==== Postgrey ==== 
-  * ClamAV un antivirus +À chaque e-mail reçu, Postgrey va vérifier la combinaison adresse IP de l'envoyeur, adresse e-mail de l'envoyeur et adresse e-mail du destinataire. Si cette combinaison n'a jamais été vue, il va rejeter l'e-mail. Les serveurs e-mail légitimes vont renvoyer l'e-mail alors que la plupart des serveurs envoyant du spam ne renvoient rien en cas de rejet 
-  * Amavis fait le lien entre SpamAssassinClamAV et Postfix + 
 +==== ClamAV ==== 
 +Pas grand-chose à dire dessus. C'est un antivirus qui va nous permettre d'éliminer les e-mails contenant des virus 
 + 
 +==== Amavis ==== 
 +Amavis est un logiciel central. C’est un logiciel qui filtre le contenu des e-mails en se couplant avec d’autres logiciels. En se couplant avec Spamassassin il va pouvoir filtrer les spams et à l’aide de Clamav il va éliminer les e-mails contenant des virus. Le tout avec la coopération de Postfix, le serveur e-mail. 
 + 
 +==== SpamAssassin ==== 
 +Pour finir, le logiciel le plus important, SpamAssassin. C’est un logiciel qui fait passer à chaque e-mail une série de tests, appelés règles, et dont on peut trouver la liste [[|https://spamassassin.apache.org/old/tests_3_3_x.htmlici]]. À chaque règle correspond une note, et le cumul des notes de toutes ces règles va représenter le score de l'-email. Par défaut, le système va considérer tous les e-mails avec un score supérieur à 6,31 comme un spam. Donc plus le score est haut, plus l'e-mail a de chance d’être un spam. 
 + 
 +Prenons la règle SUBJ_ALL_CAPS comme exemple pour expliquer le principe un peu plus en détail. Cette règle vérifie si le sujet de l'e-mail est écrit uniquement en majuscule. Comme toutes les règles, une note est associée à cette règle. Par défaut, cette règle vaut 1,506. 
 +Dès qu’un e-mail est reçu, cette règle, comme toutes les autres, va être jouée. Si le sujet du mail est écrit uniquement en majuscule, la règle va être activée pour cet e-mail et augmentera son score de 1,506. Si le sujet n’est pas uniquement en majuscule, elle ne sera pas activée et n’augmentera pas son score. 
 +Toutes les règles fonctionnent sur le même principe, de manière binaire. Si elles sont vraies, elles augmentent ou diminuent le score du mail d’une valeur fixe propre à chaque règle et si elles sont fausses, elles ne modifient pas le score du mail. 
 + 
 +Ca fera peut-être tiquer certains de lire que les règles augmentent ou diminuent le score. L’écrasante majorité des règles sont des malus, dans le sens où lorsqu’elles sont actives elles augmentent le score de l'e-mail pour augmenter les chances qu’il soit classé en tant que spam. Comme SUBJ_ALL_CAPS par exemple. 
 +Mais quelques-unes sont des bonus. Comme USER_IN_SPF_WHITELIST par exemple, qui s’active si l’adresse de l’expéditeur est dans une liste blanche. Ces règles diminuent le score du mail lorsqu’elles sont actives pour augmenter les chances que le mail soit classé comme ham (l’inverse d’un spam, un e-mail désiré). La note de USER_IN_SPF_WHITELIST par exemple est de -100. 
 +Les e-mails marqués comme spam vont voir leur titre modifié avec l’ajout du flag SPAM (suivant la configuration) et certains champs vont être ajoutés dans l’entête de l'e-mail : 
 +  * X-Spam-Flag indique si le'-mail est considéré comme spam ou ham. 
 +  * X-Spam-Score indique le score de l'e-mail calculé par Spamassassin. 
 +  * X-Spam-Level : indique le niveau de spam lié au score, sous forme d’étoile. Si le score de l'e-mail est 2,5 par exemple, le champ X-Spam-Level affichera “**”. 
 +  * X-Spam-Status : indique le détail du calcul du score en affichant les règles activées sur cet e-mail et la note de chacune d’elles. 
 + 
 +Parmi toutes ces règles, il y en a une, ou plutôt un ensemble, qui est toujours activée. C’est un ensemble de règle utilisant un filtre bayésien (n’étant pas mathématicien, je vous laisse chercher sur Wikipédia comment fonctionne en détail un filtre bayésien 😉). À la différence des autres tests, le filtre bayésien est amélioré avec le temps chaque fois que vous marquez manuellement un e-mail comme spam ou comme ham via le programme sa-learn, un outil interne de Spamassassin qui sert à alimenter la base de donnée du filtre bayésien. 
 +Pour chaque e-mail, il va calculer le pourcentage de chance que l'e-mail soit un spam. Si, par exemple, il estime qu'il a entre 40 et 60% de chance d’être un spamil va activer la règle BAYES_50 et augmenter le score de 0,8. Si l’estimation est entre 60 et 80%, il va activer la règle BAYES_60 qui augmente le score de 1,5, et ainsi de suite. 
 + 
 +Et comme je vous disais, il apprend de ses erreurs si vous lui expliquez que tel e-mail ne doit pas être considéré comme un spam. On va donc voir deux méthodes, qui peuvent être combinées, pour marquer manuellement des mails comme spam ou ham et ainsi alimenter la base donnée du filtre bayésien. 
 +La première méthode va utiliser Roundcube, un des webmail les plus utilisés. 
 +La seconde méthode va utiliser Thunderbird (ou tout autre gestionnaire de mail). 
 +Le détail de ces méthodes est expliqué dans la [[serveur_hebergement:serveur_mail:partie_6_roundcube|partie 6]] 
 + 
 +Fin des explications
  
 ===== Installation ===== ===== Installation =====
Ligne 66: Ligne 96:
  
 Ajoutez également les lignes suivantes pour pouvoir récupérer les e-mails analysés par Amavis :  Ajoutez également les lignes suivantes pour pouvoir récupérer les e-mails analysés par Amavis : 
 +<code>
 #Ajout d'un processus Postfix pour recevoir les e-mails analysés par Amavis #Ajout d'un processus Postfix pour recevoir les e-mails analysés par Amavis
 10025   inet      -                smtpd 10025   inet      -                smtpd
Ligne 90: Ligne 121:
     -o smtpd_client_connection_rate_limit=0     -o smtpd_client_connection_rate_limit=0
     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_address_mappings
 +</code>
  
 +On va également en profiter pour optimiser Postfix dans la lutte contre le spam.
 +
 +Ouvrez le fichier main.cf :
 +<code bash>sudo nano /etc/postfix/main.cf</code>
 +
 +Ajoutez les lignes suivantes :
 +<code>
 +smtpd_helo_required = yes
 +smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, check_helo_access hash:/etc/postfix/helo_access, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname
 +</code>
 +La première ligne oblige les clients à envoyer la commande "HELO" avant "MAIL FROM".
 +La seconde ligne autorise les connexions dont le nom d'hôte passé avec HELO correspond au réseau local, à des utilisateurs enregistrés ou est en liste blanche et rejette les connexions dont le nom d'hôte passé avec HELO est en liste noire (check_helo_access gère la liste blanche et noire), a une syntaxe invalide, n'est pas sous la forme FQDN ou n'est associé à aucun enregistrement DNS de type A ou MX.
 +
 +Pour la liste blanche/noire, il vous faut créér le fichier helo_access :
 +<code bash>sudo nano /etc/postfix/helo_access</code>
 +puis ajouter le nom d'hôte comme suit pour l'ajouter en liste blanche :
 +<code>/^mail\.domaine\.fr$/                  OK</code>
 +et comme suit pour l'ajouter en liste noire :
 +<code>/^mail\.domaine\.fr$/                  REJECT</code>
 +Puis lancez la commande suivante pour créer le fichier helo_access.db :
 +<code bash>sudo postmap /etc/postfix/helo_access</code>
 +Si vous modifiez le fichier helo_access, vous devrez relancer la commande postmap pour mettre à jour le fichier helo_access.db.
 +
 +Toujours dans le fichier main.cf, modifiez la ligne smtpd_sender_restrictions pour avoir comme suit :
 +<code bash>smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_sender_domain, check_sender_access hash:/etc/postfix/spam_exceptions, reject_unknown_client_hostname</code>
 +On accepte les e-mails provenant du réseau local, des utilisateurs enregistrés, on refuse les e-mails non destiné au server et provenant d'un nom de domaine sans enregistrement DNS de type A ou MX, et on refuse également les e-mail lorsque l'adresse IP ne correspond pas au nom de domaine (et inversement) ou si l'adresse IP associée au nom de domaine ne correspond pas à l'adresse IP du client, sauf si l'adresse est dans la liste blanche spam_exceptions. Le reste des e-mails sont acceptés. 
 +Pour la liste blanche, il vous faut créér le fichier spam_exceptions :
 +<code bash>sudo nano /etc/postfix/spam_exceptions</code>
 +puis ajouter le nom d'hôte comme suit pour l'ajouter en liste blanche :
 +<code>/^mail\.domaine\.fr$/                  OK</code>
 +Puis lancez la commande suivante pour créer le fichier spam_exceptions.db :
 +<code bash>sudo postmap /etc/postfix/spam_exceptions</code>
 +Si vous modifiez le fichier spam_exceptions, vous devrez relancer la commande postmap pour mettre à jour le fichier spam_exceptions.db.
 +
 +Modifiez la ligne smtpd_recipient_restrictions pour avoir comme suit :
 +<code>smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org, permit_dnswl_client list.dnswl.org=127.0.[0..255].[1..3], reject_rbl_client zen.spamhaus.org </code>
 +On accepte les e-mails à destination d'une adresse locale, d'une adresse d'un utilisateur enregistré et on rejette l'e-mail s'il n'est pas à destination de notre domaine ou si l'adresse d'expédition, l'adresse IP ou le nom de domaine du client est dans une liste noire, à part si l'adresse IP se trouve dans la liste blanche dnswl.org
  
 ==== ClamAV ==== ==== ClamAV ====
Ligne 106: Ligne 175:
 <code bash>sudo adduser clamav amavis</code> <code bash>sudo adduser clamav amavis</code>
  
-Par défaut, Amavis écoute sur le port 10024 à la fois pour les e-mails entrant et sortant. Il est conseillé d'avoir un port pour les e-mails entrant et un autre pour les sortant.+Par défaut, Amavis écoute sur le port 10024 à la fois pour les e-mails entrant et sortant. Il est conseillé d'avoir un port pour les e-mails entrants et un autre pour les sortants.
  
 Ouvrez le fichier 50-user : Ouvrez le fichier 50-user :
Ligne 147: Ligne 216:
 Afin que les e-mails provenant d'utilisateurs enregistrés soient transférés au processus Amavis sur le port 10026, après "smtps     inet  n                               smtpd", ajoutez à la fin la ligne suivante : Afin que les e-mails provenant d'utilisateurs enregistrés soient transférés au processus Amavis sur le port 10026, après "smtps     inet  n                               smtpd", ajoutez à la fin la ligne suivante :
 <code>-o content_filter=smtp-amavis:[127.0.0.1]:10026</code> <code>-o content_filter=smtp-amavis:[127.0.0.1]:10026</code>
 +Ajoutez également la ligne suivante pour éviter qu'OpenDKIM ne signe deux fois les messages (une fois avant le transfert à Amavis et une fois après l'avoir récupéré) :
 +<code>-o receive_override_options=no_milters</code>
  
 ==== SpamAssassin ==== ==== SpamAssassin ====
Ligne 171: Ligne 242:
 </code> </code>
  
-Pour que les modifications dans ce fichier soient prises en compte, il faut que $mydomain dans le fichier 05-domain_id correspondent bien à votre nom de domaine. La valeur par défaut de $mydomain est "head -n 1 /etc/mailname". Si cette commande ne renvoi pas "domaine.fr" (correspondant donc à votre nom de domaine), il faudra remplacer la ligne+Si vous souhaitez avoir l'en-tête X-Spam-Report sur les e-mails classés en spam, ajoutez la ligne suivante : 
 +<code>$allowed_added_header_fields{lc('X-Spam-Report')} = 1;</code> 
 + 
 +Pour que les modifications dans ce fichier soient prises en compte, il faut que $mydomain dans le fichier 05-domain_id correspondent bien à votre nom de domaine. La valeur par défaut de $mydomain est "head -n 1 /etc/mailname". Si cette commande ne renvoie pas "domaine.fr" (correspondant donc à votre nom de domaine), il faudra remplacer la ligne
 <code>chomp($mydomain = `head -n 1 /etc/mailname`);</code> <code>chomp($mydomain = `head -n 1 /etc/mailname`);</code>
 par par
 <code>$mydomain = "domaine.fr";</code> <code>$mydomain = "domaine.fr";</code>
 +
 +Si vous avez besoin de modifier le score d'une règle de SpamAssassin, il vous faudra modifier le fichier 
 +<code>/var/lib/amavis/.spamassassin/user_prefs</code>
 +Il vous suffit d'ajouter la ligne "score nom_de_la_règle score_désiré". Vous pouvez également ajouter des adresses e-mail en liste blanche en ajoutant la ligne "whitelist_from adresse_e-mail"
  
 Redémarrez Amavis, ClamAV et Postfix : Redémarrez Amavis, ClamAV et Postfix :
 <code bash>sudo systemctl restart amavis clamav-daemon postfix</code> <code bash>sudo systemctl restart amavis clamav-daemon postfix</code>
  • serveur_hebergement/serveur_mail/partie_5_lutter_contre_le_spam.1667402275.txt.gz
  • Dernière modification : 2023/08/08 14:01
  • (modification externe)