Realtime Block List (RBL) - qmail-dnsbl

4 ottobre 2025 by Roberto Puzzanghera 0 commenti

Changelog

  • 3 ottobre 2025:
    - Aggiunta la sezione Data Query Service, che risolve il problema del ban di spamhaus da connessioni fatte con DNS pubblico.

 

Una Realtime Block List (RBL) è una lista di indirizzi che il fornitore della lista RBL ritiene che sia sorgente di Spam.

  • Scarica la patch qmail-dnsbl
  • Autore: Fabio Busatto
  • Added support for welcomelists, TXT and A queries, configurable return codes 451 or 553 with custom messages (by Luca Franceschini)

Questa patch sostituisce il programma rblsmtpd dell'autore dello stesso qmail, Daniel Bernstein. Essa incorpora la parte riguardante il controllo nelle Block List all'interno di qmail-smtpd con il vantaggio che si può vedere l'envelope dalla lettura del log. Registrare l'envelope accanto all'IP bannato è importante per poter risalire sempre a che fine hanno fatto i messaggi non ricevuti e poter così dare risposte certe ai nostri utenti.

Un'altra miglioria di questa patch rispetto al vecchio rblsmtpd  è che gli utenti che si autenticano per inviare la posta da remoto con un IP dinamiconon vengono bannati e quindi possiamo ora attivare il filtro anche sulla porta 587.

Per attivare il check rbl è sufficnete aggiungere le liste favorite nel control file dnsbllist  (uno per riga) come segue:

cat > /var/qmail/control/dnsbllist << __EOF__
-b.barracudacentral.org
-zen.spamhaus.org
-psbl.surriel.com 
-bl.spamcop.net
__EOF__

Ora riavviamo qmail e controlliamo che le liste scelte siano attive:

> qmailctl restart
> qmail-showctl |grep dnsbl
dnsbllist: 
List at -zen.spamhaus.org configured for dnsbl check. 
List at -b.barracudacentral.org configured for dnsbl check. 
List at -psbl.surriel.com configured for dnsbl check. 
List at -bl.spamcop.net configured for dnsbl check.

Migliorie rispetto alla patch qmail-dnsbl originale

  • il file di default control/dnsbllist può essere sovrascritto con la variabile di ambiente DNSBLLIST
  • se la variabile di ambiente DNSBLSKIP è impostata, qmail-smtpd evita il controllo RBL
  • se control/dnsblfailclosed o DNSBLFAILCLOSED sono state definite, qmail-smtpd considera l'ip remoto come bloccato anche in caso di lookup failures (controllare il man di rblsmtpd per maggiori dettagli)
  • supporto per la variabile di ambiente RBLSMTPD (leggere il man di rblsmtpd per maggiori dettagli)
  • dnsbllist può contenere linee vuote e commenti con '#' all'inizio o alla fine della riga; gli spazi vuoti iniziali o finali sono rimossi automaticamente

Esempi

Chiama rbl per un record TXT, restituendo il codice 451: "451 http://www.spamhaus.org/query/bl?ip=30.50.20.3"

zen.spamhaus.org

Chiama rbl per un record TXT, restituendo il codice 553: "553 http://www.spamhaus.org/query/bl?ip=30.50.20.3"

-zen.spamhaus.org

Chiama rbl per un record A, personalizzando il messaggio restituiro con un codice 451: "451 Message rejected"

zen.spamhaus.org:Message rejected

 Chiama rbl per un record A, personalizzando il messaggio di ritorno con codice 553: "553 Message rejected", the following syntaxes are allowed:

-zen.spamhaus.org:Message rejected
zen.spamhaus.org:-Message rejected
-zen.spamhaus.org:-Message rejected

Chiama rbl per un recor A, personalizzando il messaggio di ritorno con la variabile IP, rimpiazzata con l'IP remoto:

zen.spamhaus.org:Message blocked from %IP%

dns welcomelist A query:

+welcome.dnsbl.local:welcomelist test
+welcome.dnsbl.local

La seguente sintasi non è ammessa:

zen.spamhaus.org:
zen.spamhaus.org:-

Come evitare di essere bannati dalle RBL

Alla fine di questa guida mostrerò come settare fail2ban al fine di respingere IP sospetti anche per diminuire il numero di richieste alle liste RBL, evitando così di essere bannati a nostra volta da queste.

In alternativa, potete dare una occhiata a questa soluzione molto brillante che mi ha inviato Costel Balta, che persegue lo stesso obiettivo facendo però uso di shorewall, ipsets e swatch.

Una cosa a cui prestare particolare attenzione quando si configura il server sono i dns usati, ovvero è necessario evitare di evitare di scegliere quelli pubblici come quelli di google come 8.8.8.8 per risolvere i servizi di spamhaus (maggiori info qui). Questo causerebbe infatti un bypass delle nostre richieste, in quanto l'uso di dns pubblici non consentirebbe loro di pesare il nostro carico.

Usare il Data Query Service (DQS)

Se si usa un DNS pubblico per risolvere i domini (per esempio 8.8.8.8), spamhaus bloccherà le query. Ad esempio in SpamAssassin avremo:

0.0 URIBL_DBL_BLOCKED_OPENDNS ADMINISTRATOR NOTICE: The query to
dbl.spamhaus.org was blocked due to usage of an open resolver. 

In questo caso la soluzione è usare il Data Query Service (DQS), che consente di inviare query autenticate mediante una DQS Key e che è gratuito nel caso di traffico modico (30 giorni di prova gratuita in ogni caso).

E' necessario fare un account qui. Una volta dentro, andare alla pagina Products->Data Query Service e creare la propria DQS Key:

Supponendo che il contenuto della chiave sia xxxxxxxxxxxxxxxxxxxxxxx, cambiare l'impostazione in control/dnsbllist in

-xxxxxxxxxxxxxxxxxxxxxxx.zen.dq.spamhaus.net

Notare come ora il dominio sia diventato .net (quello libero era .org).

Installazione del plugin per SpamaAssassin

Intanto disabilitiamo le query ordinarie aggiungendo questo in /etc/mail/spamassassin/local.cf:

# disable spamhaus 
score URIBL_DBL_SPAM 0 
score URIBL_DBL_PHISH 0 
score URIBL_DBL_MALWARE 0 
score URIBL_DBL_ABUSE 0 
score URIBL_DBL_ABUSE_REDIR 0 
score URIBL_DBL_ABUSE_PHISH 0 
score URIBL_DBL_ABUSE_MALWARE 0 
score URIBL_DBL_BLOCKED 0 
score URIBL_DBL_BLOCKED_OPENDNS 0
# disable DNSWL 
score RCVD_IN_DNSWL_BLOCKED 0 
score RCVD_IN_DNSWL_MED 0 
score RCVD_IN_DNSWL_HI 0 
score RCVD_IN_DNSWL_LOW 0

Scaricare l'ultimo pacchetto:

git clone https://github.com/spamhaus/spamassassin-dqs

Le cose ora vanno in modo leggermente diverso a seconda che il servizio HBL sia abilitato o meno (lo è solo per gli account a pagamento).

Entrare nella cartella 4.0.0+ e lanciare il test per confermare che la nostra chiave sia valida anche per HBL (il chè non significa che sia pure abilitata):

sh hbltest.sh
	Please input your DQS key: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
	Looking up test record for HBL... done
	Your DQS key xxxxxxxxxxxxxxxxxxxxxxxxxxxx is enabled for HBL
	You can copy sh_hbl.cf and sh_hbl_scores.cf if you want HBL enabled

Ora è necessario modificare alcuni dei file di configurazione con il contenuto esatto della chiave (sostituire xxxxxxxxxxxxxxxxxxxxxxxxx con il contenuto della chiave):

sed -i -e 's/your_DQS_key/xxxxxxxxxxxxxxxxxxxxxxxxxxx/g' sh.cf
sed -i -e 's/your_DQS_key/xxxxxxxxxxxxxxxxxxxxxxxxxxx/g' sh_hbl.cf

Se si sta usando FreeBSD, i comandi cambiano leggermente:

sed -i "" -e 's/your_DQS_key/xxxxxxxxxxxxxxxxxxxxxxxx/g' sh.cf
sed -i "" -e 's/your_DQS_key/xxxxxxxxxxxxxxxxxxxxxxxx/g' sh_hbl.cf

Se non si ha HBL abilitato, è sufficiente copiare i due file seguenti nella cartella di configurazione:

cp sh.cf sh_scores.cf /etc/mail/spamassassin

Ora si proceda più sotto nella sezione test.

Se invece si ha HBL abilitato, modificare il file sh.pre nella prima riga:

loadplugin       Mail::SpamAssassin::Plugin::SH <config_directory>/SH.pm

E' necessario sostituire <config_directory> con la propria cartella di configurazione, che è /etc/mail/spamassassin. Quindi la riga diventa:

loadplugin       Mail::SpamAssassin::Plugin::SH /etc/mail/spamassassin/SH.pm

Se si ha una chiave con HBL abilitato, e assumendo che la cartella di configurazione sia /etc/mail/spamassassin, copiare lì i file di configurazione:

cp SH.pm sh.cf sh_scores.cf sh_hbl.cf sh_hbl_scores.cf sh.pre /etc/mail/spamassassin

Ora abilitare HBL modificando il file /etc/mail/spamassassin/v342.pre. E' necessario localizzare la riga:

loadplugin Mail::SpamAssassin::Plugin::HashBL

ed eventualmente rimuovere il cancelletto # iniziale.

Riavviare SpamAssassin:

spamdctl restart

Testare il setup in questo modo:

spamassassin --lint

se non si ottiene nulla come output allora il test è andato bene.

Testare il filtro

Andare alla pagina https://blt.spamhaus.com/ e inserire un indirizzo email valido. Quindi aggiungere la chiave DQS e lanciare i test:

Si otterrà un risultato del genere:

Qui HBL è disabilitato, mentre i messaggi con i test DBL e ZRD hanno apparentemente fallito. Assicurarsi che invece i messaggi con il test DBL e ZRD siano stati bloccati da SpamAssassin controllando la cartella spam::

Content analysis details:   (19.5 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 0.7 SPF_HELO_SOFTFAIL      SPF: HELO does not match SPF record (softfail)
-0.0 BAYES_20               BODY: Bayes spam probability is 5 to 20%
                            [score: 0.0573]
 0.0 DMARC_MISSING          Missing DMARC policy
 2.8 TXREP                  TXREP: Score normalizing based on sender's reputation
 8.0 SH_DBL_HEADERS         A domain found in headers (mail from, reply-to etc..)
                            is listed in DBL
                            [dbl-dqs.blt.spamhaus.net]
 8.0 SH_DBL_BODY            The domain of an email address found in body is listed in
                             DBL
                            [dbl-dqs.blt.spamhaus.net]
Content analysis details:   (12.1 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
-0.0 SPF_HELO_PASS          SPF: HELO matches SPF record
 8.0 SH_HELO_ZRD_VERY_FRESH The domain used in the HELO string is listed
                            in ZRD and the domain age is between 0 and 4
                            hours
                            [zrd-dqs.blt.spamhaus.net]
-0.0 BAYES_20               BODY: Bayes spam probability is 5 to 20%
                            [score: 0.1579]
 1.0 FORGED_SPF_HELO        No description available.
 0.4 KHOP_HELO_FCRDNS       Relay HELO differs from its IP's reverse DNS
 0.0 DMARC_MISSING          Missing DMARC policy
 2.7 TXREP                  TXREP: Score normalizing based on sender's reputation

Aggiungi un commento

qmail notes

Pay me a coffee:

PayPal - The safer, easier way to pay online.

LXC scripts
Other contents
Guide per gli utenti
Ultimi commenti
Vedi anche...
Articoli recenti

RSS feeds