This is an old revision of the document!
−Table of Contents
postfix-policyd
Problema: limitare il numero di mail inviate da un singolo utente (identificato da SASL) in un determinato periodo di tempo. Questo per bloccare lo spam che tramite botnet sfrutta account rubati.
Il programma policyd avrebbe tale funzione, più molte altre ({black|grey|white}listing, ecc.), peccato che non esista per Debian Wheezy. Il pacchetto postfix-policyd è stato rimosso da Debian, questa la pagina del pacchetto sorgente.
Porting to Wheezy
I sorgenti per Squeeze si riescono a compilare su Wheezy:
mkdir -p /usr/local/src/postfix-policyd cd /usr/local/src/postfix-policyd wget http://ftp.de.debian.org/debian/pool/main/p/postfix-policyd/postfix-policyd_1.82-2.dsc wget http://ftp.de.debian.org/debian/pool/main/p/postfix-policyd/postfix-policyd_1.82.orig.tar.gz wget http://ftp.de.debian.org/debian/pool/main/p/postfix-policyd/postfix-policyd_1.82-2.diff.gz dpkg-source -x postfix-policyd_1.82-2.dsc cd postfix-policyd-1.82/ dpkg-buildpackage -rfakeroot
Patch per l'installazione
File da modificare:
/usr/share/dbconfig-common/data/postfix-policyd/install/mysql
/etc/postfix-policyd.conf
/etc/init.d/postfix-policyd
Il programma richiede un database MySQL, purtroppo lo script per crearlo (/usr/share/dbconfig-common/data/postfix-policyd/install/mysql
) non è compatibile con la versione 5.5.24 e quindi durante l'installazione bisogna correggerlo sostituendo tutte le occorrenze di TYPE=MyISAM
con ENGINE=MyISAM
.
Anche il file di configurazione (/etc/postfix-policyd.conf
) va corretto, togliendo gli spazi dalla stringa SYSLOG_FACILITY
(vedere questo bug report):
SYSLOG_FACILITY="LOG_MAIL|LOG_INFO"
altrimenti si incappa nell'errore (syslog):
postfix-policyd: fatal: didn't find priority 'LOG_IFOO', exiting
Altro grave problema riguarda lo script /etc/init.d/postfix-policyd
, il parametro reload
non è supportato dal demone, va tolto dallo script perché altrimenti il demone muore.
Configurazione
Questi sono i parametri modificati in /etc/postfix-policyd.conf per disabilitare il greylisting e per attivare il throttling: sono consentiti al massimo 25 messaggi e 50 destinatari in 15 minuti:
DEBUG=1 GREYLISTING=0 SENDERTHROTTLE=1 SENDER_THROTTLE_SASL=1 SENDER_THROTTLE_HOST=0 SENDERMSGLIMIT=25 SENDERRCPTLIMIT=50 SENDERTIMELIMIT=15m
ATTENZIONE: Se si modificano i valori di SENDERMSGLIMIT
e SENDERRCPTLIMIT
nel file di configurazione bisogna aggiornare anche la tabella throttle
del database utilizzato da Policyd. Ecco come verificare i valori correnti per ciascun utente:
SELECT _from, _count_max, _count_cur, _rcpt_max, _rcpt_cur, _rcpt_tot FROM throttle;
Dopo aver avviato il demone si deve dire a Postfix di fare un check sul servizio postfix-policyd
per ogni messaggio:
smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:10031, permit_sasl_authenticated, reject
Verifica del funzionamento
In /var/log/mail.log
si legge:
postfix-policyd: rcpt=230, throttle=update(a), host=62.48.51.8, from=niccolo@example.com, to=niccolo@example.org, size=0/1024000000, quota=0/250000000, count=11/50(2), rcpt=2/3600(2), threshold=0%|20%|0%, sasl_username=niccolo
Collegandosi a MySQL è possibile vedere lo stato del throttling:
SELECT _from, _count_cur FROM throttle ORDER BY _count_cur ASC;
Per resettare i contatori manualmente:
UPDATE throttle SET _count_cur = 0, _rcpt_cur = 0 WHERE _from = 'login-name';
Cleanup cronjob
Le operazioni di expire e cleanup sul database vanno eseguite da un cronjob:
/usr/lib/postfix-policyd/cleanup -c /etc/postfix-policyd.conf