Trasparenze di un corso di server di posta elettronica

Licenza di distribuzione:
Questo documento è per la libera distribuzione e modifica; si richiede solamente che si tenga traccia, nelle sue varie edizioni, degli autori e delle versioni dai quali è stato ottenuto il testo originale come nella riga seguente:
Versione 1 (19 luglio 2004) di Alessandro Selli <mailto:dhatarattha@route-add.net> http://alessandro.route-add.net/Unixalia/Trasparenze-posta-elettronica.html

< Torna al livello superiore <
<< Torna alla pagina iniziale <<

Server di posta (Email)

Esistono diversi protocolli per lo scambio di posta:


Nel seguito tratteremo i server seguenti:

Effettueremo delle prove via telnet da terminale.



POSTFIX (1/9)

Consiste in una moltitudine di programmi ciascuno specializzato in una fase del trattamento dei messaggi di posta elettronica smistati. Questo lo differenzia dal più largamente utilizzato e famoso (ma vecchio) Sendmail, il primo server SMTP Unix impiegato su larga scala.  La scelta di modularizzarne il funzionamento è dovuta a considerazioni di:



POSTFIX (2/9)

File di configurazione principale: /etc/postfix/main.cf

Considereremo la configurazione più semplice, quella di un server per un solo dominio internet (niente domini virtuali) con autenticazione IP, che cioè tiene conto solamente dell'indirizzo IP di provenienza del messaggio.

Un esempio:

myhostname = brillante.route-add.net
mydomain = route-add.net
myorigin = $mydomain
mydestination = localhost, $myhostname, $mydomain
relayhost = relay.eurnetcity.net
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU Linux)
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mynetworks = 127.0.0.0/8, 192.168.1.0/28
inet_interfaces = all
notify_classes = bounce, 2bounce, delay, policy, protocol, resource, software
header_checks = regexp:/etc/postfix/header_checks
mailbox_transport = cyrus
message_size_limit = 1048576



POSTFIX (3/9)

Spiegazione delle voci di configurazione:

myhostname = brillante.route-add.net
Nome DNS pienamente qualificato del server

mydomain = route-add.net
Nome di dominio del server (per i cui utenti sono responsabile della posta)

myorigin = $mydomain

Dominio dal quale appaiono provenire i messaggi inviati dalla macchina sulla quale Postfix è in esecuzione


mydestination = localhost, $myhostname, $mydomain

Lista dei domini che questo server considera i destinatari finali dei messaggi ricevuti

relayhost = relay.eurnetcity.net

Server SMTP al quale inviare i messaggi che non sono destinati al dominio per il quale qeusto server è responsabile



POSTFIX (4/9)

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU Linux)

Presentazione del server alla richiesta di servizio da parte di un client o di un altro server che intende spedire della posta; esempio:


[aselli@castrum ~]$ telnet diamante 25

Trying 192.168.1.9...

Connected to diamante.

Escape character is '^]'.

220 brillante.route-add.net ESMTP Postfix (Debian/GNU Linux)

QUIT

221 Bye

Connection closed by foreign host.

[aselli@castrum ~]$

alias_maps = hash:/etc/aliases

Tabella con alias specifica per Postfix. Esempio di una sua riga:


webmaster: root


alias_database = hash:/etc/aliases

Altra tabella di alias, simile alla precedente ma che permette di specificare una moltitudine di tabelle, come servizi NIS ove disponibili oltre a semplici file locali.  Esempio:


alias_maps = dbm:/etc/aliases, nis:mail.aliases



POSTFIX (5/9)

mynetworks = 127.0.0.0/8, 192.168.1.0/28

Reti dalle quali il server SMTP accetta messaggi diretti a qualsiasi altro dominio internet


inet_interfaces = all

Indirizzi IP dai quali il server accetta richieste di connessione


notify_classes = bounce, 2bounce, delay, policy, protocol, resource, software

Tipi di errore che il server notifica all'utente "postmaster" ogni volta che si verificano:



POSTFIX (6/9)

header_checks = regexp:/etc/postfix/header_checks

File dove leggere di particolari intestazioni nei messaggi in arrivo che "tradiscono" un messaggio che si vuole sia respinto dal server. sempio:


/^Subject: .*Porn.*/ REJECT


mailbox_transport = cyrus

Metodo di consegna dei messaggi ricevuti destinati ad utenti del dominio per il quale questo server è responsabile.  Se assente, i messaggi vengono messi nella casella di posta dell'utente destinatario in formato Unix-MBOX nel file /var/mail/$UTENTE


message_size_limit = 1048576

Limite nelle dimensioni di un messaggio inviato al server prima che questo sia respinto perché troppo grande.



POSTFIX (7/9)

Ora vediamo qualche esempio su come si comporta Postfix al variare di alcune delle voci elencate sopra.


notify_classes = bounce, 2bounce, delay, policy, protocol, resource, software

Il server è configurato per impedire il "relay", cioè che da dominio1 si contatti il server su dominio2 perché invii un messaggio ad un utente di dominio3.  Quando si tenta di farlo, il server invia un codice d'errore (di tipo "policy") al mittente e il messaggio seguente all'utente "postmaster" del proprio dominio contentente la trascrizione dei comandi che ha scambiato con il client o il server che l'ha contattato:


From: Mail Delivery System <MAILER-DAEMON@brillante.route-add.net>

To: Postmaster <postmaster@route-add.net>

Date: Sun,  7 Mar 2004 10:42:20 +0100 (CET)

Subject: Postfix SMTP server: errors from unknown[61.173.40.131]

Transcript of session follows.

Out: 220 brillante.route-add.net ESMTP Postfix (Debian/GNU Linux)

In:  HELO 1911PJTH.vicp.net

Out: 250 brillante.route-add.net

In:  MAIL From: <bdrmlvr@aol.com>

Out: 250 Ok

In:  RCPT To:<bingbing_3@juno.com>

Out: 554 <bingbing_3@juno.com>: Recipient address rejected: Relay access

    denied

In:  QUIT

Out: 221 Bye



POSTFIX (8/9)

header_checks = regexp:/etc/postfix/header_checks

Se nel file /etc/postfix/header_checks compare una riga come la seguente:


/^To: .*trappola@route-add\.net.*/ REJECT


l'invio di un messaggio a trappola@route.add.net provocherà un errore che sarà documentato in questo modo:



POSTFIX (9/9)

From: Mail Delivery System <MAILER-DAEMON@brillante.route-add.net>

To: Postmaster <postmaster@route-add.net>

Date: Wed, 10 Mar 2004 18:47:31 +0100 (CET)

Subject: Postfix SMTP server: errors from unknown[195.166.233.52]

Transcript of session follows.

Out: 220 brillante.route-add.net ESMTP Postfix (Debian/GNU Linux)

In:  EHLO ADJULS

Out: 250-brillante.route-add.net

Out: 250-PIPELINING

Out: 250-SIZE 1048576

Out: 250-VRFY

Out: 250-ETRN

Out: 250-XVERP

Out: 250 8BITMIME

In:  RSET

Out: 250 Ok

In:  MAIL FROM:<silasmonvete2004@primposta.com>

Out: 250 Ok

In:  RCPT TO:<trappola@route-add.net>

Out: 250 Ok

In:  DATA

Out: 354 End data with <CR><LF>.<CR><LF>

Out: 550 Error: Message content rejected

In:  QUIT

Out: 221 Bye



QPOPPER (1/2)

È un server molto semplice da configurare.  I suoi valori preimpostati sono tali che anche con un file di configurazione vuoto si può permettere agli utenti che dispongono di un account sulla macchina sulla quale gira il server POP3 di accedere alla mailbox in formato Unix-MBOX, ossia ai file /var/mail/$UTENTE.  Nel seguito vedremo un esempio di una sessione POP3 da terminale.



QPOPPER (2/2)

aselli@castrum ~$ telnet localhost 110

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

+OK Qpopper (version 4.0.5) at castrum starting.  <19797.1079551626@castrum>

USER nicola

+OK Password required for nicola.

PASS Inindovinabile

+OK nicola has 1 visible message (0 hidden) in 760 octets.

LIST

+OK 1 visible messages (760 octets)

1 760

.

TOP 1 1

+OK Message follows

Return-Path: <aselli@route-add.net>

Delivered-To: nicola@localhost.localdomain

Received: from localhost (localhost [127.0.0.1])

       by marana (Postfix) with ESMTP id EF8EA403A

       for <nicola@localhost>; Wed, 17 Mar 2004 18:24:14 +0100 (CET)

Date: Wed, 17 Mar 2004 18:24:14 +0100 (CET)

From: Alessandro Selli <aselli@route-add.net>

To: nicola@localhost.localdomain

Subject: Prova

Message-ID: <Pine.LNX.4.58.0403171823430.19245@castrum>

Content-Type: TEXT/PLAIN; charset=US-ASCII

Status: RO

 Provola.

.

QUIT

+OK Pop server at castrum signing off.

Connection closed by foreign host.



CYRUS (1/5)

IMAP4 è un protocollo ricco, pensato per lo scambio di messaggi di tipo generico, usato soprattutto per la posta elettronica e per gli articoli dei newsgroup ma utilizzabile per altre cose.  Permette di creare e gestire directory su server remoti dove scrivere, archiviare, leggere, spostare o cancellare messaggi.  Uno dei server disponibili su Linux e altri Unix è Cyrus.  Una sua configurazione essenziale per essere usato con la sola posta elettronica ha queste righe nel file /etc/imapd.conf:

configdirectory: /var/lib/cyrus

defaultpartition: default

partition-default: /var/spool/cyrus/mail

admins: cyrus

allowanonymouslogin: no

umask: 077



CYRUS (2/5)



CYRUS (3/5)

Per poter usare i servizi del server IMAP bisogna creare un utente con il programma "cyradm".  Contrariamente al server POP3 Qpopper, il server Cyrus non ha bisogno che l'utente di una certa casella IMAP sia un reale utente del sistema ospite: Cyrus usa un suo proprio database degli utenti e delle password corrispondenti.  Segue un esempio di creazione di un utente, l'utente "sviluppatore":

[root@server ~]# cyradm -user root localhost

localhost password:

localhost> createmailbox user.sviluppatore

localhost> listmailbox

localhost> INBOX                user.sviluppatore

localhost> quit

[root@server ~]#



CYRUS (4/5)

Cyrus usa il formato MAILDIR per stoccare i messaggi, non il MBOX come Qpopper; questo vuol dire che invece di un file contenente tutti i messaggi esiste, per ciascun utente, una directory che contiene tanti file quanti sono i messaggi.  Ad esempio:

[root@server ~]# ls /var/spool/cyrus/mail/user/aselli

1104.  1276.  1411.  1472.  1491.  1572.  1726.  cyrus.cache

1141.  1280.  1412.  1474.  1507.  1582.  1738.  cyrus.header

1149.  1294.  1432.  1483.  1552.  1584.  1752.  cyrus.index

1207.  1401.  1433.  1486.  1553.  1585.  646.   cyrus.seen

Altri dati riguardanti il nome preimpostato delle directory create dagli utenti esisteni e i diritti di lettura/scrittura/altro stanno nel file:


[root@server ~]# cat /var/lib/cyrus/mailboxes

user.aselli   default aselli        lrswipcda

user.sviluppatore     default sviluppatore  lrswipcda

Segue un esempio di accesso al servizio IMAP4 da un terminale a caratteri verso il server sul computer "diamante":



CYRUS (5/5)

aselli@castrum ~$ telnet diamante 143

Trying 192.168.1.9...

Connected to diamante.

Escape character is '^]'.

* OK diamante Cyrus IMAP4 v1.5.19 server ready

0001 LOGIN sviluppatore Inindovinabile

0001 OK User logged in

0011 CAPABILITY

* CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS X-NON-HIERARCHICAL-RENAME NO_ATOMIC_RENAME UNSELECT X-NETSCAPE

0011 OK Completed

001A SELECT INBOX

* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)

* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]

* 30 EXISTS

* 2 RECENT

* OK [UNSEEN 29]

* OK [UIDVALIDITY 1076531885]

001A OK [READ-WRITE] Completed

002A FETCH 2 (FLAGS BODY[HEADER.FIELDS (DATE FROM)])

* 2 FETCH (FLAGS (\Seen) BODY[HEADER.FIELDS (DATE FROM)] {80}

Date: Sat, 6 Mar 2004 15:56:43 +0100

From: Antonio Marchigiano <antomarchi@giano.it>

)

002A OK Completed

002B LOGOUT

* BYE LOGOUT received

002B OK Completed

Connection closed by foreign host.


< Torna al livello superiore <
<< Torna alla pagina iniziale <<