====== postfix-policyd ======
:!: **ATTENZIONE**! Nelle versioni più recenti di Debian (es. **Debian 10 Buster**) il pacchetto **postfix-policyd** è stato rimosso, una alternativa è **[[policyd-rate-limit]]** :!:
Problema: limitare il numero di mail inviate da un singolo utente (identificato da [[http://www.postfix.org/SASL_README.html|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** [[http://packages.qa.debian.org/p/postfix-policyd/news/20110618T163914Z.html|è stato rimosso]] da Debian, questa la [[https://tracker.debian.org/pkg/postfix-policyd|pagina del pacchetto sorgente]].
===== Porting to Debian 7 Wheezy =====
I sorgenti per **Debian 6 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''**.
**ATTENZIONE:** L'opzione **ENGINE=MyISAM** è necessaria, altrimenti **postfix-policyd** non sarà in grado di eseguire gli statement **INSERT DELAYED INTO** usati per popolare le tabelle del database,
Questa una traccia per creare database e utente in MySQL:
CREATE DATABASE postfixpolicyd;
CREATE USER postfixpolicyd@localhost IDENTIFIED BY 'MySecret';
GRANT ALL ON postfixpolicyd.* TO postfixpolicyd@localhost;
FLUSH PRIVILEGES;
Anche il file di configurazione (**''/etc/postfix-policyd.conf''**) va corretto, togliendo gli spazi dalla stringa **''SYSLOG_FACILITY''** (vedere questo [[http://www.iredmail.org/forum/topic1215-iredmail-support-fatal-error-policyd-logifoo-possible-bug-solved.html|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_relay_restrictions =
check_policy_service inet:127.0.0.1:10031,
permit_sasl_authenticated,
reject
Nelle vecchie versioni di Postfix si doveva includere il controllo nella direttiva **smtpd_recipient_restrictions**, la nuova direttiva **smtpd_relay_restrictions** è preferibile perché viene applicata prima.
===== 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
È importante vedere la stringa **throttle=update(a)**, significa che è stata aggiornata la riga opportuna nel database per tenere aggiornati i contatori. Se invece si legge **throttle=bypass** significa che qualcosa non va, ad esempio che è stato impossibile eseguire la modifica nel database (vedere sopra l'opzione ''ENGINE=MyISAM'').
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