Combattere lo SPAM ed aumentare la sicurezza di un Linux Mail Server con Qmail e Spamdyke


Oggi, per chi amministra server che offrono servizi agli utenti, rendere sicure le proprie macchine richiede sempre maggiore sforzo nel cercare di garantire la confidenzialità e l’autenticità dei dati ospitati. Sicuramente, tra i servizi più usati (ed attaccati) ci sono quelli relativi alla posta elettronica.
In questa guida non andrò ad analizzare attacchi particolari, come può essere un attacco Ddos ( distributed denial of service), ma vedremo come poter proteggere una installazione di Mail Server QMAIL da diverse tipologie di attacchi adottati dagli spammers ( ovvero, individui autori di messaggi spam che inviano messaggi identici (o con qualche personalizzazione) a migliaia di indirizzi e-mail.

 

Prerequisiti

Un server QMAIL configurato e correttamente funzionante (nell’esempio specifico di questa guida si prenderà per riferimento la versione di qmailtoaster).

 

Premessa

In aggiunta alle funzionalità di Spamassassin, andremo di seguito ad installare il software Spamdyke, che effettua un ulteriore controllo basato su alcune caratteristiche dei server che inviano email (esistenza di reverse DNS name statico e non assegnato dinamicamente, corrispondenza tra l’IP effettivo e quello restituito da reverse DNS name, esistenza di un valido MX exchanger per il dominio del mittente, filtri blacklist, …).
Spamdyke è in sostanza un filtro per monitorare e intercettare le connessioni SMTP tra un host remoto e un server qmail. Lo spam viene bloccato mentre il server remoto (spammer) è ancora collegato; oltre a tutti i filtri anti-spam, spamdyke comprende anche una serie di funzioni per migliorare qmail (senza la necessità di dover applicare patch o ricompilare lo stesso qmail!).
Il sito da prendere come riferimento, per ogni mancanza in questa guida, è quello del fornitore del software e ci potete arrivare dal seguente link:
http://www.spamdyke.org/

 

Installazione

Nel momento in cui scrivo, la versione attuale dello Spamdyke è la 4.3.0, di conseguenza i comandi per l’installazione andranno personalizzati per la versione che andrete poi ad installare. Pronti?
Per prima cosa posizionatevi nella console del vostro server QMAIL in un direttorio dove andremo ad effettuare il download dello spamdyke e la relativa compilazione. Eccovi i comandi per lo scarico, la compilazione ed il posizionamento nel sistema:

wget http://www.spamdyke.org/releases/spamdyke-4.3.0.tgz
tar -xzvf spamdyke-4.3.0.tgz
cd spamdyke-4.3.0/spamdyke
./configure
make
cp spamdyke /usr/local/bin/

 

Aggangio dello spamdyke allo script di esecuzione del servizio smtp

Nella nostra installazione di qmailtoaster, lo script da editare è presente in questo percorso:
/var/qmail/supervise/smtp/run
andremo quindi ad editarne il contenuto per adattarlo a questo modello:

#!/bin/sh
QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`
BLACKLIST=`cat /var/qmail/control/blacklists`
SMTPD="/var/qmail/bin/qmail-smtpd"
TCP_CDB="/etc/tcprules.d/tcp.smtp.cdb"
RBLSMTPD="/usr/bin/rblsmtpd"
HOSTNAME=`hostname`
VCHKPW="/home/vpopmail/bin/vchkpw"
CHKPW5="/bin/cmd5checkpw"
REQUIRE_AUTH=0

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; the                                              n
  echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
  echo /var/qmail/supervise/smtp/run
  exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
  echo "No /var/qmail/control/rcpthosts!"
  echo "Refusing to start SMTP listener because it'll create an open relay"
  exit 1
fi

exec /usr/bin/softlimit -m 50000000 \
     /usr/bin/tcpserver -v -R -H -l $HOSTNAME -x $TCP_CDB -c "$MAXSMTPD" \
     -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
     /usr/local/bin/spamdyke -f /etc/spamdyke.conf \
     $RBLSMTPD $BLACKLIST $SMTPD $CHKPW5 /bin/true 2>&1

 

Configurazione dello Spamdyke

Andiamo ora a creare il file di configurazione dello spamdyke partendo come base dal file di esempio fornito a corredo del pacchetto che abbiamo scaricato precedentemente. Eseguiamo quindi il comando:

cp ../documentation/spamdyke.conf.example /etc/spamdyke.conf

tale file creato deve ora essere modificato come meglio ritenete opportuno.
Al solo scopo di fornire una linea guida alla corretta compilazione di quest’ultimo, di seguito ve ne mostro uno:

#Logging
log-level=info
log-target=stderr

#Temporizzazioni
greeting-delay-secs=5
max-recipients=10
connection-timeout-secs=600
idle-timeout-secs=30

#Graylisting
graylist-dir=/var/db/spamdyke/graylist
graylist-level=always
graylist-min-secs=300
graylist-max-secs=1814400

#SMTP Auth e Permessi di accesso
access-file=/etc/tcp.smtp
local-domains-file=/var/qmail/control/rcpthosts
local-domains-file=/var/qmail/control/morercpthosts
smtp-auth-command=/usr/local/vpopmail/bin/vchkpw /usr/bin/true
smtp-auth-level=always-encrypted
tls-level=smtp
tls-certificate-file=/usr/local/vpopmail/servercert.pem

#Check
reject-missing-sender-mx

filter-level=normal
relay-level=normal
max-recipients=40
hostname=mx.gufi.org
policy-url=http://www.vostromailserver.ext/report/

ip-blacklist-file=/var/db/spamdyke/ip_blacklist.txt
sender-blacklist-file=/var/db/spamdyke/sender_blacklist.txt
sender-whitelist-file=/var/db/spamdyke/sender_whitelist.txt
ip-whitelist-file=/var/db/spamdyke/ip_whitelist.txt
dns-blacklist-file=/var/db/spamdyke/dnsrbl.txt
dns-whitelist-file=/var/db/spamdyke/dns_whitelist.txt
rdns-blacklist-file=/var/db/spamdyke/rdns_blacklist.txt
#Traduzioni
rejection-text-access-denied="Accesso negato."
rejection-text-auth-failure="Autenticazione fallita."
rejection-text-auth-unknown="Metodo di autenticazione non supportato."
rejection-text-earlytalker="Violato il protocollo SMTP."
rejection-text-empty-rdns="Non hai un reverse DNS valido."
rejection-text-graylist="Sei in graylist. Riprova piu' tardi."
rejection-text-ip-blacklist="Ti ho messo in blacklist."
rejection-text-ip-in-cc-rdns="Non hai un reverse DNS di mio gradimento."
rejection-text-ip-in-rdns-keyword-blacklist="Hai un reverse DNS davvero brutto."
rejection-text-local-recipient="Indirizzo destinatario non valido."
rejection-text-max-recipients="Troppi destinatari."
rejection-text-missing-sender-mx="Non hai un record MX valido"
rejection-text-rdns-blacklist="Il tuo dominio e' in blacklist"
rejection-text-recipient-blacklist="Non accetto mail dal tuo indirizzo."
rejection-text-reject-all="Mail non accettata."
rejection-text-relaying-denied="Relaying non consentito dal tuo IP."
rejection-text-sender-blacklist="Indirizzo mittente in blacklist."
rejection-text-smtp-auth-required="Autenticazione richiesta."
rejection-text-timeout="Timeout. Digita piu' in fretta la prossima volta."
rejection-text-tls-failure="Negoziazione TLS fallita."
rejection-text-unresolvable-rdns="Dove e' finito il tuo rDNS?"
rejection-text-zero-recipients="Devi specificare almeno un destinatario valido."

Inutile a dirsi che tutti i file usati all’interno di questo modello, se non presenti, andranno creati.

Finito di personalizzare il file di configurazione eseguite i seguenti comandi per riavviare QMAIL:

svc -d /var/qmail/supervise/smtp
svc -u /var/qmail/supervise/smtp

Per il momento concludo qui questa guida. Se la riterrete utile non dimenticate di votarmi 🙂 e richiedte pure qualche approfondimento.

[Voti: 5    Media Voto: 9/5]
Scritto da Alessandro Consorti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *