usare Postfix per la posta elettronica certificata (PEC)

usare Postfix per la posta elettronica certificata (PEC)

Per impostare rapidamente Postfix, si può procedere così
vim main.cf

e modificare i parametri
myhostname = nomeserver.dominio.it
mydomain = dominio di appartenenza del server (per esempio: dominio.it)
myorigin = indica il dominio per la posta inviata dal server (generalmente: $mydomain)
inet_interfaces = interfaccia di rete da utilizzare (generalmente: all)
mydestination = sono i domini che il server riconosce come locali (generalmente:
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
mail.$mydomain, www.$mydomain)
mynetworks = sono le reti sulle quali il server opera (generalmente:
127.0.0.0/8, 192.168.1.0/24, 10.0.0.0/24

Infine, per controllare se il server sta funzionando
nc -w 1 localhost 25 </dev/null

Passiamo ora alla configurazione avanzata per usare un relay host remoto (smarthost)
sudo vim /etc/postfix/main.cf

e modificare in questo modo
relayhost = smtp.tuoprovider.com

quindi ricaricare la configurazione con
sudo /etc/init.d/postfix reload

Se necessario, si possono aggiungere uno o più indirizzi IP "fidati" dai quali può essere accettata posta da inoltrare, modificando il solito file main.cf
mynetworks = 127.0.0.0/8, 192.168.0.1/24, 10.11.22.33/32, x.x.x.x

Se invece occorre ritrasmettere la posta elettronica per domini specifici (ad esempio quelli locali), si può agire tramite il file transport
dominioqualsiasi.com smtp:[10.0.0.1]:25
unaltrodominio.com smtp:10.0.0.2:25

In generale la regola è questa
dominio_per_cui_fare_relay smtp:ip_server_remoto:porta

Se vogliamo disabilitare la verifica del record MX relativa al dominio in questione verificheremo che nel file /etc/postfix/main.cf ci sia la riga
transport_maps = hash:/etc/postfix/transport

Ricordandosi di impartire il comando postmap ogni volta che si modificano i file di riferimento di  Postfix. Se vogliamo analizzare il traffico SMTP possiamo scrivere
tcpdump -l -s0 -w - tcp dst port 25 | strings | grep -i 'MAIL FROM\|RCPT TO'

Potrebbe nascere l'esigenza di gestire la coda dei messaggi, quindi possiamo seguire le istruzioni che ci da Roberto Pennolino sul suo blog opuntia.biz
postsuper -d ALL

per cancellare la coda dei messaggi
postsuper -d ALL incoming

per cancellare la coda dei messaggi in entrata, eventualmente usare gli altri switch hold, deferred, active
postsuper -d ID_messaggio

per cancellare un singolo messaggio conoscendo il suo identificativo e infine
postqueue -p

per vedere quanti messaggi ci sono ancora nella coda. Ovviamente per inviare tutti i messaggi in coda il comando è
postqueue -f

Andiamo al sodo: configurare il file
/etc/postfix/sasl_passwd

in modo da permettere l'autenticazione SMTP
smtp.example.com username@example.com:password

quindi scriviamo
chown root:root /etc/postfix/sasl_passwd

e poi
chmod 0600 /etc/postfix/sasl_passwd

infine
postmap hash:/etc/postfix/sasl_passwd

A questo punto nel file /etc/postfix/main.conf andiamo a scrivere
relayhost = smtp.example.com
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =

Per tutelare la riservatezza dei messaggi evitiamo di aprirli, ma se fosse necessario controllare l'oggetto, possiamo scrivere gli header_checks nel file main.cf
"regexp:/etc/postfix/header_checks"
main.cf entry = "header_checks = regexp:/etc/postfix/header_checks"

e aggiungiamo
"/^Subject:/ WARN"

questa operazione permette di aggiungere l'oggetto delle email nel file di log di Postfix. Infine, veniamo alla questione cruciale: mi è stato chiesto se la posta elettronica certificata spedita attraverso un MTA Postfix sia valida come quella spedita da altri programmi similari. Si è valida! E spiego perché...

Received: from postino (11.22.33.44) by relay.postecert.it (8.5.137.01) (authenticated as  posta@dominiocliente.it)
id 4FB27BD800D15FCC for cliente@dominio-cliente.it; Wed, 26 Sep 2012 10:19:02 +0200
Received: by postino (Postfix, from userid 1000)
id 6B69B42250; Wed, 26 Sep 2012 10:47:00 +0200 (CEST)
Subject: prova
To:
X-Mailer: mail (GNU Mailutils 2.2)
Message-Id:
Date: Wed, 26 Sep 2012 10:47:00 +0200 (CEST)From: posta@dominiocliente.it (kalos)
X-Riferimento-Message-ID: <20120926084700 data-blogger-escaped-.6b69b42250="" data-
blogger-escaped-postino="">

Dando per scontato che si conoscano le due RFC:  RFC6109 e RFC822 è chiaro che non è importante qual è il programma che spedisce il messaggio, sia che si tratti di Microsoft Outlook che di un qualsiasi altro programma simile.

Difatti, il funzionamento della PEC è molto semplice: quando si utilizza la PEC, viene fornita al mittente una ricevuta che costituisce prova legale dell’avvenuta spedizione del messaggio e dell'eventuale documentazione allegata.

Allo stesso modo, quando il messaggio giunge al destinatario, il gestore invia al mittente la ricevuta di avvenuta (o mancata) consegna, con precisa indicazione temporale. Quando un mittente invia un messaggio al destinatario, attraverso il server di PEC del proprio gestore, il server stesso ne controlla le credenziali d'accesso (nome utente e password).

Quindi il gestore controlla le caratteristiche formali del messaggio e invia al mittente una ricevuta di accettazione (o eventualmente di non accettazione) con tutti gli estremi: data e ora dell'invio, mittente, destinatario, oggetto.

Il messaggio viene quindi "imbustato" dentro un altro messaggio, chiamato "busta di trasporto", firmato digitalmente dal gestore stesso. Questa operazione consente di certificare ufficialmente l'invio e successivamente la consegna. La "busta" viene ricevuta dal gestore PEC del destinatario che controlla la validità della firma del gestore del mittente e la validità del messaggio. Se tutti i controlli hanno avuto esito positivo, invia all'altro gestore una ricevuta di presa in carico e, contestualmente, il messaggio stesso al destinatario.

Quest'ultimo non è detto che lo legga subito. Infatti, il messaggio arriva in un "punto di consegna", che è una specie di cassetta postale. Il punto di consegna ha una funzione importante perché, appena riceve il messaggio, invia una ricevuta di avvenuta consegna al gestore del mittente.

A questo punto il mittente troverà la ricevuta nella propria casella postale. Vediamo come fare "telnet" al server Postfix da Windows... Per installare telnet da riga di comando in windows sette si apre una finestra "MD-DOS" con i permessi di amministratore e si scrive
pkgmgr /iu:"TelnetClient"

(nota: il comando funziona anche su Windows Server 2008 R2, Windows Server 2008 e Windows Vista).

Per verificare che telnet sia correttamente installato, sempre rimanendo nella finestra a riga di comando, scrivere
telnet.exe

Adesso proviamo a connetterci al server di posta, ricordando che telnet non fa distinzione tra maiuscole e minuscole. Scriviamo quindi
set localecho

e premiamo invio per confermare. Questa impostazione permette di visualizzare quello che si scriverà. Quindi...
set logfile [nomefile]
open smtp.nomeprovider.it 25

dove smtp.nomeprovider.it sarà sostituito dal vero nome del vero server SMTP al quale vogliamo collegarci. Premiamo il tasto invio... e scriviamo
EHLO mionomehost.com

(al solito, usate il vero nome host). E poi
MAIL FROM:io@mionomehost.com

(invio...)

RCPT TO:tu@gimmail.gom NOTIFY=success,failure

(invio...)

Lo switch NOTIFY tranquillizza i più ansiosi... perché chiede al server SMTP di inviare una notifica sullo stato del recapito (per chi volesse evolvere le proprie conoscenze i messaggi DSN vengono definiti nella RFC 1891).

Scriviamo adesso
DATA

(il solito "invio"...)

Riceveremo una risposta dal server SMTP che ci indica come terminare la digitazione del corpo del messaggio, andiamo a scrivere allora
Oggetto: la mia email

(invio... 2 volte! - perché la RFC2822 richiede che l'oggetto sia separato dal corpo del messaggio da un "invio")
Caro amico ti scrivo...

(invio... 2 volte! - per il motivo di cui sopra...)

Adesso scriviamo un "punto"
.

per comunicare al server che abbiamo terminato di scrivere il messaggio. Dovrebbe apparire un messaggio di conferma tipo questo
250 2.6.0 [ID] Queued mail for delivery

dove [ID] è l'identificativo univoco assegnato a quel messaggio. Per chiudere la connessione si digita
QUIT

e si preme invio... Il server, educatamente, saluterà con qualcosa del tipo
221 2.0.0 Service closing transmission channel

Per chiudere il programma TELNET si scriverà ancora
QUIT

seguito da invio... Dal blog di Roberto Pennolino vediamo adesso come inserire un filtro sulle ricevute di ritorno. Iniziamo con la configurazione di Postfix editando il file
vi, /etc/postfix/main.cf

ed andiamo a cercare il parametro mailbox_command in questo modo
mailbox_command = /usr/bin/procmail -a “$EXTENSION” DEFAULT=/home/$USER/Maildir/
MAILDIR=/home/$USER/Maildir/

Successivamente entriamo con le credenziali dell'utente della casella di posta elettronica sulla  quale si deve effettuare il filtraggo e modifichiamo
vim .procmailrc

Mettiamo ora all’interno del file le nostre regole
#directory
MAILDIR = $HOME/Maildir/ # Le email finiranno qui
# sposta le ricevute di lettura in
# /home/utente/Maildir/.Notifiche\ lettura/
:0
* ^Subject.*Letto:*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/
:0
* ^Subject.*Read -*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/
:0
* ^Subject.*Notification for*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/
:0
* ^Subject.*Recapitato:*
#/dev/null
/home/utente/Maildir/.Notifiche\ lettura/



Risorse e riferimenti:
http://www.postfix.org/TLS_README.html#client_smtps
http://www.rigacci.org/wiki
http://postfix.state-of-mind.de
http://www.hostingtalk.it/articoli/mail-server-e-posta
http://www.rfc.it/
http://www.zimbra.com/
http://www.seacom.it

Privacy Policy