Newsgroup: it.comp.os.linux.sys
Titolo: Postfix & SMTP virtuali

Sto cercando di configurare postifix per permettere l'invio mediante più 
IP virtuali sulla stessa macchina (mono-istanza di postfix)
In master.conf ho messo:
111.111.111.222:smtp inet n - n - - smtpd
        -o myhostname=
smtp.domain1.org
        -o smtpd_banner=
smtp.domain1.org
	-o smtp_helo_name=
smtp.domain1.org
        -o mydomain=
domain1.org
        -o smtp_bind_address=111.111.111.222
        -o content_filter=
La posta in uscita viene recapitata correttamente
(senza content_filter come da me richiesto)
ma negli header del messaggio sul server di destinazione vedo:
Received: from 111.111.111.111  (EHLO 
dominioprincipale.it
) 
(111.111.111.111)
  by 
mta312.mail.mud.yahoo.com
 with SMTP; Thu, 03 Apr 2008 03:08:42 -0700
Received: from [192.168.0.145] (unknown [111.111.111.333])
	by 
smtp.domain1.org
 (GUEST) with ESMTP id 56D9FF691
	for <q...@quo.qua>; Thu,  3 Apr 2008 12:08:41 +0200 (CEST)
A quanto pare, la mail passa correttamente tramite l'smtp virtuale
di postfix (lo deduco da 
smtp.domain1.org
 che è appunto quello virtuale)
ma poi come mai in uscita la posta transita sempre e solo per l'ip
principale e non quello virtuale?
Received: from 111.111.111.111  (EHLO 
dominioprincipale.it
) 
(111.111.111.111)
questo indica il mio IP principale ed il mio dominio principale.
come posso fare per forzare in uscita lo stesso IP virtuale da me 
configurato?
Non voglio far comparire per nulla al mondo il mio IP master.

 principale e non quello virtuale?
Perchè, in quel caso, non c'entra nulla postfix.
E' il routing.

 Perchè, in quel caso, non c'entra nulla postfix. E' il routing.
In che modo posso ovviare alla situazione in maniera semi automatica 
(ovvero evitando, se possibile, ip route ed affini)?
(altrimenti dovrei fare tante micro macchine virtuali per far eseguire 
solo postfix, ma in termini di risorse e manutenzione sarebbe 
pazzesco....)

 (ovvero evitando, se possibile, ip route ed affini)?
Fai natting... nel firewall se ti arriva da un IP interno tal lo fai uscire
come un altro IP.
Gli IP di Postfix (quelli in smtp_bind_address) sono privati o pubblici
comunque?
-- 
Vide

 comunque?
Sono tutti IP pubblici sulla stessa subnet di quella principale.
Niente nat o firewall, sta tutto sulla stessa macchina e sulla stessa
ethernet.

 wrote in news:4Y3Jj.281335$%
k.39...@twister2.libero.it
:

prova a postare il problema che vorresti risolvere con questo accrocchio...
magari salta fuori qualche proposta meno macchinosa.
anche perche' questo thread me ne ricorda uno di qualche tempo fa, in cui 
si chiedeva come personalizzare gli header con cui il mail server si 
presenta al destinatario, in base al dominio di chi ha spedito l'email.
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

 (ovvero evitando, se possibile, ip route ed affini)?
Eh, e una fettina di culo tagliata sottile sottile, vicino all'osso
no, eh? :-P
Ti faccio presente che, oltre tutto, in uscita hai a che fare con
il processo smtp e non con smtpd.

 magari salta fuori qualche proposta meno macchinosa.
Magari.
 

 processo smtp e non con smtpd.
Uhm...

whiplash ha scritto:



Se parliamo di E-Mail-Routing hai ragione, ma in quel caso, Postfix
c'entra eccome, visto che e' lui a farlo.
Se invece parli di IP-Routing, scusa la brutalita', ma e' una cazzata,
visto che qualsiasi programma che usa le librerie TCP puo' fare il bind a
un certo indirizzo e quindi un MTA puo' decidere che IP usare per spedire
l'E-Mail.
L'ho fatto migliaia di volte con Exim, a dimostrazione del fatto.
Se poi Postfix questa possibilita' non la implementa e' un altro conto, ma
non puoi dire che sia una cosa da gestire dal router TCP.
Ciao
Luca Bertoncello
(
luca...@lucabert.de
)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 non puoi dire che sia una cosa da gestire dal router TCP.
Mi sembra strano.

 Mi sembra strano.
Guarda, io ho lasciato Postfix proprio perche' lo trovo limitato, quindi
non mi stupirebbe che il buon Wietse Venema abbia deciso di usare sempre e
solo un'interfaccia per la posta in uscita...


 solo un'interfaccia per la posta in uscita...
Secondo me si può fare anche con postfix...non saprei come però...

 puoi dire che sia una cosa da gestire dal router TCP.
Di default sì, se c'è una semplice connect() è il kernel a scegliere.

 Secondo me si può fare anche con postfix...non saprei come però...
Ho approfondito la questione.
Fermo restando che tutto quanto ho detto è assolutamente vero, puoi
forzare il client a fare bind() su un particolare indirizzo, invece di
chiamare direttamente connect(), con smtp_bind_address:
http://www.postfix.org/postconf.5.html#smtp_bind_address
Vedi se e come riesci ad utilizzarlo nel tuo contesto.

 ma siccome lui è *molto* più esperto di me
Ma anche no: tu usi postfix in contesti decisamente più
impegnativi del mio.
Tu fai il mail provider, tra le altre cose, io no. :)

 Tu fai il mail provider, tra le altre cose, io no. :)
E' una questione di rispetto su...
Però se proprio insisti:
tutto quello che dici sono c@zz@te... :)

 riesci ad utilizzarlo nel tuo contesto.
Di la verità non hai letto il mio post con attenzione:
111.111.111.222:smtp inet n - n - - smtpd
        -o myhostname=
smtp.domain1.org
        -o smtpd_banner=
smtp.domain1.org
	-o smtp_helo_name=
smtp.domain1.org
        -o mydomain=
domain1.org
        -o smtp_bind_address=111.111.111.222
        -o content_filter=
osserva la penultima riga.
In teoria quel pezzo di codice dovrebbe dire:
metti l'smtp in ascolto ANCHE su 111.111.111.222 ed utilizza
i parametri "-o" in sostituzione a quelli generici di 
main.cf
tra i parametri è presente: 
-o smtp_bind_address=111.111.111.222
che appunto dovrebbe bindare postfix in uscita ad un dato IP.
Eppure yahoo vede la mail proveniente da IP principale e non quello
bindato da me.
Se può interessare, i domini utilizzati in quel codice sono inventati e 
non configurati da nessuna parte, ma problemi di spam a parte (che 
risolvero quando metterò in produzione il sistema) l'ip dovrebbe essere
indipendente...

 bindato da me.
Che è appunto strano... perchè io lo uso proprio per fare quello che fai tu
(anche se con IP privata, che poi cambio via NAT) e funziona perfettamente.
Attendiamo lumi da Skull ;P
Chiariamo: houna macchina con due IP (A e B) e due istanze di postfix,
ognuna va smtp_bind_address a uno dei due IP disponibili, e nel firewall a
seconda se la petizione arriva da A o da B, esce come X o Y (e gli SMTp
esterni vedono le mail che arrivano da X e Y). Non è che il tuo "provider"
(ovvero tu :P) forza qualcosa per la porta 25?
-- 
Vide

 Di default sì, se c'è una semplice connect() è il kernel a scegliere.
Che ti devo dire? A questo punto, e' ovvio che Philip Hazel ha delle
conoscenze informatiche migliori di Wietse Venema, visto che lui e'
riuscito a scrivere il suo programma per usare un IP a piacere in uscita.
Comunque, ora si rischia di cominciare una guerra di religione e io non ne
ho proprio voglia.
Vuoi usare Postfix? Nessuno te lo impedisce. Voglio usare Exim? Nessuno
deve potermelo impedire.


 Di la verità non hai letto il mio post con attenzione:
Eh, sai gli automatismi? :-/
Ho letto l'indirizzo e mi ero autoconvinto che fosse il binding di smtpd, senza
*realmente* leggere il nome del parametro, il che era logicamente una cazzata,
visto che l'indirizzo del daemon è quello dichiarato all'inizio della riga...
Sorry.
Ok, riprendiamo ad investigare.
E la risposta potrebbe essere quella che segue.
http://www.irbs.net/internet/postfix/0705/0567.html
Dove un tizio di nome Venema, con buona pace di qualcuno intervenuto
ad affermare che il sottoscritto avrebbe detto cazzate, afferma che
"BTW This is not *postfix* behavior. It is under control
by the kernel's routing algorithms."
Leggendo *attentamente* il link suggerito da Venema, si scopre
quanto segue:
http://www.postfix.org/postconf.5.html#inet_interfaces
When inet_interfaces specifies just one IPv4 and/or IPv6 address 
that is not a loopback address, the Postfix SMTP client will use 
this address as the IP source address for outbound mail.
Prova quindi -o inet_interfaces= blah blah blah

 "provider" (ovvero tu :P) forza qualcosa per la porta 25?
Non forzo proprio niente lato routing.
Lato postfix, non credo, quale potrebbe essere una direttiva per
fare questa forzatura? Magari è presente di default nella config
(non credo) e non ci ho mai fatto caso.

 the IP source address for outbound mail. 
Questa frase l'ho letta OVUNQUE per la rete.
Quindi o sono io che non conosco bene l'inglese, oppure la interpreto 
male.
Dovrebbe dire:
se in inet_interfaces inserisci un IP che non è quello di loopback allora
in uscita sarà usato sempre tale IP.
In inet_interfaces ho:
inet_interfaces = 111.111.111.111, 222.222.222.222, 127.0.0.1
che sono i miei 3 master ip su cui postfix deve ascoltare.
Oltre a questi 3 ho la necessità di fare smtp virtuali.
Ho messo quindi in 
master.cf
 quel blocco di codice.
Postfix va in ascolto anche su tale IP.
In uscita si becca sempre il primo presente in inet_interfaces (come dice 
quella frase di cui sopra)
Quindi, in teoria potrei risolvere mettendo inet_interfaces = alla 
loopback, e poi mettere TUTTI gli ip (compreso quelli master) in 
master.cf
 ? 
Se po fa...

 UN indirizzo ip che ..."
Tutta colpa di quel JUST che non ho mai notato.
Quindi dovrei riuscire nel mio intento mettendo inet_interface = 127.0.0.1
e specificando tutti gli IP nel master.cnf come se fossero 'virtuali'
in sostanza si tratta di dublicare il mio blocco di codice aggiungendo 
anche gli IP master....

 quello giusto.
Inizialmente avevo UN SOLO IP, ed era quello master ma non funzionava una 
cippa.
Ora riprovo.

 quello giusto.
Scusa e, ma così faccio esattamente quello che NON voglio fare.
Li dice che se inserisco un ip che non sia quello di loopback, postfix
utilizzerà tale IP per l'invio.
Ed è quello che NON voglio fare.
NON voglio far usare l'ip indicato in inet_intefaces quando invio con
l'ip virtuale.

 indirizzo.
credo che stiamo parlando di due cose diverse.
Se in 
main.cf
 metto un IP diverso dalla loopback, allora postfix 
utilizzera sempre tale IP per la posta in uscita.
NON devo fare cosi.
Quindi: 
main.cf
 = 127.0.0.1
master.cf
 = tutto il transport con smtp_bind_address=111.111.111.222
ed ho anche provato a mettere, sempre in 
master.cf
, 
inet_interfaces=111.111.111.222
ma continua a non funzionare.

 l'ip virtuale.
Allora, cerchiamo di chiarirci perchè vi state incasinando :P
inet_interfaces serve per specificare su quali IP postfix deve ascoltare.
Possono essere diversi IP.
smtp_bind_address serve per scegliere, fra gli IP di inet_interfaces, a
quale fare col processo smtp per inviare le mail (che verrà visto
all'esterno, insomma).
Comunque l'errore che fai, credo, è che in 
master.cf
 devi speficare
smtp_bind_address per smtp, e non smtpd (e mi pare te l'abbiano già detto
nel thread).
-- 
Vide

 nel thread).
E per tagliare la testa al toro se non ci sono particolari esigenze mettilo
in 
main.cf
 e non in 
master.cf
-- 
Vide

 mettilo in 
main.cf
 e non in 
master.cf
Non credo si possa, devo fare non meno di 5-6 smtp_bind_address quindi
pensavo di create i 6 servizi diversi in ascolto su ip diversi

 detto nel thread).
Ok, ma io devo sia avere l'smtp in ascolto (smtpd) che l'smtp in uscita 
(smtp)
Per quello in ascolto no problem, per quello in uscita, dovrei creare un 
servizio ad-hoc, duplicando
smtp unix .... smtp
aggiungendo
-o smtp_bind_address=111.111.111.222
già fatto. non va. esco sempre con l'ip principale.

 in inet_interfaces?
A 'sto punto, incrociando quello che dici tu e quello che ho fatto io,
sembrerebbe proprio di no.
Il punto è: perchè l'IP con cui vuoi uscire non dovrebbe stare in
inet_interfaces? Tanto alla fin fine non usi solo il main ma per ognli
processo gli passi il smtp_bind_address che vuoi, no?
-- 
Vide

 processo gli passi il smtp_bind_address che vuoi, no?
Perchè altrimenti avevo problemi a creare l'stmpd.
Ma dato che starebbe in 
main.cf
, l'smtpd diventerebbe superfluo.
Ora, mettendo gli IP virtuali in 
main.cf
come faccio a:
1) impostare delle opzioni personalizzate (-o content_filter etc etc) a
tutti quelli che si connettono ad uno di tali IP 'custom' dato che non ho 
il servizio in 
master.cf
 ma utilizzo le opzioni globali di 
main.cf
?
2) Risolto il punto1, come dico agli ip di cui sopra che devono uscire 
con l'ip virtuale?
L'IP master non deve comparire negli header in nessuna parte.

 il servizio in 
master.cf
 ma utilizzo le opzioni globali di 
main.cf
?
AFAIK 
main.cf
 è il "default", ma se poi gli passi un altro valore alla
stessa opzione, prende quell'ultimo valore. Per cui vista la tua
configurazione io aggiungerei inet_interfaces in 
main.cf
, lascierei
master.cf
 come ce l'hai configurato e con un po' di fortuna dovrebbe
funzionare. Ripeto, io ho una configurazione come la tua e funziona senza
problemi:
inet_interfaces = 192.168.1.226, 192.168.1.225, localhost
smtp_bind_address = 192.168.1.226
ed esco con la 226, da quella macchina.
-- 
Vide


:Prova quindi -o inet_interfaces= blah blah blah

 deve potermelo impedire.
Ci mancherebbe altro.
Non mi pare, però, che sia stato il sottoscritto ad intervenire in un 
thread in cui si parla di *Postfix* pontificando sul fatto che il tuo
interlocutore stia dicendo *cazzate* ed evidenziando che "Exim lo fa"
(lo fa anche Postfix, come è evidente a tutti, ora).

 smtp_bind_address = 192.168.1.226
Tu esci SEMPRE da .226 perchè ha inserito tale valore in 
main.cf
io devo uscire con un ip differente in base all'ip verso cui mi collego 
con il cliente:
ip master: 111.111.111.999
server smtp del cliente: 111.111.111.999
devo uscire con 111.111.111.999
ip virtuale1: 111.111.111.111
server smtp del cliente: 111.111.111.111
devo uscire con 111.111.111.111
ip virtuale2: 111.111.111.222
server smtp del cliente: 111.111.111.222
devo uscire con 111.111.111.222
ip virtuale3: 111.111.111.333
server smtp del cliente: 111.111.111.333
devo uscire con 111.111.111.333
Mettendo tutto in 
main.cf
 è impossibile (IMHO)
Devo creare X servizi in 
master.cf
 ma non ci riesco per 2 motivi:
1) non sono capace e questo è fuori discussione
2) non so nemmeno se si può fare....

 (lo fa anche Postfix, come è evidente a tutti, ora).
No, a me non è evidente e sto ancora cercando di capire come fare.
:)

 2) non so nemmeno se si può fare....
Non ho capito se però hai provato o meno a fare quello che ti dico.
Tu hai N clienti separati in 
master.cf
 per N clienti diversi, giusto?
Metti in 
main.cf
 *tutti* gli N IP virtuali da cui devi poter uscire in
inet_interfaces.
In 
master.cf
, come hai già fatto con smtpd, passi ai vari smtp la opzione
smtp_bind_address=$IPVIRTUALE.
-- 
Vide

 opzione smtp_bind_address=$IPVIRTUALE.
Ok, quindi in 
master.cf
 DEVO creare tutti i vari smtpd.
Il problema ora è: come faccio a creare i vari "smtp" ?
devo assegnare un nome diverso ad ogni smtp oppure posso fare 
111.111.111.222:smtp unix ..... smtp -o ...
quello che non capisco (perchè non l'ho mai fatto) è come fare a dire a 
postfix di utilizzare un smtp piuttosto che un altro.
Credo si debba fare da dentro le varie istanze smtpd... ma come?

 (lo fa anche Postfix, come è evidente a tutti, ora).
Lascia perdere-
Lui quando legge "server di posta", pensa ad exim e gli si rizza 
l'uccello.
I risultati, poi, sono quelli che hai potuto apprezzare.
-- 
c:\winnt> secure_nt.exe
  Securing NT.  Insert Linux boot disk to continue......
http://www.neodigital2k.com

 I risultati, poi, sono quelli che hai potuto apprezzare.
Ragazzi, io non riesco proprio a capire...
Io ho detto semplicemente: "La possibilita' di far fare ad un programma
quello che Alessandro vuol fare esiste, tant'e' che ci sono programmi che
lo fanno". E ho citato un esempio a me noto. Puo' essere che anche altri
programmi lo facciano, non lo so.
Ora a voi sembrera' anche evidente che Postfix e' il dio in terra e fa
anche le tagliatelle all'uovo.
A me no. E ad Alessandro neanche, pare, visto che finora, nonostante
questo thread lunghissimo non e' ancora riuscito a risolvere il suo
problema.
Quanto poi al fatto che se io leggo server di posta penso ad Exim sarebbe
anche vero. In effetti penso anche a Postfix e Sendmail, contro i quali ho
dovuto lottare per anni e che son stato ben contento di lasciarmi dietro.
La parte scurrile della frase preferisco non commentarla.
Direi che il tuo livello di educazione si riconosce da li.
Statevene con Postfix, siate soggetti alle limitazioni di Venema e fate
quel che volete.
Io non ci sto.
Non ho cominciato io questo Thread e, per dirla tutta, io ho solo detto
che quello che Alessandro cerca di fare NON e' limitato a quel che decide
il Kernel. FINE.
Detto questo, buon divertimento a scannarvi!
Se poteste, poi, almeno incidentalmente, mantenere un linguaggio
approppriato, non sarebbe male.


 approppriato, non sarebbe male.
Tipo non dire al prossimo tuo che sta dicendo cazzate, salvo
ben guardarsi dal rispondere nel merito, quando ti si spiega
perchè non erano affatto cazzate?
Certo, non sarebbe affatto male.

 Certo, non sarebbe affatto male.
Vedi che ha ancora gli ormoni in circolo e gli scappano quella 
quarantina di "p" di troppo?
Me lo hai fatto agitare.
-- 
Senti, se abbiamo un culo, non significa che qualcuno deve per forza 
metterci qualcosa dentro.
                                                   Bodhi

 Me lo hai fatto agitare.
Su questo posso giustificarlo. Vive all'estero e dopo un po' di tempo è
normale incasinarsi con l'ortografia :P
-- 
Vide

 Attendiamo lumi da Skull ;P
Spiacente: mai capitato di doverlo fare, quindi non saprei fornire una 
risposta precotta.
Che sia possibile farlo non ho il minimo dubbio, ma temo possa essere 
meno banale di come si sta cercando di farlo. Non perchè sia 
intrinsecamente "difficile", quanto per il fatto che molte 
configurazioni "implicite" di postfix hanno per default qualcosa che lo 
"impedisce".
Così su due piedi, ad esempio, ho il dubbio che quello che vuol ottenere 
Alessandro possa fare un po' a cazzotti con il connection caching così 
come lo fa postfix (
http://www.postfix.org/scache.8.html
), e che quindi 
richieda come minimo qualche tweak particolare.
Però, come detto, non c'ho mai provato...
Dovessi ipotizzare, direi che il trucco potrebbe stare nel definire, in 
ogni istanza di smtpd, una diversa "default_transport", definita -sempre 
in 
master.cf
 con il suo bind_address "ad-hoc".
Questo perchè non mi pare abbia troppo senso passare un
"-o smtp_bind_address"
alla configurazione di *smtpd*... ;-)

 in 
master.cf
 con il suo bind_address "ad-hoc".
Uhm. Il che mi fa venir in mente che in realtà in mezzo tra i due c'è il 
queue manager, giusto a complicare ulteriormente le cose :-\
Credo si stia prima usando istanze separate, se proprio si vuol farlo...

 Credo si stia prima usando istanze separate, se proprio si vuol farlo...
È quello che volevo suggerire anche io.. anche perchè alla fin fine è molto
facile (e puoi separare agevolmente, oltre a IP e domini anche le code su
disco).
-- 
Vide

 disco).
Allora andrò su questa strada...
Ma in termini di risorse?
Non ho la minima idea di quanto pesi un singolo postfix, e di
conseguenza di quanto pesino X istanze.
(Almeno 20 per server.....)


Dipende solo da cosa gli fai fare. A bocce ferme, dovresti avere una 
occupazione di RAM di 4-6 MB per ogni istanza di postfix, a spanne.
Il carico che gli dai usandoli separatamente non dovrebbe essere 
sostanzialmente diverso da quello che gli daresti dando tutto in panza 
alla stessa istanza (così c'ho messo pure una rima atroce, che non 
guasta mai, per perder di credibilità). Anzi, se l'utilizzo è "spalmato" 
più o meno uniformemente tra le diverse istanze, dovresti avere un minor 
carico CPU causato dai queue-manager, dato che ognuno deve gestire code 
più brevi rispetto a quanto farebbe una istanza sola. Hai d'altro canto 
una prestazionalità massima teorica un po'abbassata perchè postfix non 
può far pieno sfoggio di tutti i meccanismi (di caching, ad esempio), in 
quanto ogni istanza farebbe tutto per i fatti suoi.
Se ne valga la pena o meno dipende IMHO da quanto vorresti far scalare 
'sta cosa e da quale obiettivo ti prefiggi: è evidente che non è un 
approccio che scali troppo in alto (in quel caso meglio trovare il modo 
di farlo con una istanza sola), ma se non ti attendi un moltiplicarsi 
eccessivo del numero di istanze non dovrebbe essere nemmeno una 
soluzione troppo onerosa...

 soluzione troppo onerosa...
Se ne parlassimo in lista? Cosi posso tirar fuori tutti i dettagli
senza dover
omettere particolari....
Posso fare un post simile in lista o sarei troppo OT?

 Posso fare un post simile in lista o sarei troppo OT?
Non vedo perchè no, ma presumo questa fosse intesa passare per la via 
privata ;-)
Bye

 privata ;-)
No, altrimenti di sto passo ti devo pagare delle consulenze.
Intendevo proprio in lista, se poi te vuori rispondere in privato,
ancora meglio.
Ma al massimo ti offrirò un caffe (fatto in casa, nemmeno al bar :) )

 Intendevo proprio in lista
Ah, boh, vabbč. Vai pure lě...