====== 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