Newsgroup: it.comp.os.linux.sys
Titolo: Postfix, rallentare l'invio delle email

Ciao,
sono su una Etch (ok, ok devo aggiornare) quindi ho Postfix 2.3
Ho l'esigenza (immediata) di "rallentare" l'invio di email da parte
di Postfix verso il relayhost esterno, il quale limita il numero di
email accettate a 99 al minuto. Come fare ?
Ho visto che c'è qualche parametro in 
main.cf
 per fare quello che mi
serve, ma è utilizzabile dalla 2.5 in avanti.
A fine settimana faccio l'upgrade, ma adesso come tampono ?
Grazie
fulvio

> A fine settimana faccio l'upgrade, ma adesso come tampono ?
iptable sulla porta 25 con limite delle connessioni in uscita sull'ip 
del relay esterno?

 email accettate a 99 al minuto. Come fare ?
Vuoi spedire più di 99 email al minuto?
A cosa serve, di grazia?

 A cosa serve, di grazia?
Il contrario, devo spedire MENO di 99 email al minuto.
Quella macchina è un server di posta, interno ad un azienda, gli
utenti alle volte inviano delle newsletter a qualche centinaio di
destinatari, Postfix le raccoglie e le "spara" al relayhost esterno
alla massima velocità. Il relayhost se riceve più di 99 email al
minuti banna l'IP sorgente per 30 minuti.
Devo evitare tutto questo.
fulvio


Ho già limitato il numero delle connessioni al minimo, ad 1, con un
parametro di Postfix, ma su quella connessione "spara" alla massima
velocità. Forse potrei provare a limitare la banda in uscita, sul
quel canale.
fulvio


Facebook: Massimo Bacilieri

 
E perché? Se i destinatari si sono iscritti non è spam, al limite una 
limitazione (quanto giusta e condivisibile se ne può discutere) del servizio 
smtp fornito ma non è necessariamente spam
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
www.robyt.eu


No, quei destinatari pagano per ricevere la newsletter, sono 
iscritti al servizio e pagano un abbonamento, niente spam.

email accettate a 99 al minuto. Come fare ?
Se su una 2.3, non si puo' fare, occorre cambiare le regole <g>
Una cosa che puoi fare, ovviamente e' una roba da animali, e' mettere
postfix in defer permanente e riorganizzare i file A MANO.
A quel punto ti si accumula roba dentro "/var/spool/postfix/deferred"
e la richiesta è che quando fai "postfix flush" non ci siano mai piu'
di 99 messaggi al minuto dentro quella directory li'.
cd /var/spool/postfix
# Elenco dei file in deferred in QUESTO istante (t0)
find deferred -type f > .tmp.messages.all
head -n 99 .tmp.messages > .tmp.messages.ok
grep -v -F -f .tmp.messages.ok > .tmp.messages.extra
# Maintenance
mkdir -p really-deferred
chdir really-deferred
	mkdir -p $( cut -f1,2 -d/ < ../.tmp.messages.extra | sort | uniq )
cd ..
for msg in $( cat .tmp.messages.extra ); do
	mv $msg really-$msg
done
# Manda i messaggi presenti in t0 più quelli arrivati nel frattempo,
# che e' il perche' questo sistema si rivela potenzialmente inefficace
postfix flush
# Dopo di che rimettiamo a posto i messaggi preesistenti
for msg in $( cat .tmp.messages.extra ); do
	mv really-$msg $msg
done
#####
Per la serie "però facciamo le cose per bene", suppongo che tu abbia gia'
visto questo link? Policyd per etch c'e'.
http://serverfault.com/questions/32368/smtp-message-rate-control-on-ubuntu-8-04-preferably-with-postfix
Leonardo
-- 
Surstangas via akcipitr', la ceval' fojnumas nur:
Jen vigla damo en brakum', kaj vi pensas pri forkur'?
Do li turnis sin, kaj turnis sin, kaj ekdormis sen singard';
Kaj lin apudis je l' vekigx, soldatoj kaj Barnard'.

 email accettate a 99 al minuto. Come fare ?
[provocazioneON]
Una riga messa in una ACL:
ratelimit
Ah, già, usi postfix.... Buona fortuna allora :)
[provocazioneOFF]

 servizio smtp fornito ma non è necessariamente spam
Direi che è un abuso del sistema di relayhost, dal suo punto di vista è
spam, o no? Credo che se uno si trova a gestire invii di newsletter di una
certa entità, dovrebbe o fare contratti specifici con i provider, o
mettersi in casa un smtp e registrarsi l'MX.


 mettersi in casa un smtp e registrarsi l'MX.
Questo è un discorso diverso. Personalmente gestirei le NL in casa, con
MTA su IP dedicato e con un controllo molto stretto e ferreo sui
destinatari e relative autorizzazioni.
-- 
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.

 postfix in defer permanente e riorganizzare i file A MANO.
Una soluzione meno animalesca, ma comunque da pazzi, sarebbe
quella di mettere in HOLD le mail dirette ad un dato relayhost
e poi sbloccarne 99 alla volta in maniera analoga alla tua, ma
non avendo tra i piedi anche le mail legittime, basta mettere
in cron uno script che si legge i primi 99 file dalla queue
e li sblocca con postsuper.
vado a memoria, non uso postfix da un paio di anni.



Mi pare di ricordare che con defer-hold, postsuper non sblocchi, ma
potrei sbagliare.
La soluzione migliore credo sia policyd - la mia animalesca l'avevo
messa giusto cosi' per fare.


 messa giusto cosi' per fare.
Non vorrei sparar cazzate, ma con anvil (al limite con una seconda
istanza smtpd dedicata) dovrebbe essere facilmente realizzabile.


 fulvio
Rizio

 No, se non è esplicitamente detto nel contratto di fornitura del servizio.
Ecco, e onestamente non credo che un provider si metta in casa un 
sistema che banna per 30 minuti un suo utente, senza avere la forza di 
una clausola contrattuale. Al primo contenzioso verrebbe fatto a pezzi.
Poi è vero che il mondo è pieno di cazzoni che prima fanno le cose, poi 
cascano dal pero... però...


 potrei sbagliare.
Sblocca sicuro, in passato l'ho usato.
http://www.postfix.org/postsuper.1.html
       -H queue_id
              Release mail that was put "on hold".  Move one mes-
              sage with the named queue ID from  the  named  mail
              queue(s) (default: hold) to the deferred queue.
              If  a queue_id of - is specified, the program reads
              queue IDs from standard input.
              Note: specify "postsuper -r" to release  mail  that
              was  kept  on  hold  for  a significant fraction of
              $maximal_queue_lifetime or  $bounce_queue_lifetime,
              or longer.
              Specify  "-H  ALL"  to release all mail that is "on
              hold".  As a safety measure, the word ALL  must  be
              specified in upper case.
              This feature is available in Postfix 2.0 and later.
Toh, questo oneline messo in cron risolve il problema. Provato ora.
for i in $(mailq | grep '!' | awk '{print $1}' | head -c99); do
postsuper -H $(echo $i | sed 's/!//'); done

 istanza smtpd dedicata) dovrebbe essere facilmente realizzabile.
Anvil controlla l'inbound, no?
Certo, potresti farlo, con un arzigogolo (client smtp che utilizza una seconda istanza
smtpd il cui anvil limita eccetera eccetera), ma credo che il tutto si potrebbe fare in
maniera più pulita con un policy daemon.

istanza smtpd dedicata) dovrebbe essere facilmente realizzabile.
Hmmm. Tu dici, anvil blocca le connessioni in ENTRATA; allora io metto
DUE server smtpd, il primo raccatta tutto alla massima velocita' dalla
intranet, e cerca di sparare alla massima velocita' sul secondo... che
invece limita a 99/minuto, e poi spara alla massima velocita' (che, in
quelle condizioni, e' sempre < 99/minuto).
Non ci avevo pensato, pero' potrebbe proprio funzionare. Avevo pensato
ad anvil ma mi ero fermato al "...ma blocca solo l'inbound".


              queue(s) (default: hold) to the deferred queue.
Boh... se ti funziona, nulla da dire, pero' insisto che li' sopra dice
che sposta roba "nella coda deferred". E con defer-hold, i messaggi si
trovano GIA' nella coda di deferred.
Se uno non usa deferred, i messaggi partono subito, anche 9999/minuto,
e quindi il danno ormai è fatto.
Magari non ho capito un apascio (tm).


 e quindi il danno ormai è fatto.
Non hai capito, a livello di postfix mandi in HOLD tutti i
messaggi diretti verso un dato host (non ricordo come si fa
ma l'ho fatto anni fa) quindi di default tali mail non
vengono inviate ma accodate.
Poi, da cron, ne blocchi 99 alla volta.

 MANO.
<zac>
Ringrazio tutti per i suggerimenti dati.
Alla fine ho adottato la soluzione "animalesca" di Leonardo.
Questa mattina presto l'ho messa su, l'ho provata, sino ad ora
(sono circa le 14:40) ha funzionato senza intoppi (sono stato 
fortunato) nessuno si è lamentato e nessuno si è accorto di niente, 
mi basta che funzioni ancora per 3 ore e mezza. Domani con calma 
aggiorno e quindi risolvo in maniera definitiva.
Grazie ancora
fulvio


                   ^^ sblocchi
Hai ragione.
Ormai il problema l'ho risolto con la soluzione "animalesca" di
Leonardo, come ha già detto sopra. Ma curiosando e cercando in rete
ho trovato molte cose interessanti che non sapevo (e quante sono le
cose che ancora non so su Postfix !!) Leggendo ad esempio qua:
http://ramnik.net/wp/?p=5
si riesce più o meno a capire quanti giochi si possono fare con le code.
Per il problema che avevo si può, ad esempio, fare questo giochino:
- in 
main.cf
 metto: header_checks = regexp:/etc/postfix/header_checks
- in /etc/postfix/header_checks c'è una riga come questa:
/^Received:/ HOLD
- in questo modo tutte le email vanno nella coda hold
- con postsuper -H sposto a mio piacimento tutte (ALL) o solo quelle 
che voglio da hold a deferred
- con postfix flush svuoto la coda (solo la deferred, non la hold)
e così via.
Provato e funziona, senza creare directory d'appoggio od altro, e 
senza avere problemi collaterali (forse.....)
fulvio

 senza avere problemi collaterali (forse.....)
E io che ho detto?
Te lo fai sugli header, io suggerivo di farlo in base al relayhost di
destinazione
ma il risultato è uguale.