Changelog
- 3 ottobre 2025:
- Aggiunta la sezione Data Query Service, che risolve il problema del ban dispamhaus
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 dirblsmtpd
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