Newsgroup: it.comp.os.linux.sys
Titolo: postfix e limiti per utente

Conoscete un qualche addon o policy daemon per postfix che mi
permetta di definire alcuni limit per utente come ad esempio:
- quota per singolo messaggio
- numero massimo di messaggi al minuto/ore/giorni
- cosette simili...
Mi pare solo policyd permetta di fare quello che chiedo.
Esistono alternative?

 Esistono alternative?
Anche postfwd ï¿œ interessante.
Sembra *molto* valido, qualcuno lo usa in produzione?


carino...
Anzi, molto carino!
Mi associo alla domanda: c'ï¿œ chi lo usa di giï¿œ?
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
Fashion is a form of ugliness so intolerable that we have to alter it
every six months.
		-- Oscar Wilde


Io lo uso da oltre un anno in produzione su 3/4 server e finora non mi ha 
mai dato rogne.
L'ho scelto perchï¿œ permette di stabilire il blocco in base a punteggi, 
quindi mi consente di usare anche blacklist poco affidabili in unione ad 
altri fattori come l'helo o lo stato di provenienza dell'e-mail senza 
scomodare il pesante spamassassin.
-- 
Flavio Visentin
Scientists have finally discovered what's wrong with the female brain:
On the left side, there is nothing right, and on the right side, there
is nothing left.

 scomodare il pesante spamassassin.
Volume di traffico dei tuoi server, e performance di quel programmino?
Un ordine di grandezza, 100 mail/giorno, 1000, 100.000, 1.000.000, non
una analisi dettagliata, ovviamente.
Stavo valutando il fattore cache, di default mi pare sia 600.
Considerato che la cache viene resettata ad ogni HUP, ovvero ad ogni
modifica di configurazione, non vedo lati negativi ad impostare valori
di cache pari a 24 ore o molto superiori.
Se non si modifica la config, ï¿œ inutile farla rileggere ogni volta.
Se invece si modifica, bisogna fare un HUP e quindi la cache si resetta.

 Se invece si modifica, bisogna fare un HUP e quindi la cache si resetta.
Il problema ï¿œ che se per esempio un host con cui hai giï¿œ avuto a che fare 
viene messo o rimosso da una BL te ne accorgi dopo molto tempo.
Non eccederei il valore di un'ora per la cache. Considera che nel caso di 
spamrun normalmente le connessioni che arrivano da un singolo host sono 
piuttosto ravvicinate, quindi sono sufficienti valori di cache timeout 
bassi. Per host regolari in whitelist non serve nemmeno passare per il 
policy daemon, e per gli altri host non sono quelle 1000 risoluzioni DNS in 
piï¿œ che ti rovinano la vita.


 risoluzioni DNS in piï¿œ che ti rovinano la vita.
Non ho regole piï¿œ o meno corpose di altre. Son tutte uguali.
Devo solo filtrare in base al recipient (o in base agli utenti sasl)
in modo da:
a) bloccare mail superiori ad una certa dimensione, per ciascun utente
(postfix ha un limite globale, e non per user)
b) fare in modo che l'utente X possa ricevere al massimo Y mega al
giorno, oppure ricevere al massimo Z messaggi al giorno
c) fare in modo che l'utente X possa inviare Y mega o Z messaggi al
giorno.
In pratica, 3 regole per ciascun utente. Sempre uguali.
Devo valutare la fattibilitï¿œ di fare una interrogazione MySQL.
E' in perl, non dovrebbe essere difficile leggere da una query
piuttosto che da un file.
Non ho ancora aperto il sorgente, ma lavorando a colpi di CONCAT con
MySQL potrei sbilanciarmi a dire che con qualche riga di codice perl,
qualcosa tipo 5-6 righe, si dovrebbe fare l'integrazione MySQL.
Dopotutto, da qualche parte ci sarï¿œ sicuramente una riga di codice che
apre il file, lo legge finchï¿œ non trova una regola che corrisponde ed
esegue l'azione. Ecco, al posto di tale "blocco" di codice io devo
piazzarci una WHERE.

 piazzarci una WHERE.
Mi correggo, postfwd legge UNA volta TUTTO il file.
Integrare MySQL, stando al sorgente, dovrebbe essere lavoro
da pochi minuti, ma si tratterebbe comunque di un intero dump
e non di una interrogazione "per utente".
Non conosco abbastanza perl per fare una modifica piï¿œ evoluta,
ma leggere tutto da MySQL ï¿œ comunque piï¿œ che adatto al mio scopo.

 In pratica, 3 regole per ciascun utente. Sempre uguali.
ah.. l'ho mai detto che amo exim per queste cose ?
Max

 ah.. l'ho mai detto che amo exim per queste cose ?
Si, mi pare di si... :-)
Ma io non lo usare e non metto in produzione un sistema
che non so gestire.
A meno che Exim non integri in automatico il lookup su
database per le ristrizioni che servono a me (ovvero
quelle che ho appena descritto)

 quelle che ho appena descritto)
Uhm.....
SENT_LIMIT = ${lookup mysql{SELECT ratelimit FROM mailbox WHERE mailbox 
= '$sender_address' LIMIT 1}}
deny authenticated = *
    ratelimit = SENT_LIMIT / 1h / strict / $authenticated_id
    message = $sender_address Sorry, but you cant send more than 
SENT_LIMIT emails per hour.
La tentazione a provare Exim aumenta...
Niente programmi aggiuntivi, niente dump da MySQL a file di testo...
Un buon manuale/libro/howto (oppure anche tutti e tre) per iniziare?

 Un buon manuale/libro/howto (oppure anche tutti e tre) per iniziare?
apt-get install exim4-heavy
poi PIALLI le configurazioni di default di debian, che sono una cosa 
assurda...
Ti leggi il manuale di exim almeno una volta (l'inizio per bene, i dettagli 
successivi alla bisogna) per capire con cosa stai trattando (la filosofia è 
diversa rispetto a postfix).
Ti scrivi il tuo setup da zero, così sai dove mettere le mani quando ci sono 
problemi.
Trovi molte cose già fatte su internet e funzionanti...
Puoi partire anche da li, ma non dimenticarti di studiare il manuale.
Io ho rifiutato exim per anni perchè le configurazioni debian erano ostiche.
Quando mi sono letto il manuale, in un paio di giorni ho messo su tutto 
quello che faceva postfix.
In altri 3/4 giorni mi sono sbizzarrito col perl (che è embedded) per fare 
quello che postfix non faceva o faceva con N milter attaccati.
Max

 quello che postfix non faceva o faceva con N milter attaccati.
A proposito di Milter, ti faccio 2 domande:
1) come si fa a configurare clam in prequeue? Non so cosa cercare nel 
manualone...
2) alternative a milter-link?

 quello che postfix non faceva o faceva con N milter attaccati.
A proposito di Milter, ti faccio 2 domande:


 2) alternative a milter-link?
1) Non hai bisogno di usare nessun milter. 
 
http://www.exim.org/exim-html-current/doc/html/spec_html/ch41.html
2) Exim puoi pilotarlo tramite Perl
 
http://www.exim.org/exim-html-current/doc/html/spec_html/ch12.html
Quindi ogni fase del protocollo SMTP puoi agganciarla ad uno o più script 
perl che fanno quello che gli dici.
Online trovi degli script che fanno l'equivalente di milter link. Io me li 
sono adattati.
Esempio:
http://www.teuton.org/~ejm/exim_surbl/
Max

 
http://www.teuton.org/~ejm/exim_surbl/
Ci guardo.
Intanto grazie.
Ora mi resta solo da capire come "clusterizzare" gli hint file di exim.
Da quel che ho letto, non si può mettere la directory con gli hint file
su una share NFS per problemi di lock.
Però, non potendo far accedere più di un server agli stessi hint-file,
non saprei come limitare gli invii di un utente indipendentemente dal
server in uso.
Se, ad esempio, avessi due server smtp (che in effetti ho), i limiti
sarebbero per server, ovvero 100 mail per il server 1 e 100 mail per
il server 2.
Avendo in round-robin il dns, l'utente può inviare 200 mail anzichè 100.
Dovrei impostare un limite pari a 50 (ovvero la metà di quello che a me
serve) ma non avrei la certezza che le conessioni siano effettivamente
bilanciate tra i due nodi, e poi appena uno dei due server raggiunge
il limite, l'utente si vedrebbe un errore anche qunado in realtà ha
disponibilità di invii....

 su una share NFS per problemi di lock.
Non mi sono mai posto il problema degli hints.
Ad ogni modo io aggirerei il problema.
Quando accetti una mail, fai una query di insert/update su un DB (magari 
incrementando il numero di mail e incrementando il numero di rcpt_to (mandi 
una mail a 50 persone).
Prima di inviarla, fai una select per controllare i limiti.
Questa cosa ti riuscirà piuttosto semplice dopo le prime configurazioni...
sposti il problema lato SQL.
Max

 Prima di inviarla, fai una select per controllare i limiti.
Uhm, devo studiare come fare.
Il sistema mi pare buono, probabilmente conviene realizzare una
tabella dove ogni volta che viene recapitata una mail si inserisce
un record con data, ora, utente sasl e dimensione della mail.
In questo modo mi basterà usare un COUNT per contare quante mail
ha inviato l'utente, in un determinato range di data/ora.
Facendo un normale incremento, perderei ogni riferimento temporale.
Alla fine, si può ripulire il database (rimuovendo i record del giorno
precedente) tramite due-tre righe bash di cleanup notturno.
Una grossa DELETE eseguita da bash.
Con postfix, AFAIK, sarebbe un calvario implementare una cosa del genere
se non realizzando un policy server ad-hoc.
Da quel che leggo, exim permette di fare la stessa cosa direttamente
dalla sua configurazione, creando ACL che eseguono una query e prendono
decisioni in base al risultato. Devo giusto capire come far eseguire
una INSERT per ogni RCPT TO andato a buon fine, non essendo una ACL.