Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

 proseguiamo con l' installazione di rspamd

 

per usare rspamd dobbiamo installare redis che viene utilizzato come supporto di memorizzazione e cache

 

apt install redis-server

 

quindi aggiungiamo i repository di rspamd

 

Rspamd serve a contrastare lo spam e aumentare lo score delle nostre mail ,con rspamd gestiremo sia le chiavi DKIM (che certificano l origine certa della mail) che i record DMARC del  DNS .

 

per ubuntu:

wget -O- https://rspamd.com/apt-stable/gpg.key | sudo apt-key add -
echo "deb http://rspamd.com/apt-stable/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/rspamd.list

 

per debian 10:

 

wget -O- https://rspamd.com/apt-stable/gpg.key | apt-key add -
echo "deb http://rspamd.com/apt-stable/ buster main" | sudo tee -a /etc/apt/sources.list.d/rspamd.list

 

dopodiche possiamo verificare che sia stata installata la chiave con :

 

apt-key list

 

ci deve rispondere con verie righe tra cui :

 

pub rsa4096 2015-07-28 [SC]
3FA3 47D5 E599 BE45 95CA 2576 FFA2 32ED BF21 E25E
uid [ unknown] Rspamd Nightly Builds (Rspamd Nightly Builds) <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.;
sub rsa4096 2015-07-28 [E]

 

possiamo ora procedere con :

 

apt update
apt install rspamd

 

 

rspamd utilizza un metodo di configurazione a piu' file

abbiamo  , in /etc/rspamd i file di configurazione che vengono portati dal pacchetto che installiamo, le nostre configurazioni andranno fatte in


 

/etc/rspamd/local.d
/etc/rspamd/override  (dir che non e' creata in automatico su debian)

 

in pratica, le conf fatte in local.d sofrascrivono i valori di default , e le conf in override sovrascrivono i valori di default e di local.d

 

un esempio abbastanza chiaro è disponibile qui : https://rspamd.com/doc/faq.html#what-are-the-locald-and-overrided-directories

l' effetto delle nostre configurazioni puo' esser analizzato col comando

 

rspamadm configdump 
rspamadm configdump worker 

 

che ci fa vedere tutta la conf, oppure solo la conf dei worker

 

inziiamo quindi a modificare/creare il file

 

/etc/rspamd/local.d/worker-normal.inc

 

ove  indicheremo l' ip e la porta su cui il servizio deve rimanere in ascolto, la porta di default è la 11333:

bind_socket = "127.0.0.1:11333";

Configurare il proxy tra Postfix e Rspamd, mettendolo in ascolto sulla porta  11332

creiamo il file     /etc/rspamd/local.d/worker-proxy.inc

 

bind_socket = "127.0.0.1:11332";

 

configurare una password per il worker. La password va generata col seguente comando :

rspamadm pw --encrypt -p your_secret_password

ricordarsi di settare la propria password

si avra un output del tipo :

rspamadm pw --encrypt -p your_secret_password
$2$93qin9nkifzjpr7taqhs9guua888tnny$dnys6um6xm1gb1amgnz9hocuz7grxuk5z9yjw87psrk6yu641oiy

scriviamo la password nel file /etc/rspamd/local.d/worker-controller.inc usando il risultato criptato di rspamadm:

password = "$2$93qin9nkifzjpr7taqhs9guua888tnny$dnys6um6xm1gb1amgnz9hocuz7grxuk5z9yjw87psrk6yu641oiy";

 

configurariamo rspamd per lavorare con redis , creiamo il file

/etc/rspamd/local.d/classifier-bayes.conf

 

servers = "127.0.0.1";
backend = "redis";

 

creiamo il file per l' header "milter"

 /etc/rspamd/local.d/milter_headers.conf:

use = ["x-spamd-bar", "x-spam-level", "authentication-results"];

a questo punto possiamo riavviare il servizio rspamd e verificare che sia attivo

 

service rspamd restart
service rspamd status

aggiungiamo un  proxy alla configurazione di uno dei siti che abbiamo fatto su  Nginx (ad esempio: /etc/nginx/sites-enabled/mail.example.com.conf)

un proxy web è un componente che prende le richieste dalla porta 80 o 443 o quella che è configurata e le gira ad un entita esperna al server web , in questo caso le passa ad un server web in ascolto sull' interfaccia localhost / 127.0.0.1 porta 11334 , e di ritrorno gira le risposte al client esterno

 

...
location /rspamd {
    proxy_pass http://127.0.0.1:11334/;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
...

riavviamo Nginx:

service nginx restart

ora possiamo accedere all' interfaccia web di Rspamd all' indirizzo: http://your_servers_ip/rspamd/  per autenticarsi utilizzare la password che si è configurato primacol comando rspamadm pw.

notare lo / finale, se lo saltiamo otterremo una pagina senza css .....

 

a questo punto passiamo alla configurazione di Postfix con rspamd , aggiungiamo alla conf di postfixcol comando  postconf:

postconf -e "milter_protocol = 6"
postconf -e "milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}"
postconf -e "milter_default_action = accept"
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"

riavviamo postfix per rendere effettive le modifiche

 

service postfix restart

 

 

quindi passiamo alla configurazione di dovecot

 

 

Dovecot  è gia installato sul sistema, dobbiamo aggiungere la configurazione del modulo "filtro sieve" e l' integrazione con Rspamd.

 

apt install dovecot-sieve dovecot-managesieved

modifichiamo il file  /etc/dovecot/conf.d/20-lmtp.conf aggiungendo l' indirizzo nostro di postmaster (non lasciate example.com!!!!) e la riga sul plugin:

...
protocol lmtp {
  postmaster_address = Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
  mail_plugins = $mail_plugins sieve
}
...

modifichiamo il  file /etc/dovecot/conf.d/20-imap.conf :

...
protocol imap {
  ...
  mail_plugins = $mail_plugins imap_quota imap_sieve
  ...
}
...

Editiamo il file /etc/dovecot/conf.d/20-managesieve.conf :

...
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
}
...
service managesieve {
  process_limit = 1024
}
...

ora il file /etc/dovecot/conf.d/90-sieve.conf:

plugin {
    ...
    # sieve = file:~/sieve;active=~/.dovecot.sieve
    sieve_plugins = sieve_imapsieve sieve_extprograms
    sieve_before = /var/vmail/mail/sieve/global/spam-global.sieve
    sieve = file:/var/vmail/mail/sieve/%d/%n/scripts;active=/var/vmail/mail/sieve/%d/%n/active-script.sieve

    imapsieve_mailbox1_name = Spam
    imapsieve_mailbox1_causes = COPY
    imapsieve_mailbox1_before = file:/var/vmail/mail/sieve/global/report-spam.sieve

    imapsieve_mailbox2_name = *
    imapsieve_mailbox2_from = Spam
    imapsieve_mailbox2_causes = COPY
    imapsieve_mailbox2_before = file:/var/vmail/mail/sieve/global/report-ham.sieve

    sieve_pipe_bin_dir = /usr/bin
    sieve_global_extensions = +vnd.dovecot.pipe
    ....
}

creiamo una directory per gli script di sieve:

mkdir -p /var/vmail/mail/sieve/global

creiamo un filtro globale per sieve nel file /var/vmail/mail/sieve/global/spam-global.sieve

serve a spostare le email contrassegnate come spam nella cartella span:

require ["fileinto","mailbox"];

if anyof(
    header :contains ["X-Spam-Flag"] "YES",
    header :contains ["X-Spam"] "Yes",
    header :contains ["Subject"] "*** SPAM ***"
    )
{
    fileinto :create "Spam";
    stop;
}

 

nome file errato - riproposto sotto , manca qualche cosa???

creiamo lo script /var/vmail/mail/sieve/global/report-spam.sieve nella guida originale il nome file era sbagliato , e cercando in giro col nomefile corretto ho trovato due risutlati che sembrano suggerire un comportamento simile a report-ham , quindi lascio lo stesso contenuto, se qualcuno vuole spiegarmi di piu' le spiegazioni sono ben accette:

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];

 

 

creiamo lo script /var/vmail/mail/sieve/global/report-ham.sieve che sarà richiamato ogni volta che spostiamo una mail manualmente nella cartella spam

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_ham"];

compiliamo gli script di sievee configuriamo i giusti permessi:

sievec /var/vmail/mail/sieve/global/spam-global.sieve
sievec /var/vmail/mail/sieve/global/report-spam.sieve
sievec /var/vmail/mail/sieve/global/report-ham.sieve
sudo chown -R vmail: /var/vmail/mail/sieve/

 

e stica , non funziona !!!!

report-spam: line 1: error: require command: unknown Sieve capability `vnd.dovecot.pipe'.
report-spam: line 1: error: require command: unknown Sieve capability `imapsieve'.
report-spam: line 2: error: unknown command 'pipe' (only reported once at first occurrence).
report-spam: error: validation failed.
sievec(root): Fatal: failed to compile sieve script '/var/vmail/mail/sieve/global/report-spam.sieve'

report-ham: line 1: error: require command: unknown Sieve capability `vnd.dovecot.pipe'.
report-ham: line 1: error: require command: unknown Sieve capability `imapsieve'.
report-ham: line 2: error: unknown command 'pipe' (only reported once at first occurrence).
report-ham: error: validation failed.
sievec(root): Fatal: failed to compile sieve script '/var/vmail/mail/sieve/global/report-ham.sieve'

 
 

penso che un punto di partenza possa essere ...

https://wiki2.dovecot.org/HowTo/AntispamWithSieve

 

dopo qualche giorno , gia me ne ero scordato, dando il comando

 

dovecot -n

 

vedo questo output , vado ad editare il file

# Pigeonhole version 0.5.4 ()
doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/20-managesieve.conf line 31: Unknown setting: service { service { service
doveconf: Error: managesieve-login: dump-capability process returned 89
doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/20-managesieve.conf line 31: Unknown setting: service { service { service

 

e ho trovato che mi ero scordato a chiudere una graffa ... ora dovecot -n non si lamenta piu' e la compilazione dei filtri sieve funziona ...

 

in pratica il comando ci fa vedere tutta la configurazione di dovecot in modo che possiamo capire se stiamo editando i file di configurazione in modo corretto e se stiamo editando il file giusto .... (da vari siti che ho visto puntano a file di configurazioni diversi)

 

dopo tutto questo sbatti ... guardo i log di rspamd in /var/log/rspamd/rspamd.log e me li ritrovo pieni di 

 

monitored; rspamd_monitored_dns_cb: DNS query blocked on multi.uribl.com (127.0.0.1 returned), possibly due to high volume

 in pratica http://uribl.com/refused.shtml ci spiega che il servizio è libero per piccole interrogazioni , controllano quante richieste arrivano da un dato dns e se superano il limite la risposta è picche ...

host -tTXT 2.0.0.127.multi.uribl.com
2.0.0.127.multi.uribl.com descriptive text "127.0.0.1 -> Query Refused. See http://uribl.com/refused.shtml for more information [Your DNS IP: xxx.xxx.xx.xx]"

 allo stato  attuale mi sembra di capire che le soluzioni siano 3

  • pagare
  • uso un dns server che non ha fatto molte richieste
  • mi faccio il mio dns server ....

 

ma mi serve davvero per quello che devo fare???

 

Creazione delle chiavi DKIM

 

DomainKeys Identified Mail (DKIM)  è un metodo di autenticazione della mail ideato per riconoscere le mail di sppofing , serve a verificare che l' origine della mail sia chi dice di essere, e lo si fa aggiungendo una firma digitale agli haeder della mail , la verifica di questa firma da parte di chi riceve la mail usando la chiave pubblicha pubblicata sul record dns consente di validare il mittente

in praticail server di posta ricevente riceve la mail , legge la firma, legge la chiave pubblica sul record dns, fa una verifica, è  positiva? la mail arriva dal server corretto , se la mail arrivasse da un server che impersona il mio server mail ma non lo è non avrebbe la possibilita di superare il controllo della firma non avendo la chiave privata

siccome potremmo avere piu' server mail sul nostro dominio, nel processo va identificato un dkim key selector , ossia un sellettore della chiave, in modo da porte avere nei record dns piu' chiavi, indicate dai selettori e ogni server utilizzare la giusta chiave

 

iniziamo col creare la directory dove conservare i file delle chiavi e generiamo le chiavi tramite il comando rspamadm .

nel seguente esempio utilizziamo  il nome mail come selettore DKIM . generiamo cosi una coppia di chiavi pubblica/privata) che puo' esser utilizzata per tutti idomini che gestirà il nostro server di posta.

mkdir /var/lib/rspamd/dkim/
rspamadm dkim_keygen -b 2048 -s mail -k /var/lib/rspamd/dkim/mail_selector.key > /var/lib/rspamd/dkim/mail_selector.pub

nella directory troveremo quindi i due file:

  • mail_selector.key - il file della chiave privata
  • mail_selector.pub - il file della chiave pubblica

creiamo un nuovo file /etc/rspamd/local.d/dkim_signing.conf per istruire Rspamd su dove guardare per trovare la chiave DKIM e il nome del selettore .

l'a terza riga abilita la firma  DKIM per gli indirizzi alias

l ultima riga gli stiamo dicendo di mantenere il subdominio se c'e' e di non levarlo (questo lo spiego nella sezione relativa ai test):

selector = "mail_selector";
path = "/var/lib/rspamd/dkim/$selector.key";
allow_username_mismatch = true;
use_esld = False;

Rspamd supporta anche la firma ARC ,usiamo lo stesso file di configurazione copiandolo

cp  /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf

riavviamo Rspamd:

service rspamd restart

 

DNS settings

ora siamo quasi pronti, e dobbiamo aggiungere un record TXT al nostro pannello DNS che indichi quale firma e selettore utilizza il nostro server , aggiungiamo quindi al chiave pubblica che si trova in .

 

cat /var/lib/rspamd/dkim/mail.pub

conterra una cose del tipo:

mail_selector._domainkey IN TXT ( "v=DKIM1; k=rsa; "
	"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxzllrHkbUwSR24B6iG+TgNTOU43lZhTPJemo8PKXkgaVppGJ57tlWOe9U321Qk+Ksk9qoukR4f39TCMQdAgtEPFpWSBWJJE9C2SmNz38SmhTC0AkvIzBxCdatitK2aWjHq4s9bsoQ1gIQlXKM+V7GbN2LFCBfvAU7ElBQk+QG2DuxGD/XNDLQWloYEWcqkUfxlHr0znoY86jkglVZ"
	"nhi/cAoE0SbzjphCtibT9T1w6AztxV1yK2VTJPpBFdtAsP1Sa3GDbTn0HATHUJI8eOIXtFcIBbYisiOIWjisE3TXFpvkS69Q0gvxVFYDnftLvsf5AticeygdMOVbK1o3T4Z7QIDAQAB"
) ;

va aggiunta al nostro pannello dns come recorrd TXT

 

non so se sia per tutti, ma nel mio pannello dns ho creato un record TXT

mail_selector_domainkey e come valore ho messo

 

"v=DKIM1; k=rsa;  p=MIIB_stringa_molto_lunga_254_byte_jkglVZnhi/cAaltra_stringa_lungaQAB"

 

con una sola apertura e chiusura di virgollette, e tutta la stringa lunga p= per intero senza spezzarla su due righe

 

 

 

 

aggiunta:

uno dei client connessi (telecamera dahua) mi mandava le mail in spam in quanto a differenza delle altre macava un parametro (MISSING MID) e avevo nei log questo errore:

 (default: T (add header): [6.00/15.00] [MISSING_MID(2.50){},SUBJ_EXCESS_BASE64(1.50){},CTYPE_MIXED_BOGUS(1.00){},MIME_BASE64_TEXT_BOGUS(1.00){},
MIME_BASE64_TEXT(0.10){},MIME_GOOD(-0.10){multipart/mixed;text/plain;},ARC_NA(0.00){},DKIM_SIGNED(0.00)

 

non potendo agire sulla telecamera dovevo agire sul server , cercando info va aggiunto la configurazione per multimap , ossia dei filtri che vengono valutati per variare il comportamento

ora posso scegliere se modificare il comportamento per indirizzo mittente, indirizzo destinatario , o per ip mittente, sono riuscito a far funzionare entrambi

 

in pratica va creato il file

/etc/rspamd/local.d/multimap.conf

SENDER_FROM_WHITELIST {
type="from";
map="file:///etc/rspamd/maps.d/address_whitelist.inc";
description = "Local from whitelist";
score = -2.5;
}


#IP_WHITELIST {
#      type = "ip";
#      map = "file:///etc/rspamd/maps.d/ip_whitelist.map";
#      action = "accept";
#}

 

 va riavviato rspamd dopo aver creato/modificato questo file

la prima sezione analizza per mittente ("from") riscontrando il mittente rispetto all' elenco contenuto in  /etc/rspamd/maps.d/address_whitelist.inc e abbassando il punteggio di spam di 2.5 punti , in pratica otteniamo:

 

(default: F (no action): [3.50/15.00] [MISSING_MID(2.50){},
SENDER_FROM_WHITELIST(-2.50){telecamera @ miodominio.it;},
SUBJ_EXCESS_BASE64(1.50){},CTYPE_MIXED_BOGUS(1.00){},
MIME_BASE64_TEXT_BOGUS(1.00){},MIME_BASE64_TEXT(0.10){},
MIME_GOOD(-0.10){multipart/mixed;text/plain;},ARC_NA(0.00){},
DKIM_SIGNED(0.00)

 

 

ora con un punteggio di 3.5 non è più considerato spam

 

il formato del file ip_whitelist.map è (una entry per riga)

telecamera @ miodominio.it
telecamera2 @ miodominio.it
telecamera3 @ miodominio.it
telecamera4 @ miodominio.it

 

la seconda sezione che vedete sopra commentata, invece agisce  in base all' indirizzo ip del mittente e fa saltare tutti i controlli successivi

(default: F (no action): [0.00/15.00] [IP_WHITELIST(0.00){192.168.1.7;}])

 

anche qui il formato del file ip_whitelist.map è (una entry per riga)

192.168.1.7
192.168.1.8
192.168.1.9

 

se vogliamo verificare che sia stata recepita la configurazione

rspamadm configdump |less       se vogliamo cercare a mano dentro l' intera configurazione

oppure

 rspamadm configdump multimap   per vedere la sola sezione multimap

 

multimap {
    freemail_envfrom {
        type = "from";
        description = "Envelope From is a Freemail address";
        score = 0;
        symbol = "FREEMAIL_ENVFROM";
        map = "https://maps.rspamd.com/freemail/free.txt.zst";
        filter = "email:domain";
    }
    SENDER_FROM_WHITELIST {
        score = -2.500000;
        map = "file:///etc/rspamd/maps.d/address_whitelist.inc";
        type = "from";
        description = "Local from whitelist";
    }
    freemail_replyto {
 

 

se vogliamo debuggurre il comportamento di map , possiamo editare il file

nano /etc/rspamd/logging.inc

 

debug_modules = [map]

 

 

ottentendo in /var/log/rspamd/rspamd.log:

 

(main) <xyoi7b>; map; rspamd_parse_kv_list:
 insert key only pair: telecamera @ miodominio.it -> ; line: 0
(controller) <b7hbnu>; map; rspamd_parse_kv_list: 
 insert key only pair: 192.168.1.7 -> 1; line: 0

 

 

 

step precedenti:

introduzione

postfixadmin, let's encrypt e nginx 

postfix e dovecot

step successivi :

roundcube

test finali

 

Vai all'inizio della pagina