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:
Permetre el servei SMTP (port 25)
Permetre SMTPS (port 465)
Permetre IMAP (port 143)
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:
Recarregar la configuració de systemd
Activar serveis per a l’arrencada
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):