Spamassassin - Configurar filtrado bayesiano

En esta entrada se verá como configurar el filtrado bayesiano de Spamassassin usando MySQL/MariaDB para almacenar los tokens.

Crear la base de datos

Descargar el esquema SQL

Descargar el esquema SQL para Spamassassin desde el Repositorio Spamassassin. Existen diferentes versiones del esquema SQL en función de la versión de Spamassassin.

Si no quiere complicaciones, copia y pega las siguientes líneas en el terminal para descargar el esquema SQL correspondiente a la versión de Spamassassin instalada en el sistema.

1
2
SPAMASSASIN_VERSION=$(spamassassin -V | head -n1 | awk 'BEGIN {FS=" "}; {print $3}' | sed 's/\./_/g')
wget http://svn.apache.org/repos/asf/spamassassin/tags/spamassassin_release_${SPAMASSASIN_VERSION}/sql/bayes_mysql.sql -O /root/spamassassin_${SPAMASSASIN_VERSION}_bayes_mysql.sql

Importar el esquema SQL

El siguiente paso es crear la BD, importar el esquema SQL y por último crear el usuario para Spamassassin.

1
2
3
4
5
6
7
8
PASS=mysql-root-user-password
SA_DB=sa_bayes
SA_USER=sa-user
SA_PASSWORD=sa-password
mysql -u root -p$PASS -e "CREATE DATABASE $SA_DB;"
mysql -u root -p$PASS $SA_DB < /root/spamassassin_${SPAMASSASIN_VERSION}_bayes_mysql.sql
mysql -u root -p$PASS -e "GRANT SELECT, INSERT, UPDATE, DELETE ON $SA_DB.* TO $SA_USER@localhost IDENTIFIED BY '$SA_PASSWORD';"
mysql -u root -p$PASS -e "FLUSH PRIVILEGES;"

El esquema SQL debe ser similar a:

1
2
3
4
5
6
7
8
9
10
[root@mail /]# mysql -u root -p$PASS -e "use $SA_DB; show tables;"
+--------------------+
| Tables_in_sa_bayes |
+--------------------+
| bayes_expire |
| bayes_global_vars |
| bayes_seen |
| bayes_token |
| bayes_vars |
+--------------------+

Configurar Spamassassin

Es necesario indicar a Spamassassin donde se encuentra la base de datos tanto para almacenar los tokens cuando se invoca a sa-learn como para poder ejecutar el filtrado bayesiano de los nuevos correos.

Para ello es necesario editar el archivo /etc/mail/spamassassin/local.cf y editar las siguientes líneas de configuración para indicar la localización de la base de datos y las credenciales de acceso:

1
2
3
4
5
6
7
8
9
10
# Store bayesian data in MySQL.
# Please make sure you have correct server address, port and database name.
bayes_store_module Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn DBI:mysql:sa_bayes:127.0.0.1:3306
# SQL username and password.
bayes_sql_username db_username
#bayes_sql_password 'DFRT#fev43c%5'
bayes_sql_password db_password

Iniciar el aprendizaje de tokens

Para iniciar el aprendizaje de tokens a partir de los correos tan solo es necesario invocar sa-learn con la ruta donde se localizan los mensajes y al menos uno de los siguientes parámetros:

  1. --spam, para iniciar el aprendizaje de tokens a partir de mensajes de spam.
  2. --ham, para iniciar el aprendizaje de tokens a partir de mensajes legítimos.

Ejemplo:

1
2
3
4
5
6
7
8
[root@mail /]# sa-learn --spam /var/vmail/vmail1/guillen.io/antonio/Maildir/.Junk/cur/*
Learned tokens from 480 message(s) (480 message(s) examined)
[root@mail /]# mysql -usa_user -psa_password -e "SELECT COUNT(*) FROM sa_bayes.bayes_token"
+----------+
| COUNT(*) |
+----------+
| 106328 |
+----------+

Contenidos
  1. 1. Crear la base de datos
    1. 1.1. Descargar el esquema SQL
    2. 1.2. Importar el esquema SQL
  2. 2. Configurar Spamassassin
  3. 3. Iniciar el aprendizaje de tokens