Configuració de filtres anti-spam al servidor de correu

Ara explicaren com implementar un sistema de filtratge anti-spam en un servidor de correu basat en Dovecot, utilitzant SpamAssassin i Sieve. El sistema identificarà automàticament els correus spam i els mourà a la carpeta corresponent, mantenint la safata d’entrada neta.

Instal·lació de Components

Instal·larem els paquets necessaris per al filtratge de correu: Dovecot Pigeonhole (que inclou Sieve) i SpamAssassin amb les seves dependències.

dnf install dovecot-pigeonhole

dnf install spamassassin spamassassin

Configuració de Sieve a Dovecot

Configurarem el plugin Sieve que permet executar scripts de filtratge de correu. Aquests scripts s’executaran automàticament quan arribin nous correus.

vim /etc/dovecot/conf.d/90-sieve.conf

Afegim aquesta configuració al arxiu:

plugin {
# Ubicació dels scripts Sieve de l’usuari
sieve = file:~/sieve;active=~/.dovecot.sieve

# Script global per defecte (s’aplica a tots els usuaris)
sieve_global_path = /var/lib/dovecot/sieve/default.sieve

# Directori de scripts de l’usuari
sieve_dir = ~/sieve

# Directori de scripts globals
sieve_global_dir = /var/lib/dovecot/sieve/global/
}

Activem també el Sieve en el protocol LMTP:

vim /etc/dovecot/conf.d/20-lmtp.conf

I tornem a afegir, ara a aquest arxiu les següents línies:

protocol lmtp {
mail_plugins = $mail_plugins sieve
}

Creació del Script de Filtratge Global

Crearem un script Sieve global que filtrarà automàticament els correus marcats com a spam per SpamAssassin i els mourà a la carpeta “Spam” del correu.

Crear el directori per als scripts:

mkdir -p /var/lib/dovecot/sieve/global
chown -R vmail:vmail /var/lib/dovecot/sieve

Crear el script de filtratge:

vim /var/lib/dovecot/sieve/default.sieve

Contingut del script (Copiem les següents linies):

require [“fileinto”, “imap4flags”];

# Moure spam a la carpeta Spam
if header :contains “X-Spam-Flag” “YES” {
fileinto “Spam”;
stop;
}

# Filtre addicional per nivell alt de spam
if header :contains “X-Spam-Level” “**********” {
fileinto “Spam”;
setflag “\\Seen”;
stop;
}

# Filtre per puntuació de spam
if header :contains “X-Spam-Status” “Yes” {
fileinto “Spam”;
stop;
}

I finalment, compilem l’Script tornant a la terminal:

sievec /var/lib/dovecot/sieve/default.sieve

 

Configuració de SpamAssassin

Ara configurarem SpamAssassin perquè s’executi com a servei en segon pla (daemon) i analitzi els correus entrants per detectar spam.

Editem el seu fitxer de configuració:

vim /etc/sysconfig/spamassassin

I introduïm la configuració (Les explicacions de cada línia estan posades amb “#”)

# Opcions per al dimoni spamd
# -c: crear preferències per usuari
# -m5: màxim 5 fills
# -H: utilitzar directori home
SPAMDOPTIONS=”-c -m5 -H –razor-home-dir=/var/lib/spamassassin/.razor”

Seguidament, creem els directoris necessaris i assignem els permisos tornant a la terminal:

mkdir -p /var/lib/spamassassin/.razor
mkdir -p /var/lib/spamassassin/.spamassassin
chown -R spamd:spamd /var/lib/spamassassin
chmod 750 /var/lib/spamassassin

I finalment, Actualitzem les regles de SpamAssassin:

sievec /var/lib/dovecot/sieve/default.sieve

Solució del Problema de Timeout de SpamAssassin

SpamAssassin triga un temps en carregar totes les seves regles a l’inici. Configurarem systemd perquè el servei s’executi correctament sense que el sistema el mati per timeout. Aixi solucinem aquest problema.

Editem el seu fitxer de configuració:

systemctl edit –full spamassassin.service

El modifiquem per utilitzar Type=simple:

[Unit]
Description=Spamassassin daemon
After=network.target

[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/spamassassin
ExecStart=/usr/bin/spamd $SPAMDOPTIONS –nodetach
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target

Actualitzar les opcions a /etc/sysconfig/spamassassin:

vim /etc/sysconfig/spamassassin

Tornem a modificar l’arxiu anterior (eliminar -d perquè usem –nodetach):

SPAMDOPTIONS=”-c -m5 -H –razor-home-dir=/var/lib/spamassassin/.razor”

Integració amb Postfix

Configurarem Postfix (el servidor SMTP) perquè passi tots els correus entrants per SpamAssassin abans de lliurar-los als usuaris. Així apliquem el filtre anti-spam.

Editem el fitxer master.cf de Postfix:

vim /etc/postfix/master.cf

A continuació, afegim al final del fitxer (No eliminis cap altra configuració):

# Filtre de contingut amb SpamAssassin
spamassassin unix – n n – – pipe
user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Editem també main.cf per activar el filtre:

vim /etc/postfix/main.cf

Afegim o modifiquem:

# Filtrar tots els correus amb SpamAssassin
content_filter = spamassassin

Configuració del Tallafocs

Assegurarem que els ports necessaris per al correu estiguin oberts al tallafoc del servidor (firewall-cmd).

Introduïm a la terminal aquestes línies per permetre les connexions pels ports d’aquests serveis:

  1. Permetre el servei SMTP (port 25)

  2. Permetre SMTPS (port 465)

  3. Permetre IMAP (port 143)

  4. Permetre IMAPS (port 993)

firewall-cmd –permanent –add-service=smtp

firewall-cmd –permanent –add-service=smtps

firewall-cmd –permanent –add-service=imap

firewall-cmd –permanent –add-service=imaps

firewall-cmd –reload

Inici dels Serveis

Ara activarem i iniciarem tots els serveis necessaris perquè s’executin en l’arrencada del sistema.

Introduïm a la terminal aquestes línies per permetre les connexions pels ports d’aquests serveis:

  1. Recarregar la configuració de systemd

  2. Activar serveis per a l’arrencada

  3. Iniciar els serveis

systemctl daemon-reload

systemctl enable spamassassin

systemctl enable dovecot

systemctl enable postfix

systemctl start spamassassin

systemctl restart dovecot

systemctl restart postfix

 

Verificació del Sistema

Comprovarem que tots els serveis funcionen correctament i que SpamAssassin està processant els correus.

Comprovar l’estat dels serveis:

systemctl status spamassassin
systemctl status dovecot
systemctl status postfix

Verificar que SpamAssassin escolta al port 783:

ss -tlnp | grep 783

Comprovar els processos de SpamAssassin:

ps aux | grep spamd

Prova de Funcionament amb Capçaleres

Provarem que SpamAssassin afegeix correctament les capçaleres als correus analitzats. Aquesta prova ens confirma que el sistema està funcionant.

Executem la prova a la terminal

echo “Test de spam” | spamc

Sortida esperada (amb capçaleres X-Spam):

Cookie Consent Banner by Real Cookie Banner