Autore Topic: [RISOLTO] Postfix solo per inoltrare a smtp esterno  (Letto 6610 volte)

Offline LonelyWolf

  • Moderator
  • Hero Member
  • *****
  • Post: 1396
    • Mostra profilo
    • Traversate dei laghi
[RISOLTO] Postfix solo per inoltrare a smtp esterno
« il: 23 Luglio 2014, 11:44:07 »
E' da qualche giorno che ci sto sbattendo la testa e non riesco a venirne a capo, eppure non è così difficile!

Partiamo dall'inizio: per alcuni utenti ho la necessità di controllare l'email fornita dall'isp sia dall'ufficio che da casa, già che ci sono voglio permettere di controllare anche la mail della nostra lan interna (sulla lan ho il mio server per le mail locali).

Quindi sono partito con l'idea di un server di test da mettere in dmz, con getmail recupero le mail dal server dell'isp e dal mio sulla lan in modo da far autenticare via webmail questi utenti un unica volta per entrambi gli account (interno/esterno)

Il server: Centos 6.4 minimal, postfix, dovecot, roundcube.
Ho creato gli utenti locali che riceveranno la posta (per semplificare l'accesso con roundcube), per ogni utente in roundcube ho creato la "doppia identità" (una con indirizzo mail esterno ed una interno).

Il problema è che non riesco a dire a postfix di consegnare l'esterna tramite smtp dell'isp e la interna con il mio smtp.

il file transport:
Codice: [Seleziona]
postalocale.it smtp:10.71.9.102
* smtp:ip_isp_smtp

in main.cf:
Codice: [Seleziona]
myhostname = webmail
mydomain = postalocale.it
myorigin = $myhostname.$mydomain
inet_interfaces = all
mydestination = $myhostname.$mydomain, localhost
relay_domains = $myhostname.$mydomain
mynetworks = 10.71.9.0/24, 127.0.0.0/8
home_mailbox = Maildir/

In questo modo consegna la posta locale correttamente MA consegna "personalmente" agli indirizzi esterni senza passare dall'isp.
Se in main.cf aggiungo:
Codice: [Seleziona]
relayhost = [ip_isp_smtp]
tenta di consegnare qualsiasi mail con il server smtp dell'isp.

Qualche cosa mi sfugge e non riesco a capire dove!

Grazie
« Ultima modifica: 24 Luglio 2014, 10:33:10 da LonelyWolf »

Offline LonelyWolf

  • Moderator
  • Hero Member
  • *****
  • Post: 1396
    • Mostra profilo
    • Traversate dei laghi
Re:Postfix solo per inoltrare a smtp esterno
« Risposta #1 il: 23 Luglio 2014, 12:37:02 »
Ok, finalmente ho risolto il problema, come sempre appena scrivo una richiesta di aiuto la soluzione compare "magicamente"!

Ora mi mancano solo i metodi di autenticazione con smtp esterno!

Offline smeserver

  • Hero Member
  • *****
  • Post: 1313
    • Mostra profilo
Re:Postfix solo per inoltrare a smtp esterno
« Risposta #2 il: 23 Luglio 2014, 12:50:07 »
ahem, giovane.. lo dici anche a noi (a beneficio degli altri) come hai risolto? :-)

Offline LonelyWolf

  • Moderator
  • Hero Member
  • *****
  • Post: 1396
    • Mostra profilo
    • Traversate dei laghi
Re:Postfix solo per inoltrare a smtp esterno
« Risposta #3 il: 23 Luglio 2014, 12:54:22 »
Certamente, appena risolvo il problema di autenticazione, altrimenti è inutile!
;)

Offline LonelyWolf

  • Moderator
  • Hero Member
  • *****
  • Post: 1396
    • Mostra profilo
    • Traversate dei laghi
Re:Postfix solo per inoltrare a smtp esterno
« Risposta #4 il: 24 Luglio 2014, 09:27:09 »
Per l'autenticazione ancora nessuna soluzione, o meglio, ancora non va e non capisco come mai, dopo diversi tentativi e configurazioni ancora nulla.

La parte del log interessata:

Citazione
Jul 23 14:12:02 webmail postfix/smtp[9196]: < ip_smtp_server[ip_smtp_server]:25: 220 mail.hostup.it ESMTP MailEnable Service, Version: 7.53-7.53- ready at 07/23/14 14:11:59
Jul 23 14:12:02 webmail postfix/smtp[9196]: > ip_smtp_server[ip_smtp_server]:25: EHLO webmail
Jul 23 14:12:02 webmail postfix/smtp[9196]: vstream_fflush_some: fd 14 flush 14
Jul 23 14:12:05 webmail postfix/smtp[9196]: vstream_buf_get_ready: fd 14 got 123
Jul 23 14:12:05 webmail postfix/smtp[9196]: < ip_smtp_server[ip_smtp_server]:25: 250-hostup.it [mio_ip], this server offers 4 extensions
Jul 23 14:12:05 webmail postfix/smtp[9196]: < ip_smtp_server[ip_smtp_server]:25: 250-AUTH LOGIN
Jul 23 14:12:05 webmail postfix/smtp[9196]: < ip_smtp_server[ip_smtp_server]:25: 250-SIZE 15360000
Jul 23 14:12:05 webmail postfix/smtp[9196]: < ip_smtp_server[ip_smtp_server]:25: 250-HELP
Jul 23 14:12:05 webmail postfix/smtp[9196]: < ip_smtp_server[ip_smtp_server]:25: 250 AUTH=LOGIN
Jul 23 14:12:05 webmail postfix/smtp[9196]: match_string: LOGIN ~? LOGIN
Jul 23 14:12:05 webmail postfix/smtp[9196]: match_string: LOGIN ~? LOGIN
Jul 23 14:12:05 webmail postfix/smtp[9196]: server features: 0x1029 size 15360000
Jul 23 14:12:05 webmail postfix/smtp[9196]: maps_find: smtp_sasl_passwd: hash:/etc/postfix/passwd(0,lock|fold_fix): user@dominio = user@dominio:password
Jul 23 14:12:05 webmail postfix/smtp[9196]: mail_addr_find: user@dominio -> user@dominio:password
Jul 23 14:12:05 webmail postfix/smtp[9196]: smtp_sasl_passwd_lookup: host `ip_smtp_server' user `user@dominio' pass `password'
Jul 23 14:12:05 webmail postfix/smtp[9196]: starting new SASL client
Jul 23 14:12:05 webmail postfix/smtp[9196]: name_mask: noplaintext
Jul 23 14:12:05 webmail postfix/smtp[9196]: name_mask: noanonymous
Jul 23 14:12:05 webmail postfix/smtp[9196]: smtp_sasl_authenticate: ip_smtp_server[ip_smtp_server]:25: SASL mechanisms LOGIN
Jul 23 14:12:05 webmail postfix/smtp[9196]: warning: SASL authentication failure: No worthy mechs found
Jul 23 14:12:05 webmail postfix/smtp[9196]: connect to subsystem private/defer
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr nrequest = 0
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr flags = 0
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr queue_id = 33CB31209BF
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr original_recipient = destinatario@altro-dominio
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr recipient = destinatario@altro-dominio
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr offset = 921
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr dsn_orig_rcpt =
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr notify_flags = 0
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr status = 4.7.0
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr diag_type = x-sasl
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr diag_text = no mechanism available
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr mta_type =
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr mta_mname =
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr action = delayed
Jul 23 14:12:05 webmail postfix/smtp[9196]: send attr reason = SASL authentication failed; cannot authenticate to server ip_smtp_server[ip_smtp_server]: no mechanism available

Premesso che ho installato cyrus-sasl e relative librerie necessarie (oltre alla plain che fornisce login anche ntlm, md5, e altro).

Come si vede dal log sembra trovare la modalità di autenticazione (match_string: LOGIN ~? LOGIN anche se doppia mi fa pensare...), poi parte l'autenticazione (smtp_sasl_authenticate: ip_smtp_server[ip_smtp_server]:25: SASL mechanisms LOGIN), user e password sono corretti (nel log ho nascosto i veri dati!), ma alla fine non riesce a farlo e riaccoda il messaggio.

Qualche idea?

Offline LonelyWolf

  • Moderator
  • Hero Member
  • *****
  • Post: 1396
    • Mostra profilo
    • Traversate dei laghi
Re:Postfix solo per inoltrare a smtp esterno
« Risposta #5 il: 24 Luglio 2014, 09:52:54 »
Credo di aver capito dove sta il problema, ma ancora non trovo soluzione:
Il server fa autenticazione con LOGIN ma nel log di postfix si nota un: postfix/smtp[9196]: name_mask: noplaintext quindi il tutto non funziona.

Dato che in main.cf c'è solo :
smtpd_sasl_security_options = noanonymous
(senza noplaintext)

Dove trovo la possibilità di disabilitarlo?
Intanto continuo a cercare!

Offline LonelyWolf

  • Moderator
  • Hero Member
  • *****
  • Post: 1396
    • Mostra profilo
    • Traversate dei laghi
Re:[RISOLTO] Postfix solo per inoltrare a smtp esterno
« Risposta #6 il: 24 Luglio 2014, 11:02:59 »
Finalmente risolto il problema!

Dunque ecco le brevi istruzioni per utilizzare postfix solo con smarthost differenti, in sostanza permette di utilizzare un server smtp specifico per specifiche destinazioni.

Nel mio caso la necessità è di utilizzare il server mail già presente sulla lan per la posta interna e di utilizzare il server smtp dell'isp per l'invio della posta "esterna".

Sono poche cose da fare ma sono diventato matto prima di trovare la soluzione definitiva, quindi eccovi il tutto.

Installate le librerie per permettere l'autenticazione, quelle che servono (io solo plain che permette plain e login):
cyrus-sasl.i686
cyrus-sasl-lib.i686
cyrus-sasl-plain.i686

Passando alla configurazione di postfix, serve un file di configurazione per i server smtp da utilizzare, io l'ho chiamato relayhost_map e l'ho messo in /etc/postfix:
Codice: [Seleziona]
# Per-sender provider
@dominio_esterno    [ip o nome host smtp isp]
@localnet    [ip o nome host server smtp locale]

In questo modo ogni utente che come dominio mittente (from) ha @dominio_esterno utilizzerà il server smtp isp, mentre ogni mail inviata sulla lan locale userà il server della lan, postix userà se stesso per gli utenti presenti solo sullo stesso server 8non servirà mai nel mio caso!)
Potete anche "andare di fino" e anzichè indicare solo il dominio mettere ogni specifico utente con un proprio smtp.

da console chmod 600 in modo che possa essere letto solo da root

postmap /etc/postfix/relayhost_map

Poi creiamo il file con i dati di autenticazione per gli utenti, in questo caso io sono andato di fino perchè preferisco che ogni utente usi i propri dati per autenticarsi sul server dell'isp, ciò non toglie che in caso di molti utenti possiate utilizzare delle credenziali uniche.
io l'ho creato sempre nella stessa cartella con nome passwd:
Codice: [Seleziona]
# Per-sender authentication
user1@dominio_esterno    nome_utente1:password
user2@dominio_esterno    nome_utente2:password
user3@dominio_esterno    nome_utente3:password
user4@dominio_esterno    nome_utente4:password
user5@dominio_esterno    nome_utente5:password
user6@dominio_esterno    nome_utente6:password
Per il server locale non ho autenticazione quindi non ho messo utenti, nel caso fosse necessaria dovrete metterli; anche questo in lettura e scrittura solo da root e poi
postmap /etc/postfix/passwd

Infine editare /etc/postfix/main.cf e aggiungere queste righe alla fine:
Codice: [Seleziona]

smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = PLAIN, LOGIN #qua tutto quello che vi serve come metodo di autenticazione
smtp_sasl_password_maps = hash:/etc/postfix/passwd
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
disable_dns_lookups = yes
smtp_always_send_ehlo = yes
lmtp_sasl_security_options = noanonymous #questo è quello che non mi permetteva l'autenticazione, di default conteneva noplaintext
smtp_sasl_security_options = noanonymous

myhostname = webmail
mydomain = localnet
myorigin = $myhostname.$mydomain
inet_interfaces = all
mydestination = $myhostname.$mydomain, localhost
relay_domains = $myhostname.$mydomain
mynetworks = #questo dipende dalla vostra LAN
home_mailbox = #questo invece dal vostro server

Adesso non vi resta che ri/avviare postfix ed il gioco è fatto.

Roundcube come webmail:
di default utilizza gli utenti di sistema locali ed io non volevo impegolarmi con utenti virtuali e tutto quello che sta dietro, anche perché come ho già scritto volevo che ogni utente avesse un unico accesso per entrambe le caselle di posta (interna/esterna), quindi dopo aver creato i 6 utenti di sistema ho impostato 2 identità per ognuno, una con indirizzo mail localnet ed uno con indirizzo mail fornito dall'isp.
Quando un utente invia una mail sceglie con quale identità inviarla, è quasi identico a thunderbird con più account (una tendina in alto), poi postfix usa il server smtp corretto.

Ovviamente dovecot come server imap, ma nessuna configurazione necessaria.

Infine per recuperare le mail dai 2 account e consegnarle all'utente ho deciso di usare getmail in crontab, che recupera sia dal server pop dell'isp che dal server pop in LAN, serve però un file di configurazione per ogni account (e quindi un totale di 12); nonostante fetchmail avrebbe richiesto meno configurazione.

Per qualsiasi cosa... a disposizioine! :D