User Tools

Site Tools


doc:appunti:linux:sa:postfix-policyd

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
doc:appunti:linux:sa:postfix-policyd [2013/02/04 16:48] – created niccolodoc:appunti:linux:sa:postfix-policyd [2021/02/09 10:19] – [postfix-policyd] niccolo
Line 1: Line 1:
 ====== postfix-policyd ====== ====== 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//. 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 [[http://packages.qa.debian.org/p/postfix-policyd.html|pagina del pacchetto sorgente]]. +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 Wheezy ===== 
 + 
 +I sorgenti per Squeeze si riescono a compilare su Wheezy: 
 + 
 +<code> 
 +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 
 +</code> 
 + 
 +===== 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: 
 + 
 +<code> 
 +CREATE DATABASE postfixpolicyd; 
 +CREATE USER postfixpolicyd@localhost IDENTIFIED BY 'MySecret'; 
 +GRANT ALL ON postfixpolicyd.* TO postfixpolicyd@localhost; 
 +FLUSH PRIVILEGES; 
 +</code> 
 + 
 +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]]): 
 + 
 +<file> 
 +SYSLOG_FACILITY="LOG_MAIL|LOG_INFO" 
 +</file> 
 + 
 +altrimenti si incappa nell'errore (syslog): 
 + 
 +<code> 
 +postfix-policyd: fatal: didn't find priority 'LOG_IFOO', exiting 
 +</code> 
 + 
 +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: 
 + 
 +<file> 
 +DEBUG=1 
 + 
 +GREYLISTING=0 
 +SENDERTHROTTLE=1 
 + 
 +SENDER_THROTTLE_SASL=1 
 +SENDER_THROTTLE_HOST=0 
 +SENDERMSGLIMIT=25 
 +SENDERRCPTLIMIT=50 
 +SENDERTIMELIMIT=15m 
 +</file> 
 + 
 +**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: 
 + 
 +<code sql> 
 +SELECT _from, _count_max, _count_cur, _rcpt_max, _rcpt_cur, _rcpt_tot FROM throttle; 
 +</code> 
 + 
 +Dopo aver avviato il demone si deve dire a Postfix di fare un check sul servizio **postfix-policyd** per ogni messaggio: 
 + 
 +<file> 
 +smtpd_relay_restrictions = 
 +    check_policy_service inet:127.0.0.1:10031, 
 +    permit_sasl_authenticated, 
 +    reject 
 +</file> 
 + 
 +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: 
 + 
 +<code> 
 +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 
 +</code> 
 + 
 +È 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: 
 + 
 +<code sql> 
 +SELECT _from, _count_cur FROM throttle ORDER BY _count_cur ASC; 
 +</code> 
 + 
 +Per resettare i contatori manualmente: 
 + 
 +<code sql> 
 +UPDATE throttle SET _count_cur = 0, _rcpt_cur = 0 WHERE _from = 'login-name'; 
 +</code> 
 + 
 +===== Cleanup cronjob ===== 
 + 
 +Le operazioni di expire e cleanup sul database vanno eseguite da un cronjob:
  
 <code> <code>
 /usr/lib/postfix-policyd/cleanup -c /etc/postfix-policyd.conf /usr/lib/postfix-policyd/cleanup -c /etc/postfix-policyd.conf
 </code> </code>
 +
doc/appunti/linux/sa/postfix-policyd.txt · Last modified: 2024/04/15 15:21 by niccolo