I POPcorn e altro ancora.

A.K.A.: come dare un po' di spirito alla gestione delle email.

Come utilizzare altre caselle mail con protocollo imap o pop

Fetchmail è un programma che permette di andare a prendere (dall'Inglese to fetch) le e-mail su altri server tramite i protocolli pop e imap. Quindi in questo caso sarà possibile unificare ogni nostro servizio mail con il nostro server.

I protocolli POP e IMAP possono essere gestiti anche in maniera differente, ad esempio sia mutt che icedove (thunderbird) supportano questi protocolli per scaricare o sincronizzare le proprie casele e-mail. Il vantaggio ad utilizzare fetchmail è la possibilità di processare tutte le e-mail con il nostro server (antivirus, spam, identificazione per mittente...) e quindi averle tutte disponibili sul nostro file system.

Non è l'unico programma disponibile allo scopo, infatti un diretto concorrente è getmail.

Come funziona in breve

Fetchmail può operare sia a comando da lanciare con cron o quando di desidera oppure in modalità demone effettuando controlli con tempistiche fisse. Fetchmail si occuperà di scaricare i messaggi dai server dichiarati e quindi di inviarli al nostro Mail Transfert Agent (ad esempio Postfix). L'invio allmta è effettuato sulla canonica porta 25 del localhost (127.0.0.1) con il protocollo SMTP.

Aiuto in linea

Le principali risorse le troviamo a:

Installazione

Oltre ad installare il pacchetto fetchmail è consigliabile l'installazione anche delle librerie Openssl qualora non presenti sulla propria Debian.

Configurazione

Il file di configurazione per l'esecuzione del demone è /etc/fetchmailrc, per la modalità utente potrà invece essere collocato nella propria home.
Ecco un esempio di configurazione con alcune annotazioni sulle opzioni più particolari.

   1 ##################################
   2 # Opzioni generali per fetchmail #
   3 ##################################
   4 # Intervallo di tempo che passa fra ogni controllo in secondi.
   5 set daemon 300
   6  
   7 # LOG delle operazioni tramite syslog
   8 set syslog
   9  
  10 # Utente postmaster a cui viene recapitata la posta se non ce ne sono altri disponibili
  11 set postmaster "userMaster@myURL.xx"
  12  
  13 # Evita di perdere le mail se succede un errore 4xx. Dall'altro lato,
  14 # però, gli errori 5xx diventano più pericolosi.
  15 # Gli errori saranno comunicati solo al postmaster e non al mittente.
  16 set no bouncemail
  17  
  18 # Non manda insulti a chi manda spam
  19 set no spambounce
  20  
  21 # Ignora le stringhe; potrebbero essere usate da script
  22 set properties ""
  23  
  24 # Inserisci qui le opzioni di default da utilizzare nelle connessioni
  25 # ai vari server. Queste possono venire sovrascritti dalle impostazioni locali
  26 defaults:
  27 # Aggiunge un header di debug/info sul ricevente
  28 tracepolls
  29  
  30 # Usa POP3 come protocollo di default
  31 protocol POP3
  32  
  33 # Ignora gli errori antispam di postfix, dato che è molto lontano
  34 # dalla sicurezza usarli assieme all'opzione bouncemail
  35 antispam -1
  36  
  37 # Massimo numero di email da forwardare in un colpo
  38 batchlimit 100
  39  
  40 # Scarica tutte le email, anche quelle marcate come lette
  41 fetchall
  42  
  43 ###################################
  44 # Caselle di posta da controllare #
  45 ###################################
  46 #poll server.pop
  47 #username "pinco" password "pallo"
  48 #is "pluto" here
  49 #
  50 #poll in.virgilio.it timeout 60 with protocol imap
  51 #username "utente" there with password "xyzxyz" 
  52 #is "nomeutentex@example.com" here options keep

Delle opzioni generali vi è poco da commentare essendo molto chiare le descrizioni. Per la parte delle caselle di posta da controllare ecco le principale dichiarazioni a cui fare attenzione:

poll
  • Qui si inizia con la dichiarazione del server da controllare. È indispensabile indicare l'URL del server, poi a seguire si possono riportare le opzioni della staenza.
is ... here/there
  • Qui e là, da non fare confuzione! Seppure here e there siano opzionali si consiglia di utilizzarli per chiarire la sintassi. Ad esempio se io scarico le e-mail di Alberto per inoltrarle a Barbara, dirò che Alberto là è Barbara qui (user Alberto there is Barbara here). Attenzione a chi si inoltra le e-mail: qualora tale user@dominio non esistesse sul nostro server postfix potrebbe essere rifiutata la mail che quindi andrebbe persa.
keep
  • Da specificare qualora non si desideri cancellare dal server le e-mail appena scaricate.

Le opzioni di sicurezza, il cui utilizzo è consigliato dal sottoscritto, pur rientrando nella dichiarazione della stanza poll sono analizzate nel successivo paragrafo, considerata la delicatezza delle stesse.

Note alla sicurezza

L'assenza di criptazione delle comunicazioni pop e imap può essere oggetto di furto di identità. Infatti qualora l'opzione ssl non fosse abilitata non solo le e-mail viaggerebbero in chiaro, ma persino la password ed il proprio nome utente.
Pertanto si consiglierebbe di adottare una adeguata criptazione. In questo caso
le porte sono la 995 (invece della 110) per il protocollo POP e la 465 (invece della 143) per l'IMAP.

Con fetchmail per utilizzare il sistema di criptazione TSL è necessario avere installate l'inerente libreria OpenSSL. Il sistema di criptazione si occuperà di negoziare all'inizio della comunicazione con il server una chiave simmetrica per l'invio dei messaggi. Tale negoziazione avviene invece tramite una chiave pubblica. In tale maniera ci si assicura contro la possibilità di sniffing.
Oltre alla criptazione della comunicazione è possibile effettuare il controllo del certificato del server e delle rispettiva Public key fingerprint. Queste misure sono atte ad escludere la possibilità di un attacco man-in-the-middle (viene verificata la provenienza della trasmissione).

Abilitare la modalità SSL

Per eseguire connessioni criptate è sufficiente aggiunge <strong>l'opzione ssl</strong> nelle opzioni della connessione (dopo poll) oppure nella parte precedente per avere solo connessioni criptate. Fetchmail, che è intelligente, in automatico si connetterà alla porta 995 o 465.

Copia della fingerprint

Per eseguire una copia della fingerprint si deve aggiunge, nella stanza pool, l'opzione sslfingerprint con a seguire la chiave.
Per ottenere la chiave è sufficiente eseguire fetchmail in modalità verbose. Per esempio create un mini file di configurazione nella propria home con i soli dati della connessione (esempio per POP3, eventualmente inserire altro protocollo appropriato) chiamato .fetchmailrctest:

defaults:
protocol POP3
antispam -1
batchlimit 100
fetchall

poll pop.mail.provider.com
username "user" password "password"
is "otheruser0@myserverdomain" here ssl

e quindi da user lanciare il comando:

$ fetchmail -v -f /home/$USER/.fetchmailrctest

Nell'output, poco prima dell'inizio della trasmissione con il protocollo POP3, troverete la fingerprint. A questo punto non resta che aggiungerla alla stanza del servizio in esame del file /etc/fetchmailrc formattando, dopo il comando ssl, nel seguente modo:

poll pop.mail.provider.com
username "user" password "password"
is "otheruser0@myserverdomain" here ssl sslfingerprint "AA:BB:CC:DD:...:SS:XX"

Copia del certificato

Per prima cosa sarà necessario ottenere il certificato del server e-mail al quale vogliamo connetterci. Quindi sarà necessario connettersi ad esso simulando la connessione POP/IMAP tramite openssl (trattandosi di una simulazione è necessario specificare anche la porta). Procediamo così:

$ openssl s-client -connect domain:port

L'opzione s_client indica per l'appunto di <strong>s</strong>imulare il <strong>client</strong>. Il certificato, che è quello compreso tra i tag -BEGIN CERTIFICATE- e -END CERTIFICATE- compresi, può quindi essere salvato in /etc/fetchmailrc-cert all'interno un file ad hoc (ad esempio $NOMESERVERpop/imap.pem). Controllare infine che i permessi siano per gli altri utenti di sola lettura.
Se ora osservate la simulazione di connessione appena eseguita con openssl probabilmente noterete la presenza, dopo una linea chiamata "Certificate chain" oppure in un altro riferimento nell'output, anche un riferimento l'ente certificatore. Infatti per avere una sicura identificazione del server è necessario verificare due certificati: quello del server e l'identità dell'ente certificatore.
In questo caso il
certificato dell'ente certificatore può essere ottenuto da geotrust scaricando il corrispondente certificato in chiave Base-64 e salvandolo sempre in //etc/fetchmailrc-cert con un nome appropriato (ad es. $nomecertificatore.pem). Per identificare il corretto certificato facciamo attenzione all'uotput dell'ultimo comando, dovremmo identificare il nome dell'ente nelle seguente linee:

$ openssl s_client -connect pop.gmail.com:995
CONNECTED(00000003)
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority<
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDWjCCAsOgAwIBAgIKFNMahgADAAASkDANBgkqhkiG9w0BAQUFADBGMQswCQYD
...

Per eseguire il trasferimento del certificato possiamo scaricarlo e copiarlo manualmente oppure

cd /etc/fetchmailrc-cert/
wget https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer [oppure certificato diverso secondo necessità]

Infine, per rendere i certificati utilizzabili, <strong>rinominarli con il loro hash</strong>. Tranquilli, posto che i file appena scaricati siano stati posta nella cartella ora indicata, si fa tutto in automatico con il comando:

c_rehash /etc/fetchmailrc-cert/

NOTE: ricordatevi che i file contenenti i certificati, per essere tali, devono contenere iniziare e terminare con le seguenti linee:

-----BEGIN CERTIFICATE-----
...
...
-----END CERTIFICATE-----

Editare fetchmailrc

Una volta svolto quanto sopra ricordiamoci di aggiungere le opzioni al file di configurazione come da esempio:

poll pop.mail.provider.com
username "user" password "password"
is "otheruser0@myserverdomain" here ssl
  sslcertck sslcertpath /etc/fetchmailrc-cert/

e tutto funzionerà a meraviglia ed in sicurezza!

NOTE: qualora il certificato o l'hash (fingerprint) cambi sarà necessario aggiornare i parametri con la procedura sopra illustrata.

Note all'integrazione con Postfix

Seppure a proposito di Postfix si discuterà nella pagina seguente, è importante ricordarsi, per permettere a Fetchmail di eseguire il suo lavoro, che deve essere abilitata nel nostro MTA la ricezione delle mail con il dominio da cui scarichiamo con Fetchmail. Altrimenti l'errore sarà il seguente:

From: Mail Delivery System <MAILER-DAEMON@MyMTA-domain>
Subject: Mail delivery failed: returning message to sender
To: User@myLocalDomain

[-- Attachment #1 --]
[-- Type: text/plain, Encoding: 7bit, Size: 0.5K --]

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error.

Reason: Some addresses were rejected by the MDA fetchmail forwards to.

The following address(es) failed:
pinco_pallo@gmail.it
  SMTP error: 550 5.1.1 <pinco_pallo@gmail.it>: Recipient address rejected: User unknown in local recipient table

Quindi ricordatevi di inserire in /etc/postfix/main.cf il vostro dominio POP/IMAP:

mydestination = gmail.it, etcetera, etcetera

MyWiki: Email/Fetchmail (last edited 2015-02-17 20:05:09 by risca)