====== Postfix et Spamassassin ====== {{tag>postfix spamassassin debian}} //par julien, juillet 2007// Avez-vous déjà essayer de brancher un serveur mail sur le Net sans configurer d'antispam au préalable ? Je l'ai fait quelques fois, et bas c'est pas triste !!! On arrive vite au point ou checker sa mailbox est un supplice sans nom. La solution c'est de demander à Postfix de soumettre les mails entrants à l'excellent Spamassassin avant de les faire suivre au serveur Imap (enfin, je dit imap, mais ya ptete des sadiques qui utilisent encore pop...). ===== Spamassassin vite fait bien fait ===== Les packages qui vont bien sous Debian (Etch ici) sont : apt-get install spamassassin spamc razor pyzor Attention, ya du monde qui va s'installer :) Et une fois que c'est fait, il suffit d'aller dans '/etc/default/spamassassin' et de passer la valeur de ENABLED à 1. Une petite relance du serveur, et hop, c'est dans la poche. Spamd est maintenant dans les processus : root 17989 1 3 19:38 ? 00:00:00 /usr/sbin/spamd --create-prefs --max-children 5 --helper-home-dir -d --pidfile=/var/run/spamd root 17990 17989 0 19:38 ? 00:00:00 spamd child root 17991 17989 0 19:38 ? 00:00:00 spamd child Bon, c'est quand même mieux de le configurer un peu plus précisément, en particulier pour activer l'utilisation des modules Pyzor et Razor (des outils collaboratifs de détections des spams). Pour cela, il faut aller dans '/etc/spamassassin/local.cf' et modifier un peu le fichier. Ci-dessous, le fichier que j'utilise : # This is the right place to customize your installation of SpamAssassin. # # See 'perldoc Mail::SpamAssassin::Conf' for details of what can be # tweaked. # # Only a small subset of options are listed below # ########################################################################### # Add *****SPAM***** to the Subject header of spam e-mails # rewrite_header Subject *****SPAM***** # Save spam messages as a message/rfc822 MIME attachment instead of # modifying the original message (0: off, 2: use text/plain instead) # report_safe 1 # Set which networks or hosts are considered 'trusted' by your mail # server (i.e. not spammers) # # trusted_networks 212.17.35. # Set file-locking method (flock is not safe over NFS, but is faster) # lock_method flock # Set the threshold at which a message is considered spam (default: 5.0) # required_score 5.0 # Use Bayesian classifier (default: 1) # use_bayes 1 # Bayesian classifier auto-learning (default: 1) # bayes_auto_learn 1 # Set headers which may provide inappropriate cues to the Bayesian # classifier # # bayes_ignore_header X-Bogosity # bayes_ignore_header X-Spam-Flag # bayes_ignore_header X-Spam-Status # Enable or disable network checks skip_rbl_checks 0 use_razor2 1 use_pyzor 1 ==== Désactiver les préférences par utilisateur ==== Dans **/etc/default/spamassassin**, il faut changer la ligne d'options pour désactiver les préférences par utilisateur (qui serait normalement stockées dans leur home directory) et utiliser les préférences globales à la place. On remplace l'option **--create-prefs** par **-x**: # vim /etc/default/spamassassin [...] 17 #OPTIONS="--create-prefs --max-children 1 --helper-home-dir" 18 OPTIONS="-x --max-children 3 --helper-home-dir" ==== Changer l'utilisateur de spamassassin ==== Par défaut spamassassin est lancé par Root. On va créer un user **spamassassin** et lancer le daemon sous ce user. # useradd spamassassin -d /var/spool/spamassassin -m -s /bin/false Cela crée un user qui ne peux pas se loguer et à un répertoire home dans /var/spool. Maintenant on change l'option de lancement de spamassassin dans **/etc/default/spamassassin/** # vim /etc/default/spamassassin [...] 18 OPTIONS="-x --max-children 3 --helper-home-dir -u spamassassin" Et on relance le daemon. Il est maintenant lancé sous l'utilisateur spamassassin. # /etc/init.d/spamassassin restart Restarting SpamAssassin Mail Filter Daemon: spamd. # ps -edf|grep spam root 31991 1 33 12:40 ? 00:00:01 /usr/sbin/spamd -x --max-children 3 --helper-home-dir -u spamassassin -d --pidfile=/var/run/spamd.pid 1015 31993 31991 0 12:40 ? 00:00:00 spamd child 1015 31994 31991 0 12:40 ? 00:00:00 spamd child root@zerhuel:/var/spool# grep spamassassin /etc/passwd spamassassin:x:1015:1015::/var/spool/spamassassin:/bin/false ==== Activer la validation DKIM ==== Il est possible d'activer la validation DKIM. Pour cela, le package **libmail-dkim-perl** doit être installé. Ensuite, il suffit d'activer le module DKIM dans la configuration de spamassassin. # vim /etc/spamassassin/v312.pre [...] 18 ########################################################################### 19 # experimental plugins 20 21 # DKIM - perform DKIM verification 22 # 23 # Mail::DKIM module required for use, see INSTALL for more information. 24 # 25 # Note that if C version 0.20 or later is installed, this 26 # renders the DomainKeys plugin redundant. 27 # 28 loadplugin Mail::SpamAssassin::Plugin::DKIM Relancez spamassassin. Lorsqu'un mail arrivera avec une signature DKIM, Spamassassin placera la valeur suivante dans le résultat de l'inspection X-Spam-Status: No, score=2.9 required=8.0 tests=DKIM_SIGNED,DKIM_VERIFIED, HTML_MESSAGE,TVD_SPACE_RATIO autolearn=no version=3.2.5 //(test effectué avec un email provenant de gmail)// ===== Postfix tout aussi rapidement ===== Seul le fichier Master.cf est à modifier. Il faut demander (poliment hein) au daemon smtpd d'appeler spamassassin, que l'on va définir juste après. Donc, dans '/etc/postfix/master.cf' à la fin de la ligne smtp, on ajoute '-o spamassassin' : # # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd -o content_filter=spamassassin De fait, à la fin du fichier Master.cf il faut créer un service spamassassin : spamassassin unix - n n - - pipe user=nobody argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} Bon, normalement les chemins des exécutables sont bons pour Debian Etch mais faites quand même une vérif avant ;) Et hop, on reload postfix et ça roule. ===== Ils disent quoi les logs ? ===== Le fichier /var/log/mail.info contient maintenant les notifications de spamassassin. Un peu partout vous verrez des lignes du type : Jul 4 19:59:09 mailbox spamd[17990]: spamd: result: . 4 - EXTRA_MPART_TYPE,HTML_10_20,HTML_IMAGE_ONLY_24,HTML_MESSAGE,HTML_SHORT_LINK_IMG_3,MSGID_FROM_MTA_ID scantime=0.1,size=11864,user=nobody,uid=65534,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=37360,mid=<20070704175908.CA0D8564271@smtp.linuxwall.info>,autolearn=no Et les entetes des mails contiennent maintenant : X-Spam-Checker-Version: SpamAssassin 3.1.7-deb (2006-10-05) on sachiel.linuxwall.info X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=none autolearn=failed Variable selon que le mail est detecté comme spam ou non. That's all folks ! ~~DISCUSSION~~