Spamassasin est un excellent outil de gestion de spams. Il est généralement greffé sur un serveur SMTP comme postfix et permet de faire du whitelisting et du blacklisting.
Il existe en réalité 3 types de filtrages mails:
Le graylisting peut être intéressant car il oblige un réseau de bot générant des spams à utiliser des mécaniques moins standard, et souvent moins supportées. postgray permet de répondre à cette problématique, mais nous ne le traiterons pas ici.
Nous allons voir dans cet article comment installer spamassassin et l’interfacer avec postfix.
Sous FreeBSD:
cd /usr/ports/mail/p5-Mail-Spamassassin
make install clean
Choisissez les options par défaut pour le port et pour toutes ses dépendances (hormis si vous avez des besoins précis).
A la fin de l’installation, vous serez invité à mettre à jour les blacklists. Acceptez.
*******************************************************
* _ _ _ _______ ______ __ _ _____ __ _ ______ *
* | | | |_____| |_____/ | \ | | | \ | | ____ *
* |__|__| | | | \_ | \_| __|__ | \_| |_____| *
* *
*******************************************************
* You must install rules before starting spamd! *
*******************************************************
Do you wish to run sa-update to fetch new rules [N]? y
Enfin activez le service dans /etc/rc.conf
spamd_enable="YES"
Dans un premier temps, on va activer la mise à jour automatique des listes de spamassassin. Ouvrez le fichier /etc/crontab et ajoutez l’entrée suivante:
00 3 * * * root /usr/local/bin/sa-update
Allez ensuite dans le répertoire de configuration de spamassassin et copiez le fichier d’exemple
cd /usr/local/etc/mail/spamassassin
cp local.cf.sample local.cf
Par défaut peu d’options sont présentes et elles sont toutes commentées.
Pour terminer on va relier postfix et spamassassin. Ouvrez le fichier /usr/local/etc/postfix/master.cf. Editez tout d’avoir la ligne concernant smtp afin d’ajouter la notion de filtre:
smtp inet n - n - - smtpd -o content_filter=spamassassin
Ensuite déclarez le filtre spamassassin:
spamassassin unix - n n - - pipe
flags=R user=spamd argv=/usr/local/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Vous pouvez désormais lancer vos services:
service postfix restart
service sa-spamd restart
Envoyez vous un mail. Vous devriez voir apparaître une sortie similaire dans /var/log/maillog
Jun 8 20:15:01 MailServer spamd[57413]: spamd: connection from localhost [127.0.0.1] at port 54641
Jun 8 20:15:01 MailServer spamd[57413]: spamd: setuid to spamd succeeded
Jun 8 20:15:01 MailServer spamd[57413]: spamd: creating default_prefs: /var/spool/spamd/.spamassassin/user_prefs
Jun 8 20:15:01 MailServer spamd[57413]: config: created user preferences file: /var/spool/spamd/.spamassassin/user_prefs
Jun 8 20:15:01 MailServer spamd[57413]: spamd: processing message <1370715664.2282.0.camel@Arch-PC> for spamd:58
Jun 8 20:15:03 MailServer spamd[57413]: spamd: clean message (-0.8/3.0) for spamd:58 in 1.9 seconds, 2248 bytes.
Jun 8 20:15:03 MailServer spamd[57413]: spamd: result: . 0 - DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS scantime=1.9,size=2248,user=spamd,uid=58,required_score=3.0,rhost=localhost,raddr=127.0.0.1,rport=54641,mid=<1370715664.2282.0.camel@Arch-PC>,autolearn=ham
Jun 8 20:15:03 MailServer spamd[57412]: prefork: child states: II
Le score est de 0, le mail passera sans souci.
Maintenant envoyez vous un mail avec pour sujet:
XJSC4JDBQADN1.NSBN32IDNENGTUBE-STANDARD-ANTI-UBE-TEST-EMAILC.34X
Vous devriez voir le mail se faire marquer comme spam:
Jun 8 20:15:56 MailServer spamd[57413]: spamd: connection from localhost [127.0.0.1] at port 39519
Jun 8 20:15:56 MailServer spamd[57413]: spamd: setuid to spamd succeeded
Jun 8 20:15:56 MailServer spamd[57413]: spamd: processing message <1370715720.2282.2.camel@Arch-PC> for spamd:58
Jun 8 20:15:57 MailServer spamd[57413]: spamd: identified spam (999.2/3.0) for spamd:58 in 1.5 seconds, 2437 bytes.
Jun 8 20:15:57 MailServer spamd[57413]: spamd: result: Y 999 - DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,GTUBE,HTML_MESSAGE,RCVD_IN_DNSWL_LOW,SPF_PASS,TVD_SPACE_RATIO scantime=1.5,size=2437,user=spamd,uid=58,required_score=3.0,rhost=localhost,raddr=127.0.0.1,rport=39519,mid=<1370715720.2282.2.camel@Arch-PC>,autolearn=no
Jun 8 20:15:57 MailServer spamd[57412]: prefork: child states: II
Ici le score est de 999. C’est un spam. Notre serveur va donc rajouter l’en-tête que vous avez mentionné plus haut et vous remettre le mail.
Comme vous le voyez le message est tagué.
Pigeonhole est le successeur de l’ancien plugin sieve qui était présent sur la version 1 de dovecot. Il permet de trier les mails en fonction de différents critères.
Installez le port dovecot2-pigeonhole et créez le fichier 90-sieve.conf dans le répertoire conf.d de dovecot.
service managesieve-login {
inet_listener sieve {
port = 4190
}
# Number of connections to handle before starting a new process. Typically
# the only useful values are 0 (unlimited) or 1\. 1 is more secure, but 0
# is faster. <doc/wiki/LoginProcess.txt>
#service_count = 1
# Number of processes to always keep waiting for more connections.
#process_min_avail = 0
# If you set service_count=0, you probably need to grow this.
#vsz_limit = 64M
}
service managesieve {
# Max. number of ManageSieve processes (connections)
process_limit = 1024
}
# Service configuration
protocol sieve {
# Maximum ManageSieve command line length in bytes. ManageSieve usually does
# not involve overly long command lines, so this setting will not normally need
# adjustment
#managesieve_max_line_length = 65536
# Maximum number of ManageSieve connections allowed for a user from each IP address.
# NOTE: The username is compared case-sensitively.
#mail_max_userip_connections = 10
# Space separated list of plugins to load (none known to be useful so far). Do NOT
# try to load IMAP plugins here.
#mail_plugins =
# MANAGESIEVE logout format string:
# %i - total number of bytes read from client
# %o - total number of bytes sent to client
#managesieve_logout_format = bytes=%i/%o
# To fool ManageSieve clients that are focused on CMU's timesieved you can specify
# the IMPLEMENTATION capability that the dovecot reports to clients.
# For example: 'Cyrus timsieved v2.2.13'
#managesieve_implementation_string = Dovecot Pigeonhole
# Explicitly specify the SIEVE and NOTIFY capability reported by the server before
# login. If left unassigned these will be reported dynamically according to what
# the Sieve interpreter supports by default (after login this may differ depending
# on the user).
#managesieve_sieve_capability =
#managesieve_notify_capability =
# The maximum number of compile errors that are returned to the client upon script
# upload or script verification.
#managesieve_max_compile_errors = 5
# Refer to 90-sieve.conf for script quota configuration and configuration of
# Sieve execution limits.
}
plugin {
# Used by both the Sieve plugin and the ManageSieve protocol
sieve = ~/.dovecot.sieve
sieve_dir = ~/sieve
sieve_default = /usr/local/etc/dovecot/conf.d/sieve/default
}
Enfin, créez le fichier /usr/local/etc/dovecot/conf.d/sieve/default contenant le script suivant (remplacez Spam par le répertoire de votre choix. Il peut être idéal d’auto créer la boîte si elle n’existe pas via dovecot).
require "fileinto";
if header :contains "X-Spam-Flag" ["YES"] {
fileinto "Spam";
stop;
}
Vous avez désormais un serveur avec spamassassin et un tri automatique des mails !